我有以下脚本,可以解析 HR 输出文件以查找员工并输出信息,例如 Hire Dare、名字、姓氏、主管等。
我遇到的问题是,在当前格式中,我认为雇佣日期列被视为字符串,因此实际上它会按月份对输出进行排序(即 1/1/01 在 2/2/98 之前)。有没有办法将该列映射到日期/时间,以便正确排序?
Import-CSV -delimiter "`t" Output.tab | Where-Object {$_.'First Nae' -like '*And*'} | Sort-Object 'Hire Date' | ft 'Hire Date', 'First Name'
答案1
您可以使用雇佣日期的值向 CSV 内联添加新的(DateTime 类型)字段来为其设置种子,然后使用该字段进行排序。不过,您仍然可以打印标准雇佣日期。
这应该对你有用:
Import-CSV -delimiter "`t" Output.tab | Where-Object {$_.'First Name' -like '*And*'} | add-member scriptproperty -name 'HireDateTyped' -value { [DateTime]::Parse($this.'Hire Date') } -passthru | Sort-Object 'HireDateTyped' | ft 'Hire Date', 'First Name'
此外,您在该Where-Object
子句中有一个拼写错误,First Name 拼写错误。
答案2
按表达式排序(并输入雇用日期列):
... | 排序对象 { [datetime]$_.'雇用日期' } | ...
答案3
您需要将 CSV 文件中每个属性的每个对象转换为所需的对象类型。在本例中,您需要为此列设置 DateTime 对象。
它看起来像这样:
$data = import-csv C:\report.csv
$data | foreach-object {
New-Object PSObject -prop @{
"Hire Date" = [DateTime]::Parse("$_.Hire Date")
}
}
关于如何做到这一点的好文章...
http://www.heikniemi.net/hardcoded/2010/01/powershell-basics-1-reading-and-parsing-csv/
希望这可以帮助!