Windows PowerShell and PowerShell 7 compatibility
Microsoft's edit ·
Microsoft's commit message in MicrosoftDocs/PowerShell-Docs · commit 2fab8f6 · +29 −28 lines · also on GitHub
11
---
22
ms.date: 02/03/2020
3
−title: Differences between Windows PowerShell 5.1 and PowerShell (core) 7.x
3
+title: Differences between Windows PowerShell 5.1 and PowerShell 7.x
44
description: This article summarizes the differences and breaking changes from Windows PowerShell 5.1 and the current version of PowerShell that is based on .NET Core.
55
---
6
−# Differences between Windows PowerShell 5.1 and PowerShell (core) 7.x
6
+# Differences between Windows PowerShell 5.1 and PowerShell 7.x
77
88
Windows PowerShell 5.1 is built on top of the .NET Framework v4.5. With the release of PowerShell
99
6.0, PowerShell became an open source project built on .NET Core 2.0. PowerShell 7.0 is built on
⋯ 1 unchanged line
1111
from the .NET Framework to .NET Core allowed PowerShell to become a cross-platform solution.
1212
PowerShell runs on Windows, macOS, and Linux.
1313
14
−There is little difference in the PowerShell language between Windows PowerShell and PowerShell
15
−(core). The differences are seen in the availability and behavior of PowerShell cmdlets between
16
−Windows and non-Windows platforms and the changes that stem from the differences between the .NET
17
−Framework and .NET Core.
14
+There are few differences in the PowerShell language between Windows PowerShell and PowerShell. The
15
+differences are most notable in the availability and behavior of PowerShell cmdlets between Windows
16
+and non-Windows platforms and the changes that stem from the differences between the .NET Framework
17
+and .NET Core.
1818
1919
This article summarizes the significant differences and breaking changes between Windows PowerShell
2020
and the current version of PowerShell. This summary does not include new features or cmdlets that
⋯ 2 unchanged lines
2323
PowerShell. For a detailed discussion of changes between versions and the addition of new features,
2424
see the **What's New** articles for each version.
2525
26
+- [What's new in PowerShell 7.x](What-s-New-in-PowerShell-71.md)
27
+- [What's new in PowerShell 6.x](/previous-versions/powershell/scripting/whats-new/what-s-new-in-powershell-core-62?view=powershell-6&preserve_view=true)
28
+
2629
## .NET Framework vs .NET Core
2730
2831
PowerShell on Linux and macOS uses .NET Core, which is a subset of the full .NET Framework on
⋯ 16 unchanged lines
4548
4649
[!INCLUDE [Product terminology](../../includes/product-terms.md)]
4750
48
−## Modules not shipped for PowerShell (core)
51
+## Modules no longer shipped with PowerShell
4952
5053
For various compatibility reasons, the following modules are no longer included in PowerShell.
5154
⋯ 11 unchanged lines
6366
[Windows Workflow Foundation (WF)][workflow-foundation] that enables the creation of robust runbooks
6467
for long-running or parallelized tasks.
6568
66
−Due to the lack of support for Windows Workflow Foundation in .NET Core, we are not supporting
67
−PowerShell Workflow in PowerShell (core).
69
+Due to the lack of support for Windows Workflow Foundation in .NET Core, we removed PowerShell
70
+Workflow from PowerShell.
6871
6972
In the future, we would like to enable native parallelism/concurrency in the PowerShell language
7073
without the need for PowerShell Workflow.
⋯ 7 unchanged lines
7881
7982
## Cmdlets removed from PowerShell
8083
81
−For the modules that are included in PowerShell (core), the following cmdlets were removed from
82
−PowerShell for various compatibility reasons or the use of unsupported APIs.
84
+For the modules that are included in PowerShell, the following cmdlets were removed from PowerShell
85
+for various compatibility reasons or the use of unsupported APIs.
8386
8487
CimCmdlets
8588
⋯ 68 unchanged lines
154157
155158
### WMI v1 cmdlets
156159
157
−The following WMI v1 cmdlets were removed from PowerShell (core):
160
+The following WMI v1 cmdlets were removed from PowerShell:
158161
159162
- `Register-WmiEvent`
160163
- `Set-WmiInstance`
⋯ 21 unchanged lines
182185
183186
### `*-EventLog` cmdlets
184187
185
−Due to the use of unsupported APIs, the `*-EventLog` has been removed from PowerShell (core). until
186
−a better solution is found. `Get-WinEvent` and `New-WinEvent` are available to get and create events
187
−on Windows.
188
+Due to the use of unsupported APIs, the `*-EventLog` cmdlets have been removed from PowerShell.
189
+`Get-WinEvent` and `New-WinEvent` are available to get and create events on Windows.
188190
189191
### Cmdlets that use the Windows Presentation Framework (WPF)
190192
⋯ 17 unchanged lines
208210
209211
### Renamed `powershell.exe` to `pwsh.exe`
210212
211
−The binary name for PowerShell (core) has been changed from `powershell(.exe)` to `pwsh(.exe)`. This
212
−change provides a deterministic way for users to run PowerShell (core) on machines to support
213
−side-by-side Windows PowerShell and PowerShell (core) installations. `pwsh` is also much shorter and
214
−easier to type.
213
+The binary name for PowerShell has been changed from `powershell(.exe)` to `pwsh(.exe)`. This
214
+change provides a deterministic way for users to run PowerShell on machines and support
215
+side-by-side installations of Windows PowerShell and PowerShell.
215216
216217
Additional changes to `pwsh(.exe)` from `powershell.exe`:
217218
⋯ 2 unchanged lines
220221
on non-Windows platforms. It also means that you can run commands like `pwsh foo.ps1` or
221222
`pwsh fooScript` without specifying `-File`. However, this change requires that you explicitly
222223
specify `-c` or `-Command` when trying to run commands like `pwsh.exe -Command Get-Command`.
223
−- PowerShell (core) accepts the `-i` (or `-Interactive`) switch to indicate an interactive shell.
224
+- `pwsh` accepts the `-i` (or `-Interactive`) switch to indicate an interactive shell.
224225
This allows PowerShell to be used as a default shell on Unix platforms.
225226
- Removed parameters `-ImportSystemModules` and `-PSConsoleFile` from `pwsh.exe`.
226227
- Changed `pwsh -version` and built-in help for `pwsh.exe` to align with other native tools.
⋯ 23 unchanged lines
250251
adoption in the PowerShell community.
251252
252253
Due to the complexity of supporting snap-ins and their lack of usage in the community, we no longer
253
−support custom snap-ins in PowerShell (core).
254
+support custom snap-ins in PowerShell.
254255
255256
[snapin]: /powershell/module/microsoft.powershell.core/about/about_pssnapins
256257
⋯ 191 unchanged lines
448449
### Check `system32` for compatible built-in modules on Windows
449450
450451
In the Windows 10 1809 update and Windows Server 2019, we updated a number of built-in PowerShell
451
−modules to mark them as compatible with PowerShell (core).
452
+modules to mark them as compatible with PowerShell.
452453
453454
When PowerShell starts up, it automatically includes `$windir\System32` as part of the
454455
`PSModulePath` environment variable. However, it only exposes modules to `Get-Module` and
⋯ 306 unchanged lines
761762
HTTPS. PSRP on macOS only supports Basic Auth over HTTPS. Kerberos-based authentication is not
762763
supported for non-Windows platforms.
763764
764
−PowerShell (core) also supports PowerShell Remoting (PSRP) over SSH on all platforms (Windows, macOS,
765
−and Linux). For more information, see
765
+PowerShell also supports PowerShell Remoting (PSRP) over SSH on all platforms (Windows, macOS, and
766
+Linux). For more information, see
766767
[SSH remoting in PowerShell](/powershell/scripting/learn/remoting/SSH-Remoting-in-PowerShell-Core).
767768
768
−### PowerShell Direct for Containers tries to use PowerShell (core) first
769
+### PowerShell Direct for Containers tries to use `pwsh` first
769770
770771
[PowerShell Direct](/virtualization/hyper-v-on-windows/user-guide/powershell-direct) is a feature of
771772
PowerShell and Hyper-V that allows you to connect to a Hyper-V VM or Container without network
⋯ 72 unchanged lines
844845
845846
## Telemetry can only be disabled with an environment variable
846847
847
−PowerShell (core) sends basic telemetry data to Microsoft when it is launched. The data includes the
848
−OS name, OS version, and PowerShell version. This data allows us to better understand the
849
−environments where PowerShell is used and enables us to prioritize new features and fixes.
848
+PowerShell sends basic telemetry data to Microsoft when it is launched. The data includes the OS
849
+name, OS version, and PowerShell version. This data allows us to better understand the environments
850
+where PowerShell is used and enables us to prioritize new features and fixes.
850851
851852
To opt-out of this telemetry, set the environment variable `POWERSHELL_TELEMETRY_OPTOUT` to `true`,
852853
`yes`, or `1`. We no longer support deletion of the file
⋯ 1 unchanged line
Microsoft's Markdown source from MicrosoftDocs/PowerShell-Docs, © Microsoft Corporation, under CC BY 4.0. Changed lines with up to 3 unchanged lines around each; ChangeIntel kept this copy 10 Oct 18:27 UTC. The commit date is when the source changed, which can be hours or days before Learn published it.