Loops are traditionally avoided if possible, but here are a couple of options. This is the CSV to mess with:
$csv = @"
"EmployeeId","FirstName","LastName","Manager","Password","Username"
"tst00001","Angela","Tester","rsimmers","<RANDOM>","atester"
"tst00002","Angelo","Tester","rsimmers","<RANDOM>","atester"
"tst00003","Bob","Tester","rsimmers","<RANDOM>","btester"
"tst00004","Chris","Tester","rsimmers","<RANDOM>","ctester"
"tst00005","Derek","Tester","rsimmers","<RANDOM>","dtester"
"@
This would parse using Import-CSV, so if there are “rogue” double qoutes in the content, this is parsing it as a CSV and then gluing it together with string builder. While this is using for loops, there is no Replace operations, it’s just parse and glue it together:
$csv = Import-Csv -Path 'C:\Scripts\temp.csv'
$myNewCSV = [System.Text.StringBuilder]::new()
#Header Row
foreach ($row in $csv) {
[void]$myNewCSV.Append("{0}r
n" -f ($row.PSObject.Properties.Name -join ';'))
break
}
#Data Row
foreach ($row in $csv) {
[void]$myNewCSV.Append("{0}r
n" -f ($row.PSObject.Properties.Value -join ';'))
}
$myNewCSV.ToString() #Set Content
Output:
EmployeeId;FirstName;LastName;Manager;Password;Username
tst00001;Angela;Tester;rsimmers;<RANDOM>;atester
tst00002;Angelo;Tester;rsimmers;<RANDOM>;atester
tst00003;Bob;Tester;rsimmers;<RANDOM>;btester
tst00004;Chris;Tester;rsimmers;<RANDOM>;ctester
tst00005;Derek;Tester;rsimmers;<RANDOM>;dtester
#Measure Command
Days : 0
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 15
Ticks : 152401
TotalDays : 1.76390046296296E-07
TotalHours : 4.23336111111111E-06
TotalMinutes : 0.000254001666666667
TotalSeconds : 0.0152401
TotalMilliseconds : 15.2401
Another approach is using Get-Content -Raw, which should bring the content in as raw content and not parse lines. This is available Powershell 4+.
$content = Get-Content -Path 'C:\Scripts\temp.csv' -Raw
$content.Replace('"','')
Output:
PS C:\Users\rasim> $content.Count
1
PS C:\Users\rasim> $content = Get-Content -Path 'C:\Scripts\temp.csv' -Raw
$content.Replace('"','')
EmployeeId,FirstName,LastName,Manager,Password,Username
tst00001,Angela,Tester,rsimmers,<RANDOM>,atester
tst00002,Angelo,Tester,rsimmers,<RANDOM>,atester
tst00003,Bob,Tester,rsimmers,<RANDOM>,btester
tst00004,Chris,Tester,rsimmers,<RANDOM>,ctester
tst00005,Derek,Tester,rsimmers,<RANDOM>,dtester
PS C:\Users\rasim> Measure-Command {
$content = Get-Content -Path 'C:\Scripts\temp.csv' -Raw
$content.Replace('"','')
}
Days : 0
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 12
Ticks : 127013
TotalDays : 1.47005787037037E-07
TotalHours : 3.52813888888889E-06
TotalMinutes : 0.000211688333333333
TotalSeconds : 0.0127013
TotalMilliseconds : 12.7013