簡體   English   中英

替換導入的CSV文件中的字符串

[英]Replace string in an imported CSV file

我需要導入CSV文件,然后將完整的用戶名domain\\username替換為username

以下幾行有效,但我只收到修改后的用戶名作為輸出,而不是完整文件。

您能否提一些建議?

$TestFile = Import-Csv .\file.csv 
$NewFile = $TestFile | ForEach-Object {$_."Username" -replace 'domain\\',''}

使用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
}

然后代碼將執行您想要的操作。

這是一種方法-從輸入表中獲取列名,迭代表中的每一行,然后輸出具有所需更改的新自定義對象。

$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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM