替换导入的 CSV 文件中的字符串
Replace string in an imported CSV file
我需要导入一个 CSV 文件,然后将完整的用户名 domain\username
替换为 username
。
以下几行有效,但我只收到修改后的用户名作为输出,而不是完整文件。
能请教一下吗?
$TestFile = Import-Csv .\file.csv
$NewFile = $TestFile | ForEach-Object {$_."Username" -replace 'domain\',''}
这是一种方法 - 从输入 table 中获取列名称,迭代 table 中的每一行,并输出具有所需更改的新自定义对象。
$table = Import-Csv "Test.csv"
# Get column names
$columnNames = ($table | Select-Object -First 1).PSObject.Properties |
Select-Object -ExpandProperty Name
# Iterate each row in the table
foreach ( $row in $table ) {
$outputObject = New-Object PSObject
foreach ( $columnName in $columnNames ) {
if ( $columnName -eq "Username" ) {
$outputObject | Add-Member NoteProperty "Username" ($row.Username.Split('\')[1])
}
else {
$outputObject | Add-Member NoteProperty $columnName $row.$columnName
}
}
$outputObject
}
要创建一个新的 CSV 文件作为输出,请将上述代码放入脚本中并通过管道传输到 Export-Csv
。
您可以对字符串数据执行替换,然后使用ConvertFrom-Csv
将其转换为对象。
$TestFile = (Get-Content .\file.csv) -replace 'domain\',''
$NewFile = ConvertFrom-Csv $TestFile
当使用 ForEach-Object
循环处理 CSV 输入时,您需要将数据输出回管道。此外,-replace
运算符不会就地修改变量或属性。它获取值、执行工作并将修改后的字符串输出到成功输出流。如果要更新 属性,则需要将修改后的值分配回 属性。
改变这个:
$TestFile = Import-Csv .\file.csv
$NewFile = $TestFile | ForEach-Object {$_."Username" -replace 'domain\',''}
进入这个:
$NewFile = Import-Csv .\file.csv | ForEach-Object {
$_.Username = $_.Username -replace 'domain\', '' # update username
$_ # feed data back into the pipeline
}
并且代码将执行您想要的操作。
我需要导入一个 CSV 文件,然后将完整的用户名 domain\username
替换为 username
。
以下几行有效,但我只收到修改后的用户名作为输出,而不是完整文件。
能请教一下吗?
$TestFile = Import-Csv .\file.csv
$NewFile = $TestFile | ForEach-Object {$_."Username" -replace 'domain\',''}
这是一种方法 - 从输入 table 中获取列名称,迭代 table 中的每一行,并输出具有所需更改的新自定义对象。
$table = Import-Csv "Test.csv"
# Get column names
$columnNames = ($table | Select-Object -First 1).PSObject.Properties |
Select-Object -ExpandProperty Name
# Iterate each row in the table
foreach ( $row in $table ) {
$outputObject = New-Object PSObject
foreach ( $columnName in $columnNames ) {
if ( $columnName -eq "Username" ) {
$outputObject | Add-Member NoteProperty "Username" ($row.Username.Split('\')[1])
}
else {
$outputObject | Add-Member NoteProperty $columnName $row.$columnName
}
}
$outputObject
}
要创建一个新的 CSV 文件作为输出,请将上述代码放入脚本中并通过管道传输到 Export-Csv
。
您可以对字符串数据执行替换,然后使用ConvertFrom-Csv
将其转换为对象。
$TestFile = (Get-Content .\file.csv) -replace 'domain\',''
$NewFile = ConvertFrom-Csv $TestFile
当使用 ForEach-Object
循环处理 CSV 输入时,您需要将数据输出回管道。此外,-replace
运算符不会就地修改变量或属性。它获取值、执行工作并将修改后的字符串输出到成功输出流。如果要更新 属性,则需要将修改后的值分配回 属性。
改变这个:
$TestFile = Import-Csv .\file.csv
$NewFile = $TestFile | ForEach-Object {$_."Username" -replace 'domain\',''}
进入这个:
$NewFile = Import-Csv .\file.csv | ForEach-Object {
$_.Username = $_.Username -replace 'domain\', '' # update username
$_ # feed data back into the pipeline
}
并且代码将执行您想要的操作。