2017-07-03 66 views
0

我有一個CSV文件電子表格(從Excel xlsx轉換而來),大約有21列和74,000行。我感興趣的四列是與員工開始日期,終止日期,部門名稱以及他們向其報告的副總裁有關的列。在PowerShell中比較CSV列的日期

我想編寫一個腳本,將返回誰已達到其開始日期,尚未終止的所有員工,工作在包含名稱中的「人力資源」部門,以及特定的副總裁彙報。我將在代碼塊後詳細說明我的具體問題。

$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'的所有行)。我感覺運營商並不是這樣做的方式,但我不確定。

同樣,我想要$VP變量返回Vice President列有一個給定名稱(在本例中爲Croner)的所有項目。

回答

1

這行需要花括號{ }但看起來OK,否則我:

$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'}