比较PowerShell中CSV列的日期

时间:2017-07-03 12:49:13

标签: powershell csv

我有一个CSV文件电子表格(从Excel xlsx转换而来),大约有21列和74,000行。我感兴趣的四个栏目是与员工开始日期,终止日期,部门名称和他们报告的副总裁有关的专栏。

我正在尝试编写一个脚本,该脚本将返回所有已达到开始日期但未被终止的员工,并在包含人力资源部门的部门工作。在名称中,并向特定的VP报告。我会在代码块之后详细说明我的具体问题。

$Lawson = Import-Csv .\Documents\Lawson_HR.csv 

$startDate = $Lawson | where [datetime]::ParseExact($_.'LAW HIRE DATE', 'dd-MM-yyyy', $null) -le (Get-Date)
$endDate = $startDate | where {$_.'LAW TERM DATE' -eq ''} 
$HR = $endDate | where {$_.'LAW DEPT NAME' -match 'HR'}
$VP = $endDate | where {$_.'VICE PRESIDENT' -match 'Croner'}

首先,$startDate变量不起作用,我不确定将给定日期(从CSV)与今天的日期进行比较所需的语法。 ($endDate变量可以正常运行,但我被告知使用的方法不可靠。)

另外,我想在每行的Dept Name列中搜索任何字母的实例' HR' (注意:部门名称可以是'人力资源 - 职业服务'或人力资源 - 多样性'。我希望所有行中都有HR'名称字段)。我觉得-match运算符不是这样做的,但我不确定。

同样,我希望$VP变量返回Vice President列具有给定名称的所有项目(在本例中为Croner)。

1 个答案:

答案 0 :(得分:1)

这一行需要花括号{ },但对我来说看起来不错:

$startDate = $Lawson | where { [datetime]::ParseExact($_.'LAW HIRE DATE', 'dd-MM-yyyy', $null) -le (Get-Date) }

要进行简单的部分匹配,最好使用-Like和通配符,因为-Match使用正则表达式(尽管应该有效)。

此外,我刚刚注意到您正在管道$enddate变量而不是$lawson

$HR = $Lawson | where {$_.'LAW DEPT NAME' -like '*HR*'}

如果您尝试同时执行所有这些标准,只需将它们与-and结合使用:

$Lawson | where { [datetime]::ParseExact($_.'LAW HIRE DATE', 'dd-MM-yyyy', $null) -le (Get-Date) -and $_.'LAW TERM DATE' -eq '' -and $_.'LAW DEPT NAME' -like '*HR*' -and $_.'VICE PRESIDENT' -match 'Croner'}