首页 > 解决方案 > 根据日期时间将计算字段添加到导入的 csv

问题描述

有人可以帮忙解决这个问题。我当前的代码导入了一个包含三列的 csv 文件,到目前为止,它将更新列名以使其更具可读性。我需要添加第四列,它是基于日期时间字段的计算字段。因此需要检查日期时间字段,然后显示 90 天之前的天数。例如“今天的日期” - “03/03/2020 8:00:00 AM” = 31 天 90 天 - 31 天 = 59 天(59 天是进入计算字段列 Bit of a newb with powershell and have所有其他功能都正常工作,但这是我剩下的,需要将其添加到下面的调用中,当导入 csv 时,更新标题列然后导出到新文件。

$input = "C:\Data\test\unchanged101.csv"
$output = "C:\Data\test\unchanged101conv.csv"

$checkDate = (Get-Date).AddDays(-90)
$data = Import-Csv $input |
    Where-Object {
        ($_."pwdlastset" -as [DateTime]) -lt $CheckDate
    }

$headerConversion = @(
    @{ Name = 'User account';   Expression = { $_.'cn'  } }
    @{ Name = 'Last modified date'; Expression = { $_.'pwdlastset' } }
    @{ Name = 'Email address';   Expression = { $_.'mail'  } }
)

(Import-Csv -Path $input) |
Select-Object -Property $headerConversion | Select-Object *,"Days Left" |
Export-Csv -Path $output -NoTypeInformation

新列是“剩余天数”,我需要在其中显示 90 天之前的剩余天数。如何从此处的代码中将结果放入每一行的该列中?

$checkDate = (Get-Date).AddDays(-90)
$data = Import-Csv $input |
    Where-Object {
        ($_."pwdlastset" -as [DateTime]) -lt $CheckDate
    }

过去几天一直在研究这个,只是无法弄清楚最后一部分。

标签: powershellcsv

解决方案


我将首先添加新列,然后遍历所有行(使用 foreach 循环)检查剩余天数并将它们写入新的“剩余天数”列。

注意:我在这里省略了您的标题转换。您需要先运行它,然后再运行“Days Left”代码......

$data = Import-Csv $input #import everything

foreach($line in $data){
    $daysLeft = 0
    $daysSinceLastSet = ((Get-Date) - [DateTime]$line.pwdlastset).Days
    if ($daysSinceLastSet -lt 90){
        $daysLeft = 90-$daysSinceLastSet
    }

    $line."Days Left" = $daysLeft
}

$data | Export-Csv -Path $output -NoTypeInformation

推荐阅读