我有一个.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 ))}}
答案 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;是正则表达式的一部分)。