Windows PowerShell and PowerShell 7 compatibility
Microsoft's edit ·
Microsoft's commit message in MicrosoftDocs/PowerShell-Docs · commit 2ba2e7e · +352 −43 lines · also on GitHub
11
---
2
−ms.date: 09/17/2021
2
+ms.date: 05/16/2022
33
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
---
66
# 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
9
−6.0, PowerShell became an open source project built on .NET Core 2.0. PowerShell 7.0 is built on
10
−.NET Core 3.1. And, with the release of PowerShell 7.2, PowerShell will be built on .NET 6.0. Moving
11
−from the .NET Framework to .NET Core allowed PowerShell to become a cross-platform solution.
12
−PowerShell runs on Windows, macOS, and Linux.
9
+6.0, PowerShell became an open source project built on .NET Core 2.0. Moving from the .NET Framework
10
+to .NET Core allowed PowerShell to become a cross-platform solution. PowerShell runs on Windows,
11
+macOS, and Linux.
1312
1413
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
14
+most notable differences are in the availability and behavior of PowerShell cmdlets between Windows
1615
and non-Windows platforms and the changes that stem from the differences between the .NET Framework
1716
and .NET Core.
1817
⋯ 4 unchanged lines
2322
PowerShell. For a detailed discussion of changes between versions and the addition of new features,
2423
see the **What's New** articles for each version.
2524
26
−- [What's new in PowerShell 7.3](What-s-New-in-PowerShell-73.md)
27
−- [What's new in PowerShell 7.2](What-s-New-in-PowerShell-72.md)
28
−- [What's new in PowerShell 7.1](What-s-New-in-PowerShell-71.md)
29
−- [What's new in PowerShell 7.0](What-s-New-in-PowerShell-70.md)
30
−- [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)
25
+- [What's new in PowerShell 7.3][WhatsNew73]
26
+- [What's new in PowerShell 7.2][WhatsNew72]
27
+- [What's new in PowerShell 7.1][WhatsNew71]
28
+- [What's new in PowerShell 7.0][WhatsNew70]
29
+- [What's new in PowerShell 6.x][WhatsNew6x]
3130
3231
## .NET Framework vs .NET Core
3332
34
−PowerShell on Linux and macOS uses .NET Core, which is a subset of the full .NET Framework on
33
+PowerShell on Linux and macOS uses .NET core, which is a subset of the full .NET Framework on
3534
Microsoft Windows. This is significant because PowerShell provides direct access to the underlying
3635
framework types and methods. As a result, scripts that run on Windows may not run on non-Windows
3736
platforms because of the differences in the frameworks. For more information about changes in .NET
3837
Core, see
39
−[Breaking changes for migration from .NET Framework to .NET Core](/dotnet/core/compatibility/fx-core).
38
+[Breaking changes for migration from .NET Framework to .NET Core][fxcore].
4039
4140
Each new release of PowerShell is built on a newer version of .NET. There can be breaking changes in
4241
.NET that affect PowerShell.
⋯ 6 unchanged lines
4948
- PowerShell 6.1 - Built on .NET Core 2.1
5049
- PowerShell 6.0 - Built on .NET Core 2.0
5150
52
−With the advent of
53
−[.NET Standard 2.0](https://devblogs.microsoft.com/dotnet/introducing-net-standard/), PowerShell can
54
−load many traditional Windows PowerShell modules without modification. Additionally, PowerShell 7
55
−includes a Windows PowerShell Compatibility feature that allows you to use Windows PowerShell
56
−modules that still require the full framework.
51
+With the advent of [.NET Standard 2.0][NETStd2], PowerShell can load many traditional Windows
52
+PowerShell modules without modification. Additionally, PowerShell 7 includes a Windows PowerShell
53
+Compatibility feature that allows you to use Windows PowerShell modules that still require the full
54
+framework.
5755
5856
For more information see:
5957
60
−- [about_Windows_PowerShell_Compatibility](/powershell/module/microsoft.powershell.core/about/about_windows_powershell_compatibility)
61
−- [PowerShell 7 module compatibility](module-compatibility.md)
58
+- [about_Windows_PowerShell_Compatibility][about-WinCompat]
59
+- [PowerShell 7 module compatibility][mod-compat]
6260
6361
[!INCLUDE [Product terminology](../../includes/product-terms.md)]
6462
⋯ 25 unchanged lines
9088
using Task Scheduler to run a script on OS startup, but the script would need to maintain
9189
its own state (like persisting it to a file).
9290
93
−[workflow]: /previous-versions/powershell/scripting/components/workflows-guide
94
−[workflow-foundation]: /dotnet/framework/windows-workflow-foundation/
95
−
9691
## Cmdlets removed from PowerShell
9792
9893
For the modules that are included in PowerShell, the following cmdlets were removed from PowerShell
⋯ 118 unchanged lines
217212
218213
Beginning with PowerShell 7.2, the PSDesiredStateConfiguration module has been removed from
219214
PowerShell and has been published to the PowerShell Gallery. For more information, see the
220
−[announcement](https://devblogs.microsoft.com/powershell/announcing-psdesiredstateconfiguration-on-powershell-gallery/)
221
−in the PowerShell Team blog.
215
+[announcement][PSDSC-announce] in the PowerShell Team blog.
222216
223
−## Engine/language changes
217
+## PowerShell executable changes
224218
225219
### Renamed `powershell.exe` to `pwsh.exe`
226220
⋯ 25 unchanged lines
252246
`$true`/`$false` as parameter values. Support for `$true`/`$false` as parsed values to parameters
253247
was added. Switch values are also supported.
254248
249
+## Improved backwards compatibility with Windows PowerShell
250
+
251
+For Windows, a new switch parameter **UseWindowsPowerShell** is added to `Import-Module`. This
252
+switch creates a proxy module in PowerShell 7 that uses a local Windows PowerShell process to
253
+implicitly run any cmdlets contained in that module. For more information, see
254
+[Import-Module][Import-Module].
255
+
256
+For more information on which Microsoft modules work with PowerShell 7.0, see the
257
+[Module Compatibility Table][mod-compat].
258
+
259
+### Microsoft Update support for Windows
260
+
261
+PowerShell 7.2 added support for Microsoft Update. When you enable this feature, you'll get the latest
262
+PowerShell 7 updates in your traditional Windows Update (WU) management flow, whether that's with
263
+Windows Update for Business, WSUS, SCCM, or the interactive WU dialog in Settings.
264
+
265
+The PowerShell 7.2 MSI package includes following command-line options:
266
+
267
+- `USE_MU` - This property has two possible values:
268
+ - `1` (default) - Opts into updating through Microsoft Update or WSUS
269
+ - `0` - Do not opt into updating through Microsoft Update or WSUS
270
+- `ENABLE_MU`
271
+ - `1` (default) - Opts into using Microsoft Update the Automatic Updates or Windows Update
272
+ - `0` - Do not opt into using Microsoft Update the Automatic Updates or Windows Update
273
+
274
+## Engine changes
275
+
255276
### Support PowerShell as a default Unix shell
256277
257278
On Unix, it is a convention for shells to accept `-i` for an interactive shell and many tools
⋯ 9 unchanged lines
267288
Due to the complexity of supporting snap-ins and their lack of usage in the community, we no longer
268289
support custom snap-ins in PowerShell.
269290
270
−[snapin]: /powershell/module/microsoft.powershell.core/about/about_pssnapins
271
−
272291
### Experimental feature flags
273292
274
−We enabled support for [Experimental Features][exp]. This allows PowerShell developers to deliver
275
−new features and get feedback before the design is complete. This way we avoid making breaking
276
−changes as the design evolves.
293
+PowerShell 6.2 enabled support for [Experimental Features][exp]. This allows PowerShell developers
294
+to deliver new features and get feedback before the design is complete. This way we avoid making
295
+breaking changes as the design evolves.
277296
278297
Use `Get-ExperimentalFeature` to get a list of available experimental features. You can enable or
279298
disable these features with `Enable-ExperimentalFeature` and `Disable-ExperimentalFeature`.
280299
281
−[exp]: /powershell/module/Microsoft.PowerShell.Core/About/about_Experimental_Features
282
−
283300
### Load assembly from module base path before trying to load from the GAC
284301
285302
Previously, when a binary module has the module assembly in GAC, we loaded the assembly from GAC
⋯ 96 unchanged lines
382399
Name: Hello; Path: MyPath; Args: -Blah: World
383400
```
384401
402
+## Language changes
403
+
404
+### Null-coalescing operator `??`
405
+
406
+The null-coalescing operator `??` returns the value of its left-hand operand if
407
+it isn't null. Otherwise, it evaluates the right-hand operand and returns its
408
+result. The `??` operator doesn't evaluate its right-hand operand if the
409
+left-hand operand evaluates to non-null.
410
+
411
+```powershell
412
+$x = $null
413
+$x ?? 100
414
+```
415
+
416
+```Output
417
+100
418
+```
419
+
420
+In the following example, the right-hand operand won't be evaluated.
421
+
422
+```powershell
423
+[string] $todaysDate = '1/10/2020'
424
+$todaysDate ?? (Get-Date).ToShortDateString()
425
+```
426
+
427
+```Output
428
+1/10/2020
429
+```
430
+
431
+### Null-coalescing assignment operator `??=`
432
+
433
+The null-coalescing assignment operator `??=` assigns the value of its
434
+right-hand operand to its left-hand operand only if the left-hand operand
435
+evaluates to null. The `??=` operator doesn't evaluate its right-hand operand
436
+if the left-hand operand evaluates to non-null.
437
+
438
+```powershell
439
+$x = $null
440
+$x ??= 100
441
+$x
442
+```
443
+
444
+```Output
445
+100
446
+```
447
+
448
+In the following example, the right-hand operand won't be evaluated.
449
+
450
+```powershell
451
+[string] $todaysDate = '1/10/2020'
452
+$todaysDate ??= (Get-Date).ToShortDateString()
453
+```
454
+
455
+```Output
456
+1/10/2020
457
+```
458
+
459
+### Null-conditional operators
460
+
461
+> [!NOTE]
462
+> This feature was moved from experimental to mainstream in PowerShell 7.1.
463
+
464
+A null-conditional operator applies a member access, `?.`, or element access,
465
+`?[]`, operation to its operand only if that operand evaluates to non-null;
466
+otherwise, it returns null.
467
+
468
+Since PowerShell allows `?` to be part of the variable name, formal
469
+specification of the variable name is required for using these operators. So it
470
+is required to use `{}` around the variable names like `${a}` or when `?` is
471
+part of the variable name `${a?}`.
472
+
473
+In the following example, the value of **PropName** is returned.
474
+
475
+```powershell
476
+$a = @{ PropName = 100 }
477
+${a}?.PropName
478
+```
479
+
480
+```Output
481
+100
482
+```
483
+
484
+The following example will return null, without trying to access the member
485
+name **PropName**.
486
+
487
+```powershell
488
+$a = $null
489
+${a}?.PropName
490
+```
491
+
492
+Similarly, the value of the element will be returned.
493
+
494
+```powershell
495
+$a = 1..10
496
+${a}?[0]
497
+```
498
+
499
+```Output
500
+1
501
+```
502
+
503
+And when the operand is null, the element isn't accessed and null is returned.
504
+
505
+```PowerShell
506
+$a = $null
507
+${a}?[0]
508
+```
509
+
510
+> [!NOTE]
511
+> The variable name syntax of `${<name>}` should not be confused with the `$()`
512
+> subexpression operator. For more information, see Variable name section of
513
+> [about_Variables][about_Variables].
514
+
385515
### Added `&` operator for job control
386516
387517
Putting `&` at the end of a pipeline causes the pipeline to be run as a PowerShell job. When a
⋯ 71 unchanged lines
459589
460590
PowerShell 7.1 is built on .NET 5.0, which introduced the following breaking change:
461591
462
−- [Behavior changes when comparing strings on .NET 5+](/dotnet/standard/base-types/string-comparison-net-5-plus)
592
+- [Behavior changes when comparing strings on .NET 5+][NET5-strings]
463593
464594
As of .NET 5.0, culture invariant string comparisons ignore non-printing control characters.
465595
⋯ 8 unchanged lines
474604
True
475605
```
476606
607
+## New cmdlets
608
+
609
+### New Get-Uptime cmdlet
610
+
611
+The [Get-Uptime][Get-Uptime] cmdlet returns the time elapsed since the last boot of the operating
612
+system. The cmdlet was introduced in PowerShell 6.0.
613
+
614
+### New Remove-Alias cmdlet
615
+
616
+The [Remove-Alias][Remove-Alias] cmdlet removes an alias from the current PowerShell session. The
617
+cmdlet was introduced in PowerShell 6.0.
618
+
619
+### New cmdlet Remove-Service
620
+
621
+The [Remove-Service][Remove-Service] cmdlet removes a Windows service in the registry and in the service database.
622
+The `Remove-Service` cmdlet was introduced in PowerShell 6.0.
623
+
624
+### New Markdown cmdlets
625
+
626
+Markdown is a standard for creating readable plaintext documents with basic formatting that can be
627
+rendered into HTML.
628
+
629
+The following cmdlets were added in PowerShell 6.1:
630
+
631
+- [ConvertFrom-Markdown][ConvertFrom-Markdown] - Convert the contents of a string or a file to a
632
+ **MarkdownInfo** object.
633
+- [Get-MarkdownOption][Get-MarkdownOption] - Returns the current colors and styles used for
634
+ rendering Markdown content in the console.
635
+- [Set-MarkdownOption][Set-MarkdownOption] - Sets the colors and styles used for rendering Markdown
636
+ content in the console.
637
+- [Show-Markdown][Show-Markdown] - Displays Markdown content in the console or as HTML
638
+
639
+### New Test-Json cmdlet
640
+
641
+The [Test-Json][Test-Json] cmdlet tests whether a string is a valid JavaScript Object Notation (JSON) document
642
+and can optionally verify that JSON document against a provided schema.
643
+
644
+This cmdlet was introduced in PowerShell 6.1
645
+
646
+### New cmdlets to support Experimental Features
647
+
648
+The following cmdlets were added in PowerShell 6.2 to support Experimental Features.
649
+
650
+- [Disable-ExperimentalFeature][Disable-ExperimentalFeature]
651
+- [Enable-ExperimentalFeature][Enable-ExperimentalFeature]
652
+- [Get-ExperimentalFeature][Get-ExperimentalFeature]
653
+
654
+### New Join-String cmdlet
655
+
656
+The [Join-String][Join-String] cmdlet combines objects from the pipeline into a single string. This cmdlet was
657
+added in PowerShell 6.2.
658
+
659
+### New view ConciseView and cmdlet Get-Error
660
+
661
+PowerShell 7.0 enhances the display of error messages to improve the readability of interactive and
662
+script errors with a new default view, **ConciseView**. The views are user-selectable through the
663
+preference variable `$ErrorView`.
664
+
665
+With **ConciseView**, if an error is not from a script or parser error, then it's a single line
666
+error message:
667
+
668
+```powershell
669
+Get-Childitem -Path c:\NotReal
670
+```
671
+
672
+```Output
673
+Get-ChildItem: Cannot find path 'C:\NotReal' because it does not exist
674
+```
675
+
676
+If the error occurs during script execution or is a parsing error, PowerShell returns a multiline
677
+error message that contains the error, a pointer, and an error message showing where the error is in
678
+that line. If the terminal doesn't support ANSI color escape sequences (VT100), then colors are not
679
+displayed.
680
+
681
+The default view in PowerShell 7 is **ConciseView**. The previous default view was **NormalView**
682
+and you can select this by setting the preference variable `$ErrorView`.
683
+
684
+```powershell
685
+$ErrorView = 'NormalView' # Sets the error view to NormalView
686
+$ErrorView = 'ConciseView' # Sets the error view to ConciseView
687
+```
688
+
689
+> [!NOTE]
690
+> A new property **ErrorAccentColor** is added to `$Host.PrivateData` to support changing
691
+> the accent color of the error message.
692
+
693
+The new `Get-Error`cmdlet provides a complete detailed view of the fully qualified error when
694
+desired. By default the cmdlet displays the full details, including inner exceptions, of the last
695
+error that occurred.
696
+
697
+The `Get-Error` cmdlet supports input from the pipeline using the built-in variable `$Error`.
698
+`Get-Error` displays all piped errors.
699
+
700
+```powershell
701
+$Error | Get-Error
702
+```
703
+
704
+The `Get-Error` cmdlet supports the **Newest** parameter, allowing you to specify how many errors
705
+from the current session you wish displayed.
706
+
707
+```powershell
708
+Get-Error -Newest 3 # Displays the lst three errors that occurred in the session
709
+```
710
+
711
+For more information, see [Get-Error][Get-Error].
712
+
477713
## Cmdlet changes
478714
715
+### Parallel execution added to ForEach-Object
716
+
717
+Beginning in PowerShell 7.0, the `ForEach-Object` cmdlet, which iterates items in a collection, now
718
+has built-in parallelism with the new **Parallel** parameter.
719
+
720
+By default, parallel script blocks use the current working directory of the caller that started the
721
+parallel tasks.
722
+
723
+This example retrieves 50,000 log entries from 5 system logs on a local Windows machine:
724
+
725
+```powershell
726
+$logNames = 'Security','Application','System','Windows PowerShell','Microsoft-Windows-Store/Operational'
727
+
728
+$logEntries = $logNames | ForEach-Object -Parallel {
729
+ Get-WinEvent -LogName $_ -MaxEvents 10000
730
+} -ThrottleLimit 5
731
+
732
+$logEntries.Count
733
+
734
+50000
735
+```
736
+
737
+The **Parallel** parameter specifies the script block that is run in parallel for each input log
738
+name.
739
+
740
+The new **ThrottleLimit** parameter limits the number of script blocks running in parallel at a
741
+given time. The default is 5.
742
+
743
+Use the `$_` variable to represent the current input object in the script block. Use the
744
+`$using:` scope to pass variable references to the running script block.
745
+
746
+For more information, see [ForEach-Object][ForEach-Object].
747
+
479748
### Check `system32` for compatible built-in modules on Windows
480749
481750
In the Windows 10 1809 update and Windows Server 2019, we updated a number of built-in PowerShell
⋯ 230 unchanged lines
712981
### Web Cmdlets warn when `-Credential` is sent over unencrypted connections
713982
714983
When using HTTP, content including passwords are sent as clear-text. This change is to not allow
715
−this by default and return an error if credentials are being passed in an insecure manner. Users
716
−can bypass this by using the `-AllowUnencryptedAuthentication` switch.
984
+this by default and return an error if credentials are being passed insecurely. Users can bypass
985
+this by using the `-AllowUnencryptedAuthentication` switch.
717986
987
+### Make `-OutFile` parameter in web cmdlets to work like `-LiteralPath`
988
+
989
+Beginning in PowerShell 7.1, the **OutFile** parameter of the web cmdlets works like **LiteralPath**
990
+and does not process wildcards.
991
+
718992
## API changes
719993
720994
### Remove `AddTypeCommandBase` class
⋯ 12 unchanged lines
7331007
legacy [`RunspaceConfiguration`][runspaceconfig] or the newer [`InitialSessionState`][iss] classes.
7341008
This change removed support for `RunspaceConfiguration` and only supports `InitialSessionState`.
7351009
736
−[runspaceconfig]: /dotnet/api/system.management.automation.runspaces.runspaceconfiguration
737
−[iss]: /dotnet/api/system.management.automation.runspaces.initialsessionstate
738
−
7391010
### `CommandInvocationIntrinsics.InvokeScript` bind arguments to `$input` instead of `$args`
7401011
7411012
An incorrect position of a parameter resulted in the args passed as input instead of as args.
⋯ 52 unchanged lines
7941065
7951066
PowerShell also supports PowerShell Remoting (PSRP) over SSH on all platforms (Windows, macOS, and
7961067
Linux). For more information, see
797
−[SSH remoting in PowerShell](/powershell/scripting/learn/remoting/SSH-Remoting-in-PowerShell-Core).
1068
+[SSH remoting in PowerShell][ssh-remote].
7981069
7991070
### PowerShell Direct for Containers tries to use `pwsh` first
8001071
801
−[PowerShell Direct](/virtualization/hyper-v-on-windows/user-guide/powershell-direct) is a feature of
802
−PowerShell and Hyper-V that allows you to connect to a Hyper-V VM or Container without network
803
−connectivity or other remote management services.
1072
+[PowerShell Direct][psdirect] is a feature of PowerShell and Hyper-V that allows you to connect to a
1073
+Hyper-V VM or Container without network connectivity or other remote management services.
8041074
8051075
In the past, PowerShell Direct connected using the built-in Windows PowerShell instance on the
8061076
Container. Now, PowerShell Direct first attempts to connect using any available `pwsh.exe` on the
⋯ 75 unchanged lines
8821152
To opt-out of this telemetry, set the environment variable `POWERSHELL_TELEMETRY_OPTOUT` to `true`,
8831153
`yes`, or `1`. We no longer support deletion of the file
8841154
`DELETE_ME_TO_DISABLE_CONSOLEHOST_TELEMETRY` to disable telemetry.
1155
+
1156
+<!-- Link references -->
1157
+[workflow]: /previous-versions/powershell/scripting/components/workflows-guide
1158
+[workflow-foundation]: /dotnet/framework/windows-workflow-foundation/
1159
+[NETStd2]: https://devblogs.microsoft.com/dotnet/introducing-net-standard/
1160
+[about-WinCompat]: /powershell/module/microsoft.powershell.core/about/about_windows_powershell_compatibility
1161
+[mod-compat]: https://aka.ms/PSModuleCompat
1162
+[WhatsNew73]: What-s-New-in-PowerShell-73.md
1163
+[WhatsNew72]: What-s-New-in-PowerShell-72.md
1164
+[WhatsNew71]: What-s-New-in-PowerShell-71.md
1165
+[WhatsNew70]: What-s-New-in-PowerShell-70.md
1166
+[WhatsNew6x]: /previous-versions/powershell/scripting/whats-new/what-s-new-in-powershell-core-62?view=powershell-6&preserve-view=true
1167
+[fxcore]: /dotnet/core/compatibility/fx-core
1168
+[PSDSC-annouce]: https://devblogs.microsoft.com/powershell/announcing-psdesiredstateconfiguration-on-powershell-gallery/
1169
+[Module Compatibility Table]: https://aka.ms/PSModuleCompat
1170
+[NET5-strings]: /dotnet/standard/base-types/string-comparison-net-5-plus
1171
+[ssh-remote]: /powershell/scripting/learn/remoting/SSH-Remoting-in-PowerShell-Core
1172
+[PowerShell Direct]: /virtualization/hyper-v-on-windows/user-guide/powershell-direct
1173
+[runspaceconfig]: /dotnet/api/system.management.automation.runspaces.runspaceconfiguration
1174
+[iss]: /dotnet/api/system.management.automation.runspaces.initialsessionstate
1175
+[snapin]: /powershell/module/microsoft.powershell.core/about/about_pssnapins
1176
+[exp]: /powershell/module/Microsoft.PowerShell.Core/About/about_Experimental_Features
1177
+[Disable-ExperimentalFeature]: /powershell/module/Microsoft.PowerShell.Core/Disable-ExperimentalFeature
1178
+[Enable-ExperimentalFeature]: /powershell/module/Microsoft.PowerShell.Core/Enable-ExperimentalFeature
1179
+[Get-ExperimentalFeature]: /powershell/module/Microsoft.PowerShell.Core/Get-ExperimentalFeature
1180
+[Remove-Service]: /powershell/module/Microsoft.PowerShell.Management/Remove-Service
1181
+[ConvertFrom-Markdown]: /powershell/module/Microsoft.PowerShell.Utility/ConvertFrom-Markdown
1182
+[Get-MarkdownOption]: /powershell/module/Microsoft.PowerShell.Utility/Get-MarkdownOption
1183
+[Set-MarkdownOption]: /powershell/module/Microsoft.PowerShell.Utility/Set-MarkdownOption
1184
+[Show-Markdown]: /powershell/module/Microsoft.PowerShell.Utility/Show-Markdown
1185
+[Remove-Alias]: /powershell/module/Microsoft.PowerShell.Utility/Remote-Alias
1186
+[Remove-Service]: /powershell/module/Microsoft.PowerShell.Utility/Remote-Service
1187
+[Join-String]: /powershell/module/Microsoft.PowerShell.Utility/Join-String
1188
+[Get-Uptime]: /powershell/module/Microsoft.PowerShell.Utility/Get-Uptime
1189
+[Test-Json]: /powershell/module/Microsoft.PowerShell.Utility/Test-Json
1190
+[Get-Error]: /powershell/module/microsoft.powershell.utility/get-error
1191
+[ForEach-Object]: /powershell/module/microsoft.powershell.core/foreach-object
1192
+[Import-Module]: /powershell/module/microsoft.powershell.core/import-module
1193
+[about_Variables]: /powershell/module/microsoft.powershell.core/about/about_Variables#variable-names-that-include-special-characters
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 03:16 UTC. The commit date is when the source changed, which can be hours or days before Learn published it.