diff --git a/.pipelines/store/PDPs/PDP-Media/en-US/.gitkeep b/.pipelines/store/PDPs/PDP-Media/en-US/.gitkeep
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/.pipelines/store/PDPs/PDP/cs/PDP.xml b/.pipelines/store/PDPs/PDP/cs/PDP.xml
new file mode 100644
index 00000000000..62191202e23
--- /dev/null
+++ b/.pipelines/store/PDPs/PDP/cs/PDP.xml
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Shell
+
+ PowerShell
+
+ Terminál
+
+ Příkazový řádek
+
+ Automatizace
+
+ Automatizace úloh
+
+ Skriptování
+
+
+ PowerShell je prostředí příkazového řádku a skriptovací jazyk založený na platformě .NET se zaměřením na úlohy. PowerShell pomáhá správcům systému a pokročilým uživatelům rychle automatizovat úlohy, které spravují operační systémy (Linux, macOS a Windows) a procesy.
+
+Příkazy PowerShellu umožňují spravovat počítače z příkazového řádku. Zprostředkovatelé PowerShellu umožňují přístup k úložištím dat, jako jsou registr a úložiště certifikátů, stejně snadno jako k systému souborů. PowerShell obsahuje pokročilý analyzátor výrazů a plnohodnotný skriptovací jazyk.
+
+PowerShell je opensourcový. Viz https://github.com/powershell/powershell
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Další podrobnosti najdete na naší stránce s vydáními na GitHubu.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Interaktivní prostředí
+
+ Skriptovací jazyk
+
+ Vzdálená správa
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Microsoft Corporation
+
+
+
+
+ https://github.com/PowerShell/PowerShell
+
+ https://github.com/PowerShell/PowerShell/issues
+
+ https://go.microsoft.com/fwlink/?LinkID=521839
+
diff --git a/.pipelines/store/PDPs/PDP/de/PDP.xml b/.pipelines/store/PDPs/PDP/de/PDP.xml
new file mode 100644
index 00000000000..ece2876dab8
--- /dev/null
+++ b/.pipelines/store/PDPs/PDP/de/PDP.xml
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Shell
+
+ PowerShell
+
+ Terminal
+
+ Befehlszeile
+
+ Automatisierung
+
+ Aufgabenautomatisierung
+
+ Skripterstellung
+
+
+ PowerShell ist eine aufgabenbasierte Befehlszeilenshell und Skriptsprache, die auf .NET basiert. PowerShell unterstützt Systemadministratoren und Power-User bei der schnellen Automatisierung von Aufgaben zur Verwaltung von Betriebssystemen (Linux, macOS und Windows) und Prozessen.
+
+Mit PowerShell-Befehlen können Sie Computer über die Befehlszeile verwalten. Mit PowerShell-Anbietern können Sie genauso einfach auf Datenspeicher wie die Registrierung und den Zertifikatspeicher zugreifen wie auf das Dateisystem. PowerShell enthält einen umfangreichen Ausdrucksparser und eine vollständig entwickelte Skriptsprache.
+
+PowerShell ist Open Source. https://github.com/powershell/powershell anzeigen
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Weitere Informationen finden Sie auf unserer GitHub-Releaseseite.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Interaktive Shell
+
+ Skriptsprache
+
+ Remoteverwaltung
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Microsoft Corporation
+
+
+
+
+ https://github.com/PowerShell/PowerShell
+
+ https://github.com/PowerShell/PowerShell/issues
+
+ https://go.microsoft.com/fwlink/?LinkID=521839
+
diff --git a/.pipelines/store/PDPs/PDP/en-US/PDP.xml b/.pipelines/store/PDPs/PDP/en-US/PDP.xml
index ce36a3677f7..552009ec271 100644
--- a/.pipelines/store/PDPs/PDP/en-US/PDP.xml
+++ b/.pipelines/store/PDPs/PDP/en-US/PDP.xml
@@ -1,12 +1,5 @@
-
-
-
-
-
-
-
@@ -51,23 +44,9 @@ PowerShell is Open Source. See https://github.com/powershell/powershell
- Please see our GitHub releases page for additional details.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ Version: ___VERSION___
+
+Changelog: ___CHANGELOGLINK___
diff --git a/.pipelines/store/PDPs/PDP/es/PDP.xml b/.pipelines/store/PDPs/PDP/es/PDP.xml
new file mode 100644
index 00000000000..5509fe13b45
--- /dev/null
+++ b/.pipelines/store/PDPs/PDP/es/PDP.xml
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Shell
+
+ PowerShell
+
+ Terminal
+
+ Línea de comandos
+
+ Automatización
+
+ Automatización de tareas
+
+ Scripting
+
+
+ PowerShell es un shell de línea de comandos basado en tareas y un lenguaje de scripting basado en .NET. PowerShell ayuda a los administradores de sistemas y a los usuarios avanzados a automatizar rápidamente las tareas que administran los sistemas operativos (Linux, macOS y Windows) y los procesos.
+
+Los comandos de PowerShell le permiten administrar equipos desde la línea de comandos. Los proveedores de PowerShell le permiten acceder a los almacenes de datos, como el registro y el almacén de certificados, con la misma facilidad con la que accede al sistema de archivos. PowerShell incluye un analizador de expresiones enriquecido y un lenguaje de scripting completamente desarrollado.
+
+PowerShell es de código abierto. Ver https://github.com/powershell/powershell
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Consulte la página de versiones de GitHub para obtener más información.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Shell interactivo
+
+ Lenguaje de scripting
+
+ Administración remota
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Microsoft Corporation
+
+
+
+
+ https://github.com/PowerShell/PowerShell
+
+ https://github.com/PowerShell/PowerShell/issues
+
+ https://go.microsoft.com/fwlink/?LinkID=521839
+
diff --git a/.pipelines/store/PDPs/PDP/fr/PDP.xml b/.pipelines/store/PDPs/PDP/fr/PDP.xml
new file mode 100644
index 00000000000..03538596b3a
--- /dev/null
+++ b/.pipelines/store/PDPs/PDP/fr/PDP.xml
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Shell
+
+ PowerShell
+
+ Terminal
+
+ Ligne de commande
+
+ Automation
+
+ Automatisation des tâches
+
+ Script
+
+
+ PowerShell est un shell de ligne de commande basé sur des tâches et un langage de script basé sur .NET. PowerShell aide les administrateurs système et les utilisateurs avancés à automatiser rapidement les tâches de gestion des systèmes d’exploitation (Linux, macOS et Windows) et des processus.
+
+Les commandes PowerShell vous permettent de gérer des ordinateurs à partir de la ligne de commande. Les fournisseurs PowerShell vous permettent d’accéder aux magasins de données, tels que le registre et le magasin de certificats, aussi facilement que vous accédez au système de fichiers. PowerShell comprend un analyseur d’expressions enrichi et un langage de script entièrement développé.
+
+PowerShell est open source. Voir https://github.com/powershell/powershell
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Veuillez consulter notre page des versions GitHub pour plus de détails.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Shell interactif
+
+ Langage de script
+
+ Gestion à distance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Microsoft Corporation
+
+
+
+
+ https://github.com/PowerShell/PowerShell
+
+ https://github.com/PowerShell/PowerShell/issues
+
+ https://go.microsoft.com/fwlink/?LinkID=521839
+
diff --git a/.pipelines/store/PDPs/PDP/it/PDP.xml b/.pipelines/store/PDPs/PDP/it/PDP.xml
new file mode 100644
index 00000000000..d7db6db8467
--- /dev/null
+++ b/.pipelines/store/PDPs/PDP/it/PDP.xml
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Shell
+
+ PowerShell
+
+ Terminale
+
+ Riga di comando
+
+ Automazione
+
+ Automazione delle attività
+
+ Scripting
+
+
+ PowerShell è una shell da riga di comando basata su attività e un linguaggio di scripting basato su .NET. PowerShell consente agli amministratori di sistema e agli utenti esperti di automatizzare rapidamente le attività di gestione dei sistemi operativi (Linux, macOS e Windows) e dei processi.
+
+I comandi di PowerShell consentono di gestire i computer dalla riga di comando. I provider di PowerShell consentono di accedere agli archivi dati, ad esempio l'archivio certificati e del Registro di sistema, con la stessa facilità con cui si accede al file system. PowerShell include un parser di espressioni avanzate e un linguaggio di scripting completamente sviluppato.
+
+PowerShell è open source. Vedi https://github.com/powershell/powershell
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Per altri dettagli, vedere la pagina delle versioni di GitHub.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Shell interattiva
+
+ Linguaggio di scripting
+
+ Gestione remota
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Microsoft Corporation
+
+
+
+
+ https://github.com/PowerShell/PowerShell
+
+ https://github.com/PowerShell/PowerShell/issues
+
+ https://go.microsoft.com/fwlink/?LinkID=521839
+
diff --git a/.pipelines/store/PDPs/PDP/ja/PDP.xml b/.pipelines/store/PDPs/PDP/ja/PDP.xml
new file mode 100644
index 00000000000..ac3cb034c6e
--- /dev/null
+++ b/.pipelines/store/PDPs/PDP/ja/PDP.xml
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ シェル
+
+ PowerShell
+
+ ターミナル
+
+ コマンド ライン
+
+ 自動化
+
+ タスクの自動化
+
+ スクリプト
+
+
+ PowerShell は、.NET 上に構築されたタスクベースのコマンドライン シェルおよびスクリプト言語です。 PowerShell は、システム管理者とパワー ユーザーがオペレーティング システム (Linux、macOS、Windows) とプロセスを管理するタスクを迅速に自動化するのに役立ちます。
+
+PowerShell コマンドを使用すると、コマンド ラインからコンピューターを管理できます。 PowerShell プロバイダーを使用すると、レジストリや証明書ストアなどのデータ ストアに、ファイル システムにアクセスするのと同じくらい簡単にアクセスできます。 PowerShell には、豊富な式パーサーと完全に開発されたスクリプト言語が含まれています。
+
+PowerShell はオープン ソースです。 https://github.com/powershell/powershell を表示
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ より詳しい情報については、GitHub のリリース ページをご覧ください。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 対話型シェル
+
+ スクリプト言語
+
+ リモート管理
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Microsoft Corporation
+
+
+
+
+ https://github.com/PowerShell/PowerShell
+
+ https://github.com/PowerShell/PowerShell/issues
+
+ https://go.microsoft.com/fwlink/?LinkID=521839
+
diff --git a/.pipelines/store/PDPs/PDP/ko/PDP.xml b/.pipelines/store/PDPs/PDP/ko/PDP.xml
new file mode 100644
index 00000000000..4d7cb7e68da
--- /dev/null
+++ b/.pipelines/store/PDPs/PDP/ko/PDP.xml
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 셸
+
+ PowerShell
+
+ 터미널
+
+ 명령줄
+
+ 자동화
+
+ 작업 자동화
+
+ 스크립팅
+
+
+ PowerShell은 .NET에서 구축된 작업 기반 명령줄 셸 및 스크립팅 언어입니다. PowerShell을 사용하면 시스템 관리자와 전원 사용자가 운영 체제(Linux, macOS 및 Windows) 및 프로세스를 관리하는 작업을 신속하게 자동화할 수 있습니다.
+
+PowerShell 명령을 사용하면 명령줄에서 컴퓨터를 관리할 수 있습니다. PowerShell 공급자는 파일 시스템에 액세스하는 것처럼 쉽게, 레지스트리 및 인증서 저장소와 같은 데이터 저장소에 액세스하도록 지원합니다. PowerShell에는 강력한 식 구문 분석기와 완성도 높은 스크립팅 언어가 포함되어 있습니다.
+
+PowerShell이 오픈 소스로 제공됨. See https://github.com/powershell/powershell
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 자세한 내용은 GitHub 릴리스 페이지를 참조하세요.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 대화형 셸
+
+ 스크립트 언어
+
+ 원격 관리
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Microsoft Corporation
+
+
+
+
+ https://github.com/PowerShell/PowerShell
+
+ https://github.com/PowerShell/PowerShell/issues
+
+ https://go.microsoft.com/fwlink/?LinkID=521839
+
diff --git a/.pipelines/store/PDPs/PDP/pl/PDP.xml b/.pipelines/store/PDPs/PDP/pl/PDP.xml
new file mode 100644
index 00000000000..19bcf51fe53
--- /dev/null
+++ b/.pipelines/store/PDPs/PDP/pl/PDP.xml
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Powłoka
+
+ PowerShell
+
+ Terminal
+
+ Wiersz polecenia
+
+ Automatyzacja
+
+ Automatyzacja zadań
+
+ Obsługa skryptów
+
+
+ Technologia PowerShell to zadaniowa powłoka wiersza polecenia i język skryptowy oparte na platformie .NET. Technologia PowerShell pomaga administratorom systemów i zaawansowanym użytkownikom szybko automatyzować zadania związane z zarządzaniem systemami operacyjnymi (Linux, macOS i Windows) oraz procesami.
+
+Polecenia PowerShell pozwalają zarządzać komputerami z poziomiu wiersza polecenia. Dostawcy PowerShell umożliwiają dostęp do magazynów danych, takich jak rejestr i magazyn certyfikatów, tak samo łatwo jak do systemu plików. PowerShell zawiera rozbudowany parser wyrażeń i w pełni rozwinięty język skryptowy.
+
+PowerShell jest oprogramowaniem open source. Zobacz https://github.com/powershell/powershell
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Aby uzyskać dodatkowe informacje, zobacz naszą stronę wersji usługi GitHub.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Interaktywna powłoka
+
+ Język skryptowy
+
+ Zarządzanie zdalne
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Microsoft Corporation
+
+
+
+
+ https://github.com/PowerShell/PowerShell
+
+ https://github.com/PowerShell/PowerShell/issues
+
+ https://go.microsoft.com/fwlink/?LinkID=521839
+
diff --git a/.pipelines/store/PDPs/PDP/pt-BR/PDP.xml b/.pipelines/store/PDPs/PDP/pt-BR/PDP.xml
new file mode 100644
index 00000000000..d400d7014c1
--- /dev/null
+++ b/.pipelines/store/PDPs/PDP/pt-BR/PDP.xml
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Interpretador de comandos
+
+ PowerShell
+
+ Terminal
+
+ Linha de Comando
+
+ Automação
+
+ Automação de Tarefas
+
+ Scripts
+
+
+ PowerShell é um shell de linha de comando baseado em tarefas e uma linguagem de script criada no .NET. O PowerShell ajuda administradores de sistemas e usuários avançados a automatizar rapidamente tarefas que gerenciam sistemas operacionais (Linux, macOS e Windows) e processos.
+
+Os comandos do PowerShell permitem gerenciar computadores pela linha de comando. Os provedores do PowerShell permitem acessar repositórios de dados, como o Registro e o repositório de certificados, com a mesma facilidade com que você acessa o sistema de arquivos. O PowerShell inclui um avançado analisador de expressões e uma linguagem de script totalmente desenvolvida.
+
+O PowerShell é de código aberto. Confira https://github.com/powershell/powershell
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Confira nossa página de versões do GitHub para obter detalhes adicionais.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Shell Interativo
+
+ Linguagem de Script
+
+ Gerenciamento Remoto
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Microsoft Corporation
+
+
+
+
+ https://github.com/PowerShell/PowerShell
+
+ https://github.com/PowerShell/PowerShell/issues
+
+ https://go.microsoft.com/fwlink/?LinkID=521839
+
diff --git a/.pipelines/store/PDPs/PDP/ru/PDP.xml b/.pipelines/store/PDPs/PDP/ru/PDP.xml
new file mode 100644
index 00000000000..04d34f83138
--- /dev/null
+++ b/.pipelines/store/PDPs/PDP/ru/PDP.xml
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Оболочка
+
+ PowerShell
+
+ Терминал
+
+ Командная строка
+
+ Служба автоматизации
+
+ Автоматизация задач
+
+ Создание скрипта
+
+
+ PowerShell — это оболочка командной строки с поддержкой задач и язык скриптов на основе .NET. PowerShell позволяет системным администраторам и опытным пользователям быстро автоматизировать задачи для управления процессами и операционными системами (Linux, macOS и Windows).
+
+Команды PowerShell позволяют управлять компьютерами из командной строки. При использовании поставщиков PowerShell доступ к хранилищам данных, таким как реестр и хранилище сертификатов, становится таким же простым, как и доступ к файловой системе. PowerShell включает многофункциональное средство синтаксического анализа выражений и полностью разработанный язык скриптов.
+
+PowerShell использует открытый код. См. https://github.com/powershell/powershell
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Дополнительные сведения см. на странице выпусков GitHub.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Интерактивная оболочка
+
+ Язык сценариев
+
+ Удаленное управление
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Корпорация Майкрософт
+
+
+
+
+ https://github.com/PowerShell/PowerShell
+
+ https://github.com/PowerShell/PowerShell/issues
+
+ https://go.microsoft.com/fwlink/?LinkID=521839
+
diff --git a/.pipelines/store/PDPs/PDP/tr/PDP.xml b/.pipelines/store/PDPs/PDP/tr/PDP.xml
new file mode 100644
index 00000000000..57931f282f6
--- /dev/null
+++ b/.pipelines/store/PDPs/PDP/tr/PDP.xml
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Kabuk
+
+ Windows PowerShell
+
+ Terminal
+
+ Komut Satırı
+
+ Otomasyon
+
+ Görev Otomasyonu
+
+ Betik Yazma
+
+
+ Windows PowerShell, .NET üzerine oluşturulmuş görev tabanlı bir komut satırı kabuğu ve betik dilidir. Windows PowerShell, sistem yöneticilerinin ve ileri düzey kullanıcıların işletim sistemlerini (Linux, macOS ve Windows) ve süreçleri yöneten görevleri hızla otomatikleştirmelerine yardımcı olur.
+
+Windows PowerShell komutları, bilgisayarları komut satırından yönetmenizi sağlar. Windows PowerShell sağlayıcıları, kayıt defteri ve sertifika deposu gibi veri depolarına, dosya sistemine eriştiğiniz kadar kolay erişmenizi sağlar. Windows PowerShell, zengin bir ifade ayrıştırıcısı ve tam gelişmiş bir betik dili içerir.
+
+Windows PowerShell Açık Kaynaktır. Daha fazla bilgi için https://github.com/powershell/powershell adresine bakın
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Ek ayrıntılar için lütfen GitHub sürümler sayfamızı inceleyin.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Etkileşimli Kabuk
+
+ Betik Dili
+
+ Uzaktan Yönetim
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Microsoft Corporation
+
+
+
+
+ https://github.com/PowerShell/PowerShell
+
+ https://github.com/PowerShell/PowerShell/issues
+
+ https://go.microsoft.com/fwlink/?LinkID=521839
+
diff --git a/.pipelines/store/PDPs/PDP/zh-Hans/PDP.xml b/.pipelines/store/PDPs/PDP/zh-Hans/PDP.xml
new file mode 100644
index 00000000000..7d2f977b60e
--- /dev/null
+++ b/.pipelines/store/PDPs/PDP/zh-Hans/PDP.xml
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Shell
+
+ PowerShell
+
+ 终端
+
+ 命令行
+
+ 自动化
+
+ 任务自动化
+
+ 脚本
+
+
+ PowerShell 是基于 .NET 构建的基于任务的命令行 shell 和脚本语言。 PowerShell 可帮助系统管理员和高级用户快速自动执行用于管理操作系统(Linux、macOS 和 Windows)和进程的任务。
+
+使用 PowerShell 命令,可以通过命令行管理计算机。 借助 PowerShell 提供程序,可以访问像访问文件系统一样方便地访问数据存储(如注册表和证书存储)。 PowerShell 具有丰富的表达式分析器和充分开发的脚本语言。
+
+PowerShell 是开放源代码。 请参阅 https://github.com/powershell/powershell
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 有关其他详细信息,请参阅我们的 GitHub 发布页面。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 交互式 Shell
+
+ 脚本语言
+
+ 远程管理
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Microsoft Corporation
+
+
+
+
+ https://github.com/PowerShell/PowerShell
+
+ https://github.com/PowerShell/PowerShell/issues
+
+ https://go.microsoft.com/fwlink/?LinkID=521839
+
diff --git a/.pipelines/store/PDPs/PDP/zh-Hant/PDP.xml b/.pipelines/store/PDPs/PDP/zh-Hant/PDP.xml
new file mode 100644
index 00000000000..569bfe8a4f2
--- /dev/null
+++ b/.pipelines/store/PDPs/PDP/zh-Hant/PDP.xml
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Shell
+
+ PowerShell
+
+ 終端機
+
+ 命令列
+
+ 自動化
+
+ 工作自動化
+
+ 指令碼處理
+
+
+ PowerShell 是工作型命令列殼層與指令碼語言,並建置在 .NET 之上。 PowerShell 可協助系統管理員與進階使用者快速地將管理作業系統 (Linux、macOS 與 Windows) 與處理序的工作自動化。
+
+PowerShell 命令可讓您從命令列管理電腦。 PowerShell 提供者可讓您如同存取檔案系統般輕易地存取資料存放區 (例如登錄與憑證存放區)。 PowerShell 包含豐富的運算式剖析器與完整開發的指令碼語言。
+
+PowerShell 是開放原始碼。 請參閱 https://github.com/powershell/powershell
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 如需其他詳細資料,請參閱我們的 GitHub 發行頁面。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 互動式殼層
+
+ 指令碼語言
+
+ 遠端管理
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Microsoft Corporation
+
+
+
+
+ https://github.com/PowerShell/PowerShell
+
+ https://github.com/PowerShell/PowerShell/issues
+
+ https://go.microsoft.com/fwlink/?LinkID=521839
+
diff --git a/.pipelines/store/SBConfig.json b/.pipelines/store/SBConfig.json
index a52d60b045f..e6c8d543772 100644
--- a/.pipelines/store/SBConfig.json
+++ b/.pipelines/store/SBConfig.json
@@ -14,8 +14,6 @@
"qps-ploca",
"qps-plocm"
],
- "MediaRootPath": "",
- "MediaFallbackLanguage": "en-US",
"PackagePath": [],
"OutPath": "",
"OutName": "",
diff --git a/.pipelines/templates/package-store-package.yml b/.pipelines/templates/package-store-package.yml
index 4759456bc65..978629cef78 100644
--- a/.pipelines/templates/package-store-package.yml
+++ b/.pipelines/templates/package-store-package.yml
@@ -57,19 +57,16 @@ jobs:
# 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"
@@ -100,36 +97,8 @@ jobs:
$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/PDPs/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) {
@@ -190,7 +159,7 @@ jobs:
Write-Verbose -Verbose "Variables set successfully"
name: UpdateConfigs
- displayName: Update PDPs and SBConfig.json
+ displayName: Update SBConfig.json and Store Variables
- pwsh: |
Write-Verbose -Verbose "Checking variables after UpdateConfigs:"
@@ -209,7 +178,8 @@ jobs:
contents: '*.msixBundle'
outSBName: 'PowerShellStorePackage'
pdpPath: '$(System.DefaultWorkingDirectory)/PowerShell/.pipelines/store/PDPs/PDP'
- pdpMediaPath: '$(System.DefaultWorkingDirectory)/PowerShell/.pipelines/store/PDPs/PDP-Media'
+ # StoreBroker v3 requires a media root with a PDP root, even when the PDP has no media.
+ pdpMediaPath: '$(System.DefaultWorkingDirectory)/PowerShell/.pipelines/store/PDPs/PDP'
- task: MS-RDX-MRO.windows-store-publish.package-task.store-package@3
displayName: 'Create StoreBroker Package (Stable/LTS)'
@@ -221,7 +191,8 @@ jobs:
contents: '*.msixBundle'
outSBName: 'PowerShellStorePackage'
pdpPath: '$(System.DefaultWorkingDirectory)/PowerShell/.pipelines/store/PDPs/PDP'
- pdpMediaPath: '$(System.DefaultWorkingDirectory)/PowerShell/.pipelines/store/PDPs/PDP-Media'
+ # StoreBroker v3 requires a media root with a PDP root, even when the PDP has no media.
+ pdpMediaPath: '$(System.DefaultWorkingDirectory)/PowerShell/.pipelines/store/PDPs/PDP'
- pwsh: |
$outputDirectory = "$(ob_outputDirectory)"
diff --git a/.pipelines/templates/release-MSIX-Publish.yml b/.pipelines/templates/release-MSIX-Publish.yml
index a68755725ce..14ad3d7bec2 100644
--- a/.pipelines/templates/release-MSIX-Publish.yml
+++ b/.pipelines/templates/release-MSIX-Publish.yml
@@ -52,23 +52,42 @@ jobs:
}
$endURL = $tagString -replace '^v','' -replace '\.',''
- $message = "Changelog: https://github.com/PowerShell/PowerShell/blob/master/CHANGELOG/$middleURL.md#$endURL"
+ $changelogLink = "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
+ $releaseNoteVariables = @{
+ '___VERSION___' = $tagString
+ '___CHANGELOGLINK___' = $changelogLink
+ }
+
+ $listingProperties = @($json.listings.PSObject.Properties)
+ if ($listingProperties.Count -eq 0) {
+ throw "Store listings are missing from '$jsonPath'."
+ }
- # 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"
+ foreach ($listingProperty in $listingProperties) {
+ $language = $listingProperty.Name
+ $releaseNotes = $listingProperty.Value.baseListing.releaseNotes
+ if ([string]::IsNullOrWhiteSpace($releaseNotes)) {
+ throw "Store release notes for '$language' are missing from '$jsonPath'."
+ }
+
+ foreach ($placeholder in $releaseNoteVariables.Keys) {
+ if (-not $releaseNotes.Contains($placeholder)) {
+ throw "Store release notes for '$language' do not contain the required placeholder '$placeholder'."
+ }
+ $releaseNotes = $releaseNotes.Replace($placeholder, $releaseNoteVariables[$placeholder])
+ }
+
+ $listingProperty.Value.baseListing.releaseNotes = $releaseNotes
+ Write-Verbose -Verbose "Release notes for '$language':"
+ Write-Verbose -Verbose $releaseNotes
+ }
$json | ConvertTo-Json -Depth 100 | Set-Content $jsonPath -Encoding UTF8
- displayName: 'Add Changelog Link and Version Number to SBJSON'
+ displayName: 'Set Store Release Note Variables'
- task: PowerShell@2
condition: or(eq(variables['LTS'], 'true'), eq(variables['STABLE'], 'true'), eq(variables['PREVIEW'], 'true'))
diff --git a/assets/AppxManifest.xml b/assets/AppxManifest.xml
index e5b26a892c4..9faaec64995 100644
--- a/assets/AppxManifest.xml
+++ b/assets/AppxManifest.xml
@@ -25,6 +25,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/System.Management.Automation/namespaces/FileSystemProvider.cs b/src/System.Management.Automation/namespaces/FileSystemProvider.cs
index e453899e885..893cade7a6f 100644
--- a/src/System.Management.Automation/namespaces/FileSystemProvider.cs
+++ b/src/System.Management.Automation/namespaces/FileSystemProvider.cs
@@ -4106,6 +4106,14 @@ private void CopyDirectoryFromRemoteSession(
if (IsItemContainer(destination))
{
+ if (CanRemoteNameCausePathTraversal(sourceDirectoryName))
+ {
+ throw PSTraceSource.NewArgumentException(
+ nameof(sourceDirectoryName),
+ FileSystemProviderStrings.DirectoryNamePathTraversal,
+ sourceDirectoryName);
+ }
+
destination = MakePath(destination, sourceDirectoryName);
}
@@ -4341,6 +4349,14 @@ private void CopyFileFromRemoteSession(
// to the destination path.
if (IsItemContainer(destinationPath))
{
+ if (CanRemoteNameCausePathTraversal(sourceFileName))
+ {
+ throw PSTraceSource.NewArgumentException(
+ nameof(sourceFileName),
+ FileSystemProviderStrings.FileNamePathTraversal,
+ sourceFileName);
+ }
+
destinationPath = MakePath(destinationPath, sourceFileName);
}
@@ -4368,6 +4384,11 @@ private void CopyFileFromRemoteSession(
{
foreach (string streamName in remoteFileStreams)
{
+ if (CanRemoteNameCausePathTraversal(streamName))
+ {
+ throw PSTraceSource.NewArgumentException(nameof(streamName), FileSystemProviderStrings.ADSPathTraversal, streamName);
+ }
+
result = PerformCopyFileFromRemoteSession(sourceFileFullName, destinationFile, destinationPath, force, ps, fileSize, true, streamName);
if (!result)
{
@@ -4963,6 +4984,30 @@ private bool PathIsReservedDeviceName(string destinationPath, string errorId)
return pathIsReservedDeviceName;
}
+ ///
+ /// Check if a file/directory name or an alternate stream name is a plain name that does not contain any characters that could allow path traversal.
+ ///
+ private static bool CanRemoteNameCausePathTraversal(string name)
+ {
+ if (string.IsNullOrEmpty(name))
+ {
+ // 'MakePath' handles null or empty value, so we just let it flow through.
+ return false;
+ }
+
+ // Detect characters and name patterns that could enable path traversal.
+ return name.IndexOfAny(s_pathTraversalChars) >= 0 || name is "." or "..";
+ }
+
+ // Characters that must never appear in a remote-supplied file system item name or an alternate stream name
+ // because we expect a plain name, not a path, and we don't want to allow any path traversal.
+ private static readonly char[] s_pathTraversalChars =
+#if UNIX
+ ['\\', '/'];
+#else
+ ['\\', '/', ':'];
+#endif
+
private long _totalFiles;
private long _totalBytes;
private long _copiedFiles;
diff --git a/src/System.Management.Automation/resources/FileSystemProviderStrings.resx b/src/System.Management.Automation/resources/FileSystemProviderStrings.resx
index 85a893f342d..ed363f74ae3 100644
--- a/src/System.Management.Automation/resources/FileSystemProviderStrings.resx
+++ b/src/System.Management.Automation/resources/FileSystemProviderStrings.resx
@@ -240,6 +240,15 @@
Cannot process path '{0}' because the target represents a reserved device name.
+
+ Cannot process the remote directory name '{0}' because it may result in path traversal.
+
+
+ Cannot process the remote file name '{0}' because it may result in path traversal.
+
+
+ Cannot process the remote Alternate Data Stream name '{0}' because it may result in path traversal.
+
Encoding not used when '-AsByteStream' specified.
diff --git a/src/System.Management.Automation/resources/cs/HelpErrors.cs.resx b/src/System.Management.Automation/resources/cs/HelpErrors.cs.resx
index 8f188fc312c..744bc16cefb 100644
--- a/src/System.Management.Automation/resources/cs/HelpErrors.cs.resx
+++ b/src/System.Management.Automation/resources/cs/HelpErrors.cs.resx
@@ -191,6 +191,6 @@ Pokud chcete tato témata nápovědy aktualizovat, spusťte PowerShell pomocí p
V omezené relaci nejde získat nápovědu ze síťového umístění.
- Command not allowed in a restricted session.
+ Příkaz není v omezené relaci povolen.
\ 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
index 27eeb5c60e5..59f243a9edb 100644
--- a/src/System.Management.Automation/resources/de/HelpErrors.de.resx
+++ b/src/System.Management.Automation/resources/de/HelpErrors.de.resx
@@ -191,6 +191,6 @@ Um diese Hilfethemen zu aktualisieren, starten Sie PowerShell mit dem Befehl „
In einer eingeschränkten Sitzung kann keine Hilfe von einem Netzwerkstandort abgerufen werden.
- Command not allowed in a restricted session.
+ Der Befehl ist in einer eingeschränkten Sitzung nicht zulässig.
\ 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
index 09a4027ccdb..975afdfb9f0 100644
--- a/src/System.Management.Automation/resources/es/HelpErrors.es.resx
+++ b/src/System.Management.Automation/resources/es/HelpErrors.es.resx
@@ -191,6 +191,6 @@ Para actualizar estos temas de Ayuda, inicie PowerShell con el comando "Ejecutar
No se puede obtener Ayuda de una ubicación de red cuando se está en una sesión restringida.
- Command not allowed in a restricted session.
+ Comando no permitido en una sesión restringida.
\ 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
index 3b087f7f622..2e3762f9169 100644
--- a/src/System.Management.Automation/resources/fr/HelpErrors.fr.resx
+++ b/src/System.Management.Automation/resources/fr/HelpErrors.fr.resx
@@ -191,6 +191,6 @@ Pour mettre à jour ces rubriques d’Aide, démarrez PowerShell à l’aide de
Nous ne pouvons pas obtenir de l’Aide à partir d’un emplacement réseau dans une session restreinte.
- Command not allowed in a restricted session.
+ Commande non autorisée dans une session restreinte.
\ 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
index b187d269a12..b6b48f5422e 100644
--- a/src/System.Management.Automation/resources/it/HelpErrors.it.resx
+++ b/src/System.Management.Automation/resources/it/HelpErrors.it.resx
@@ -191,6 +191,6 @@ Per aggiornare questi argomenti della Guida, avviare PowerShell usando il comand
Non è possibile ottenere la Guida da una posizione di rete in una sessione con restrizioni.
- Command not allowed in a restricted session.
+ Comando non consentito in una sessione con restrizioni.
\ 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
index 64a499eb893..6048f8416da 100644
--- a/src/System.Management.Automation/resources/ja/HelpErrors.ja.resx
+++ b/src/System.Management.Automation/resources/ja/HelpErrors.ja.resx
@@ -191,6 +191,6 @@
制限されたセッションでは、ネットワークの場所からヘルプを取得できません。
- Command not allowed in a restricted session.
+ 制限されたセッションではコマンドを使用できません。
\ 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
index 121106d7cd8..c0c030a4bb2 100644
--- a/src/System.Management.Automation/resources/ko/HelpErrors.ko.resx
+++ b/src/System.Management.Automation/resources/ko/HelpErrors.ko.resx
@@ -191,6 +191,6 @@
제한된 세션에 있을 때 네트워크 위치에서 도움을 받을 수 없습니다.
- Command not allowed in a restricted session.
+ 제한된 세션에서는 명령을 사용할 수 없습니다.
\ 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
index 305bc1c4156..24dedb0343b 100644
--- a/src/System.Management.Automation/resources/pl/HelpErrors.pl.resx
+++ b/src/System.Management.Automation/resources/pl/HelpErrors.pl.resx
@@ -191,6 +191,6 @@ Aby zaktualizować te tematy Pomocy, uruchom program PowerShell za pomocą polec
Nie można uzyskać pomocy z lokalizacji sieciowej w sesji z ograniczeniami.
- Command not allowed in a restricted session.
+ Polecenie jest niedozwolone w sesji z ograniczeniami.
\ 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
index 7cf43c8f8b3..b88be3d768d 100644
--- a/src/System.Management.Automation/resources/pt-BR/HelpErrors.pt-BR.resx
+++ b/src/System.Management.Automation/resources/pt-BR/HelpErrors.pt-BR.resx
@@ -191,6 +191,6 @@ Para atualizar esses tópicos da Ajuda, inicie o PowerShell usando o comando "Ex
Não é possível obter ajuda de um local de rede em uma sessão restrita.
- Command not allowed in a restricted session.
+ Comando não permitido em uma sessão restrita.
\ 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
index 9bce4731f0c..c3f304e0a12 100644
--- a/src/System.Management.Automation/resources/ru/HelpErrors.ru.resx
+++ b/src/System.Management.Automation/resources/ru/HelpErrors.ru.resx
@@ -191,6 +191,6 @@
Невозможно получить помощь из сетевого расположения в режиме ограниченного доступа.
- Command not allowed in a restricted session.
+ Команда не разрешена в ограниченном сеансе.
\ 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
index 4e2a8ac5653..4e103ca58a1 100644
--- a/src/System.Management.Automation/resources/tr/HelpErrors.tr.resx
+++ b/src/System.Management.Automation/resources/tr/HelpErrors.tr.resx
@@ -191,6 +191,6 @@ Bu Yardım konularını güncelleştirmek için, PowerShell'i "Yönetici olarak
Kısıtlanmış bir oturumdayken ağ konumundan yardım alınamaz.
- Command not allowed in a restricted session.
+ Kısıtlı bir oturumda komuta izin verilmez.
\ 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
index 047a3f6104c..0f69cd89097 100644
--- a/src/System.Management.Automation/resources/zh-Hans/HelpErrors.zh-Hans.resx
+++ b/src/System.Management.Automation/resources/zh-Hans/HelpErrors.zh-Hans.resx
@@ -191,6 +191,6 @@
在受限会话中,无法从网络位置获取帮助。
- Command not allowed in a restricted session.
+ 受限会话中不允许使用命令。
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hant/HelpErrors.zh-Hant.resx b/src/System.Management.Automation/resources/zh-Hant/HelpErrors.zh-Hant.resx
index bf015766c45..e88acf06eb7 100644
--- a/src/System.Management.Automation/resources/zh-Hant/HelpErrors.zh-Hant.resx
+++ b/src/System.Management.Automation/resources/zh-Hant/HelpErrors.zh-Hant.resx
@@ -191,6 +191,6 @@
在受限制的工作階段中,無法從網路位置取得說明。
- Command not allowed in a restricted session.
+ 受限工作階段中不允許命令。
\ No newline at end of file
diff --git a/test/powershell/Modules/Microsoft.PowerShell.Management/Copy-Item.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Management/Copy-Item.Tests.ps1
index 870622445eb..a55770b2512 100644
--- a/test/powershell/Modules/Microsoft.PowerShell.Management/Copy-Item.Tests.ps1
+++ b/test/powershell/Modules/Microsoft.PowerShell.Management/Copy-Item.Tests.ps1
@@ -2,6 +2,17 @@
# Licensed under the MIT License.
Describe "Validate Copy-Item locally" -Tags "CI" {
+ BeforeAll {
+ $canRemoteNameCausePathTraversalMethod = [Microsoft.PowerShell.Commands.FileSystemProvider].GetMethod(
+ 'CanRemoteNameCausePathTraversal',
+ [System.Reflection.BindingFlags]::NonPublic -bor [System.Reflection.BindingFlags]::Static)
+
+ function CanRemoteNameCausePathTraversal {
+ param ([string]$name)
+ return $canRemoteNameCausePathTraversalMethod.Invoke($null, @($name))
+ }
+ }
+
It "Copy-Item has non-terminating error if destination is in use" -Skip:(!$IsWindows) {
Copy-Item -Path $env:windir\system32\cmd.exe -Destination TestDrive:\
$cmd = Start-Process -FilePath TestDrive:\cmd.exe -PassThru
@@ -12,6 +23,34 @@ Describe "Validate Copy-Item locally" -Tags "CI" {
$cmd | Stop-Process
}
}
+
+ It "Validate remote name for path traversal" -TestCases @(
+ @{ Name = "evil.txt"; CanTraverse = $false }
+ @{ Name = "my.file.name"; CanTraverse = $false }
+ @{ Name = "Zone.Identifier"; CanTraverse = $false }
+ @{ Name = "has space.txt"; CanTraverse = $false }
+ @{ Name = "COM10"; CanTraverse = $false }
+
+ @{ Name = ".."; CanTraverse = $true }
+ @{ Name = "."; CanTraverse = $true }
+ @{ Name = "..\..\evil.txt"; CanTraverse = $true }
+ @{ Name = "a\b"; CanTraverse = $true }
+ @{ Name = "a/b"; CanTraverse = $true }
+ @{ Name = "\evil"; CanTraverse = $true }
+ @{ Name = "C:\evil"; CanTraverse = $true }
+ @{ Name = "..\"; CanTraverse = $true }
+
+ ## The char ':' is not allowed on Windows, but allowed on Unix platforms.
+ @{ Name = "x:evil"; CanTraverse = $isWindows }
+ @{ Name = ":bad"; CanTraverse = $isWindows }
+ ) {
+ param(
+ [string]$Name,
+ [bool]$CanTraverse
+ )
+
+ CanRemoteNameCausePathTraversal $Name | Should -Be $CanTraverse
+ }
}
# This is a Pester test suite to validate Copy-Item remotely using a remote session.