生日.csv列表 - 如果生日在今天的1-5天内通知

时间:2014-12-12 11:57:37

标签: powershell

我有一个.csv列表,如下所示:

EntryDate,Name,Birthday of Member
04.12.2012,User Name, 28.12.1984
.
.
.

我想将此.csv文件中的每个生日与实际日期进行比较,如果生日是在接下来的4天内,则发送通知电子邮件。

编辑:

$CSVList = get-content D:\Geburtstage.csv
$List  = ConvertFrom-Csv -InputObject $CSVList -Delimiter ";"
$new = $list | select Stand,"Name, Vorname",@{name="Geburtsdatum";expression= {$([datetime]::ParseExact($_.Geburtsdatum, "dd/MM/yyyy", $null  ))}}

1 个答案:

答案 0 :(得分:1)

使用以下文件:

EntryDate,Name,Birthday of Member
04.12.2012,User Name1, 28.12.1984
04.12.2012,User Name2, 12.12.1984
04.12.2012,User Name3, 28.12.1984

您可以测试以下内容以查找今天的生日:

Import-Csv C:\temp\birth.csv | where {$_."Birthday of Member" -like "$((get-date).Day).$((get-date).Month)*"} | % {$_.name}

您可以测试以下内容以查找1到5天的生日:

Import-Csv C:\temp\birth.csv | where {$a=$_."Birthday of Member" -match "(\d+)\.(\d+).*"; (Get-Date) -gt (Get-Date -Day $matches[1] -Month $matches[2] -Year (get-date).Year).AddDays(-6)} | % {$_.name}

我只是使用正则表达式来检索日期和月份,并计算生日的日期减去6.如果今天大于此日期,则它与过滤器匹配。


<强>被修改

如果你有一个&#39 ;;&#39;作为分隔符,您只需将-Delimiter ';'添加到import-csv

Import-Csv C:\temp\birth.csv -Delimiter ';' | where {$a=$_."Birthday of Member" -match "(\d+)\.(\d+).*"; (Get-Date) -gt (Get-Date -Day $matches[1] -Month $matches[2] -Year (get-date).Year).AddDays(-6)} | % {$_.name}

您的第二个麻烦来自于您有一个与&#39;不同的分隔符。&#39;在生日的日期和月份之间(&#39;。&#39;是正则表达式的一部分)。