我需要導入CSV文件,然後用username
替換完整的用戶名domain\username
。替換導入的CSV文件中的字符串
以下幾行可行,但我只收到修正的用戶名作爲輸出而不是完整的文件。
您能否提供建議?
$TestFile = Import-Csv .\file.csv
$NewFile = $TestFile | ForEach-Object {$_."Username" -replace 'domain\\',''}
我需要導入CSV文件,然後用username
替換完整的用戶名domain\username
。替換導入的CSV文件中的字符串
以下幾行可行,但我只收到修正的用戶名作爲輸出而不是完整的文件。
您能否提供建議?
$TestFile = Import-Csv .\file.csv
$NewFile = $TestFile | ForEach-Object {$_."Username" -replace 'domain\\',''}
您可以對字符串數據執行替換,然後使用ConvertFrom-Csv
將其轉換爲對象。
$TestFile = (Get-Content .\file.csv) -replace 'domain\\',''
$NewFile = ConvertFrom-Csv $TestFile
下面是一種方法 - 從輸入表中獲取列名,迭代表中的每一行,並輸出具有所需更改的新自定義對象。
$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
。
在處理與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
}
,代碼會做你想要什麼。
好的答案,請記住,模式替換是全局的(即不是專用於列)。 –