diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/CsvCommands.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/CsvCommands.cs
index fa49c33d2ab..e84a79b99b6 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/CsvCommands.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/CsvCommands.cs
@@ -270,6 +270,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)
{
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/CsvCommandStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/CsvCommandStrings.resx
index 0eff0d6f84f..8c5ded13465 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/CsvCommandStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/CsvCommandStrings.resx
@@ -157,4 +157,7 @@
EOF is reached.
+
+ You must specify either the -Append or -NoHeader parameters, but not both.
+
diff --git a/test/powershell/Modules/Microsoft.PowerShell.Utility/Export-Csv.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Utility/Export-Csv.Tests.ps1
index db5c6aff9e3..ea05d66d392 100644
--- a/test/powershell/Modules/Microsoft.PowerShell.Utility/Export-Csv.Tests.ps1
+++ b/test/powershell/Modules/Microsoft.PowerShell.Utility/Export-Csv.Tests.ps1
@@ -187,6 +187,10 @@ Describe "Export-Csv" -Tags "CI" {
$results[1].PSObject.properties.Name | Should -Not -Contain 'third'
}
+ It "Should throw when -Append and -NoHeader are specified together" {
+ { $P1 | Export-Csv -Path $testCsv -Append -NoHeader -ErrorAction Stop } | Should -Throw -ErrorId "CannotSpecifyBothAppendAndNoHeader,Microsoft.PowerShell.Commands.ExportCsvCommand"
+ }
+
It "First line should be #TYPE if -IncludeTypeInformation used and pstypenames object property is empty" {
$object = [PSCustomObject]@{first = 1}
$pstypenames = $object.pstypenames | ForEach-Object -Process {$_}