Powershell Import-CSV 根据条件创建新行

Powershell Import-CSV Create new row based on a condition

总的来说,我对脚本编写有些陌生。我有一个 CSV 文件,我正在导入和修改数据,以便它以更好的格式呈现。
我的问题是我想对给定列的所有行执行(我猜)foreach 循环,如果数据不符合特定条件:

  1. 将整行复制到新行(保留行中的所有其他数据 行)。
  2. 将"Column B"的值替换为"Column C"
  3. 的值

我基本上是在做 import-csv $file。稍后我会导出它。

这是一个例子:我基本上想将 Task2 移到 Task1 列中,如果存在除“--”之外的任何数据,然后我可以忽略 Task 2 列。

Import-csv 给我这个:

ID,    TASK1, TASK2
123,    A,     --     
456,    B,     --     
789,    C,     D,     

But I want it to look like this:

ID,   TASK1, TASK2
123,    A ,    --     
456,    B,     --     
789,    C,     D,     
789,    D,     D,                

对于相对较小的 csv 文件,这可能是一种方式($CSV+= 每次重新创建 var):

## Q:\Test17\SO_46018965.ps1
$CSV = import-csv 'test.csv'
foreach ($Row in $CSV){
    if ($Row.TASK1 -eq 'C'){
        $NewRow=[PSCustomObject]@{
            ID = $Row.ID
            TASK1 = $Row.TASK2
            TASK2 = $Row.TASK2}
        $CSV+=$NewRow
    }
}
$CSV

示例输出:

ID  TASK1 TASK2
--  ----- -----
123 A     --
456 B     --
789 C     D
789 D     D

其他方法:

$data=import-csv "C:\temp\test.txt"
$data + ($data | where TASK2 -ne "--" |  %{$_.TASK1=$_.TASK2;$_})