2017-07-03 15 views
0

私は約21列と74,000行のCSVファイルスプレッドシート(​​Excel xlsxから変換)を持っています。関心のある4つの列は、従業員の開始日、終了日、部門名、および担当者が担当する副社長と関係がある列です。PowerShellのCSV列の日付の比較

私は、開始日に達したすべての従業員を返し、終了せず、名前に「HR」を含む部門で作業し、特定の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)から指定された日付を比較するために必要な構文が不明です、動作しません。

また、各行のDept Name列に「HR」という文字が含まれているかどうか検索したいと思います(注:この例では、部門名は 'HR - キャリアサービス'または 'HR - 多様性'のようなものになる可能性があります。私は-matchオペレータがそれを行う方法ではないと感じるが、私は確信していない。

同様に、私は$VP変数がVice President列に与えられた名前(この場合はCroner)を持つすべての項目を返すようにしたいと思います。

答えて

1

このラインは、中括弧{ }を必要とするが、私にはそうでない場合はOKになります。-Matchは正規表現を使用するよう

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

あなたは-Likeとワイルドカード文字を使用した方がいいでしょう単純部分一致を行うには(動作するはずですが) 。

また、私はちょうどあなたが$lawsonない$enddate変数をパイプ気づいた:あなたが一緒にこれらの基準のすべてをしようとしている場合

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