使用foreach更改数组中的值

时间:2016-09-15 20:56:48

标签: powershell

我有一个导入的CSV文件,我需要更改列的格式(backed_up_ts)以删除列中的原始数据并将其替换为更新的格式。

列中每行的原始数据如下所示:

Tue Sep 13 07:46:26 MDT 2016 

我的代码的第一部分格式化每一行,以便可以将其与日期进行比较:

$csv = Import-Csv -Path "C:\Users\user\Desktop\NewReport.csv" | Select display_client_name, backed_up_ts
$csv = foreach ($budate in $csv.backed_up_ts) {
$budate = $budate.Substring(3)
$budate = $budate.Replace("MDT", "")
$budate = $budate.Replace("MST", "")
$budate = $budate.Split(" ")
$budate = $budate[1] + " " + $budate[2] + " " + $budate[5]
$budate = ($budate | Get-Date -Format d)

从这里开始,我需要采用更新的格式(在$budate值中)并替换$csv.backed_up_ts数组中的原始数据。

但是,$budate的值只是foreach循环中对象的最后一个值(3/30/16)。
$csv.backed_up_ts的值以原始格式保留在数组中(2016年8月30日星期三,美国东部时间)。

我需要将原始数组$csv.backed_up_ts替换为$budate创建的协调值。

感谢。

1 个答案:

答案 0 :(得分:1)

根据所需的数据转换说明更新了答案。

代码

# demonstrate changing columnn data in csv input
$input = @"
header1, header2
value11, "Tue Sep 13 07:46:26 MDT 2016"
value21, "Tue Oct 19 07:46:26 MDT 2017"
"@

$csv = ConvertFrom-Csv $input

"original"
$csv

foreach ($item in $csv)
{
    # modify the header2 column in our csv input
    $parts = $item.header2.Split(' ')
    $newDate = $parts[1] + " " + $parts[2] + " " + $parts[5]
    $item.header2 = [DateTime]::Parse($newDate) | Get-Date -Format d
}

"new"
$csv

输出

original
header1 header2                     
------- -------                     
value11 Tue Sep 13 07:46:26 MDT 2016
value21 Tue Oct 19 07:46:26 MDT 2017
new
value11 9/13/2016                   
value21 10/19/2017