From 2c0fc87221b9a4f22db2400fad678664e979d40c Mon Sep 17 00:00:00 2001 From: surfingoldelephant <151538956+surfingoldelephant@users.noreply.github.com> Date: Sun, 28 Dec 2025 01:13:47 +0000 Subject: [PATCH 1/3] Clarify experimental feature is mainstream Previous verbiage in about_Pipelines wasn't clear that PSNativeCommandPreserveBytePipe is mainstream in PS 7.4. --- .../About/about_Pipelines.md | 20 +++++++++---------- .../About/about_Pipelines.md | 20 +++++++++---------- .../About/about_Pipelines.md | 20 +++++++++---------- 3 files changed, 27 insertions(+), 33 deletions(-) diff --git a/reference/7.4/Microsoft.PowerShell.Core/About/about_Pipelines.md b/reference/7.4/Microsoft.PowerShell.Core/About/about_Pipelines.md index fb66f53c097..d6819c9e561 100644 --- a/reference/7.4/Microsoft.PowerShell.Core/About/about_Pipelines.md +++ b/reference/7.4/Microsoft.PowerShell.Core/About/about_Pipelines.md @@ -1,7 +1,7 @@ --- description: Combining commands into pipelines in the PowerShell Locale: en-US -ms.date: 10/02/2025 +ms.date: 12/28/2025 online version: https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_pipelines?view=powershell-7.4&WT.mc_id=ps-gethelp schema: 2.0.0 title: about_Pipelines @@ -400,17 +400,15 @@ one at a time. ## Using native commands in the pipeline PowerShell allows you to include native external commands in the pipeline. -However, it's important to note that PowerShell's pipeline is object-oriented -and doesn't support raw byte data. -Piping or redirecting output from a native program that outputs raw byte data -converts the output to .NET strings. This conversion can cause corruption of -the raw data output. +Before PowerShell 7.4, piping or redirecting output from a native program that +outputs raw byte data converted the output to .NET strings. This conversion +caused corruption of the raw data output. -However, PowerShell 7.4 added the `PSNativeCommandPreserveBytePipe` -experimental feature that preserves byte-stream data when redirecting the -**stdout** stream of a native command to a file or when piping byte-stream data -to the **stdin** stream of a native command. +In PowerShell 7.4 or higher, the `PSNativeCommandPreserveBytePipe` experimental +feature is mainstream. This feature preserves byte-stream data when +redirecting the **stdout** stream of a native command to a file or when piping +byte-stream data to the **stdin** stream of a native command. For example, using the native command `curl` you can download a binary file and save it to disk using redirection. @@ -616,7 +614,7 @@ Get-Process | Where-Object CPU | Where-Object Path ``` > [!IMPORTANT] -> When working interactively in the shell, pasting code with pipelines at the +> When working interactively in the shell, paste code with pipelines at the > beginning of a line only when using Ctrl+V to paste. > Right-click paste operations insert the lines one at a time. Since the line > doesn't end with a pipeline character, PowerShell considers the input to be diff --git a/reference/7.5/Microsoft.PowerShell.Core/About/about_Pipelines.md b/reference/7.5/Microsoft.PowerShell.Core/About/about_Pipelines.md index f4a6950b0c5..5e0d13dc4a8 100644 --- a/reference/7.5/Microsoft.PowerShell.Core/About/about_Pipelines.md +++ b/reference/7.5/Microsoft.PowerShell.Core/About/about_Pipelines.md @@ -1,7 +1,7 @@ --- description: Combining commands into pipelines in the PowerShell Locale: en-US -ms.date: 10/02/2025 +ms.date: 12/28/2025 online version: https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_pipelines?view=powershell-7.5&WT.mc_id=ps-gethelp schema: 2.0.0 title: about_Pipelines @@ -400,17 +400,15 @@ one at a time. ## Using native commands in the pipeline PowerShell allows you to include native external commands in the pipeline. -However, it's important to note that PowerShell's pipeline is object-oriented -and doesn't support raw byte data. -Piping or redirecting output from a native program that outputs raw byte data -converts the output to .NET strings. This conversion can cause corruption of -the raw data output. +Before PowerShell 7.4, piping or redirecting output from a native program that +outputs raw byte data converted the output to .NET strings. This conversion +caused corruption of the raw data output. -However, PowerShell 7.4 added the `PSNativeCommandPreserveBytePipe` -experimental feature that preserves byte-stream data when redirecting the -**stdout** stream of a native command to a file or when piping byte-stream data -to the **stdin** stream of a native command. +In PowerShell 7.4 or higher, the `PSNativeCommandPreserveBytePipe` experimental +feature is mainstream. This feature preserves byte-stream data when +redirecting the **stdout** stream of a native command to a file or when piping +byte-stream data to the **stdin** stream of a native command. For example, using the native command `curl` you can download a binary file and save it to disk using redirection. @@ -616,7 +614,7 @@ Get-Process | Where-Object CPU | Where-Object Path ``` > [!IMPORTANT] -> When working interactively in the shell, pasting code with pipelines at the +> When working interactively in the shell, paste code with pipelines at the > beginning of a line only when using Ctrl+V to paste. > Right-click paste operations insert the lines one at a time. Since the line > doesn't end with a pipeline character, PowerShell considers the input to be diff --git a/reference/7.6/Microsoft.PowerShell.Core/About/about_Pipelines.md b/reference/7.6/Microsoft.PowerShell.Core/About/about_Pipelines.md index 3b5ba1acf08..ca7c3df36c3 100644 --- a/reference/7.6/Microsoft.PowerShell.Core/About/about_Pipelines.md +++ b/reference/7.6/Microsoft.PowerShell.Core/About/about_Pipelines.md @@ -1,7 +1,7 @@ --- description: Combining commands into pipelines in the PowerShell Locale: en-US -ms.date: 10/02/2025 +ms.date: 12/28/2025 online version: https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_pipelines?view=powershell-7.6&WT.mc_id=ps-gethelp schema: 2.0.0 title: about_Pipelines @@ -400,17 +400,15 @@ one at a time. ## Using native commands in the pipeline PowerShell allows you to include native external commands in the pipeline. -However, it's important to note that PowerShell's pipeline is object-oriented -and doesn't support raw byte data. -Piping or redirecting output from a native program that outputs raw byte data -converts the output to .NET strings. This conversion can cause corruption of -the raw data output. +Before PowerShell 7.4, piping or redirecting output from a native program that +outputs raw byte data converted the output to .NET strings. This conversion +caused corruption of the raw data output. -However, PowerShell 7.4 added the `PSNativeCommandPreserveBytePipe` -experimental feature that preserves byte-stream data when redirecting the -**stdout** stream of a native command to a file or when piping byte-stream data -to the **stdin** stream of a native command. +In PowerShell 7.4 or higher, the `PSNativeCommandPreserveBytePipe` experimental +feature is mainstream. This feature preserves byte-stream data when +redirecting the **stdout** stream of a native command to a file or when piping +byte-stream data to the **stdin** stream of a native command. For example, using the native command `curl` you can download a binary file and save it to disk using redirection. @@ -616,7 +614,7 @@ Get-Process | Where-Object CPU | Where-Object Path ``` > [!IMPORTANT] -> When working interactively in the shell, pasting code with pipelines at the +> When working interactively in the shell, paste code with pipelines at the > beginning of a line only when using Ctrl+V to paste. > Right-click paste operations insert the lines one at a time. Since the line > doesn't end with a pipeline character, PowerShell considers the input to be From 76baae28e9bd719934f71fe08d3a33028b97c258 Mon Sep 17 00:00:00 2001 From: surfingoldelephant <151538956+surfingoldelephant@users.noreply.github.com> Date: Sun, 28 Dec 2025 01:18:32 +0000 Subject: [PATCH 2/3] Fix wrong feature link in 7.4 release notes PSNativeCommandPreserveBytePipe was using the wrong link reference (10 rather than 11). The linked doc has also been changed to `about_Pipelines`, as this explicitly mentions the (now mainstream) feature by name. --- .../docs-conceptual/whats-new/What-s-New-in-PowerShell-74.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reference/docs-conceptual/whats-new/What-s-New-in-PowerShell-74.md b/reference/docs-conceptual/whats-new/What-s-New-in-PowerShell-74.md index b03ff2ad290..f89c2f4c495 100644 --- a/reference/docs-conceptual/whats-new/What-s-New-in-PowerShell-74.md +++ b/reference/docs-conceptual/whats-new/What-s-New-in-PowerShell-74.md @@ -27,7 +27,7 @@ For a complete list of changes, see the [CHANGELOG][chg] in the GitHub repositor - Output from `Test-Connection` now includes more detailed information about TCP connection tests - .NET introduced changes that affected `Test-Connection`. The cmdlet now returns an error about the need to use `sudo` on Linux platforms when using a custom buffer size ([#20369][20369]) -- Experimental feature [PSNativeCommandPreserveBytePipe][10] is now mainstream. PowerShell now +- Experimental feature [PSNativeCommandPreserveBytePipe][11] is now mainstream. PowerShell now preserves the byte-stream data when redirecting the **stdout** stream of a native command to a file or when piping byte-stream data to the stdin stream of a native command. - Change how relative paths in `Resolve-Path` are handled when using the **RelativeBasePath** @@ -232,7 +232,7 @@ For more information about the Experimental Features, see [Using Experimental Fe [08]: /powershell/module/microsoft.powershell.core/about/about_ansi_terminals [09]: /powershell/module/microsoft.powershell.core/about/about_preference_variables#psnativecommandargumentpassing [10]: /powershell/module/microsoft.powershell.core/about/about_preference_variables#psnativecommanduseerroractionpreference -[11]: /powershell/module/microsoft.powershell.core/about/about_redirection?view=powershell-7.4&preserve-view=true#redirecting-output-from-native-commands +[11]: /powershell/module/microsoft.powershell.core/about/about_pipelines#using-native-commands-in-the-pipeline [12]: /powershell/module/microsoft.powershell.psresourceget [13]: /powershell/module/psreadline [14]: https://json-schema.org/understanding-json-schema/reference/schema From 564b686268cc68ba1ea11ea2884abf41e047f25b Mon Sep 17 00:00:00 2001 From: "Mikey Lombardi (He/Him)" Date: Fri, 2 Jan 2026 12:48:26 -0600 Subject: [PATCH 3/3] Apply suggestions from review --- .../7.4/Microsoft.PowerShell.Core/About/about_Pipelines.md | 2 +- .../7.5/Microsoft.PowerShell.Core/About/about_Pipelines.md | 2 +- .../7.6/Microsoft.PowerShell.Core/About/about_Pipelines.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/reference/7.4/Microsoft.PowerShell.Core/About/about_Pipelines.md b/reference/7.4/Microsoft.PowerShell.Core/About/about_Pipelines.md index d6819c9e561..75ad2ab87ab 100644 --- a/reference/7.4/Microsoft.PowerShell.Core/About/about_Pipelines.md +++ b/reference/7.4/Microsoft.PowerShell.Core/About/about_Pipelines.md @@ -614,7 +614,7 @@ Get-Process | Where-Object CPU | Where-Object Path ``` > [!IMPORTANT] -> When working interactively in the shell, paste code with pipelines at the +> When working interactively in the shell, pasting code with pipelines at the > beginning of a line only when using Ctrl+V to paste. > Right-click paste operations insert the lines one at a time. Since the line > doesn't end with a pipeline character, PowerShell considers the input to be diff --git a/reference/7.5/Microsoft.PowerShell.Core/About/about_Pipelines.md b/reference/7.5/Microsoft.PowerShell.Core/About/about_Pipelines.md index 5e0d13dc4a8..2b1a48b94ee 100644 --- a/reference/7.5/Microsoft.PowerShell.Core/About/about_Pipelines.md +++ b/reference/7.5/Microsoft.PowerShell.Core/About/about_Pipelines.md @@ -614,7 +614,7 @@ Get-Process | Where-Object CPU | Where-Object Path ``` > [!IMPORTANT] -> When working interactively in the shell, paste code with pipelines at the +> When working interactively in the shell, pasting code with pipelines at the > beginning of a line only when using Ctrl+V to paste. > Right-click paste operations insert the lines one at a time. Since the line > doesn't end with a pipeline character, PowerShell considers the input to be diff --git a/reference/7.6/Microsoft.PowerShell.Core/About/about_Pipelines.md b/reference/7.6/Microsoft.PowerShell.Core/About/about_Pipelines.md index ca7c3df36c3..8dbe33db125 100644 --- a/reference/7.6/Microsoft.PowerShell.Core/About/about_Pipelines.md +++ b/reference/7.6/Microsoft.PowerShell.Core/About/about_Pipelines.md @@ -614,7 +614,7 @@ Get-Process | Where-Object CPU | Where-Object Path ``` > [!IMPORTANT] -> When working interactively in the shell, paste code with pipelines at the +> When working interactively in the shell, pasting code with pipelines at the > beginning of a line only when using Ctrl+V to paste. > Right-click paste operations insert the lines one at a time. Since the line > doesn't end with a pipeline character, PowerShell considers the input to be