powershell - 根据日期时间将计算字段添加到导入的 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
}
过去几天一直在研究这个,只是无法弄清楚最后一部分。
解决方案
我将首先添加新列,然后遍历所有行(使用 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
推荐阅读
- python - python -m json.tool 输出中文
- excel - SUMPRODUCT、标准和空白
- amazon-web-services - 尝试从我的本地机器通过我的 ec2 实例连接到 RDS 实例并出现以下错误
- ios - 设置按钮宽度以适应动态按钮标题
- c# - 谷歌街景API中的2048分辨率街景统一
- java - redis hash中如何通过fuzzy key查询数据
- javascript - 用户登录后将文本动态复制到剪贴板
- google-bigquery - BigQueryIO 读取与 fromQuery
- javascript - 如何动态更改子类别?
- android - Linphone Android 文件共享服务器