我有以下脚本parsing人力资源输出文件,寻找员工,并输出雇用敢,名,姓,监督等信息。
我遇到的问题是,在目前的格式,我认为聘用date列被视为一个string,所以实际上它按月sorting(即1/1/01在2/2/98之前)。 有没有办法将该列映射到date/时间,以便正确sorting?
Import-CSV -delimiter "`t" Output.tab | Where-Object {$_.'First Nae' -like '*And*'} | Sort-Object 'Hire Date' | ft 'Hire Date', 'First Name'
您可以使用Hire Date中的值将新的(DateTimetypes的)字段添加到您的CSV内容中,然后将其用于sorting。 您仍然可以打印标准的聘用date。
这应该为你工作:
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子句中有一个拼写错误,名字拼写错误。
按expression式sorting(并input雇佣date列):
… | Sort-Object {[datetime] $ _。'Hire Date'} | …
您需要将每个属性的CSV文件中的每个对象转换为所需的对象types。 在这种情况下,您需要为此列设置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/
希望这可以帮助!