foreach循环中的where语句,比较日期

时间:2019-01-29 10:07:02

标签: powershell

尝试导入具有名称,电子邮件,终止日期,终止日期的用户列表,并首先检查终止日期或终止日期是否已过。

尝试添加[datetime]并使用get-date $ user.'stop date',但是没有任何运气。 它似乎可以与下面的代码一起使用,但是没有相同的问题,或者我遇到相同的错误,但是它确实检查并写出其中一个值更大:

$StopFolder = Get-ChildItem C:\test\123\*.csv |sort LastWriteTime -descending|select -first 1
$Stoplist = Import-Csv $StopFolder -delimiter ';'

$CurrentDate = Get-Date
foreach($Date in $Stoplist){
if($CurrentDate -eq (get-date $Date.'Stop Date')){write-host Equal}

if($CurrentDate -gt (get-date $Date.'Stop Date')){write-host Greater}

if($CurrentDate -lt (get-date $Date.'Stop Date')){write-host Less}}

但是以下内容似乎没有用,也无法真正弄清楚原因。我想我需要将其转换为日期,但不确定为什么它可以在上面而不是下面使用,或者不确定如何在get-date不起作用的情况下进行转换。

$StopFolder = Get-ChildItem C:\test\123\*.csv |sort LastWriteTime -descending|select -first 1
$Stoplist = Import-Csv $StopFolder -delimiter ';'
$CurrentDate = Get-Date

foreach($User in $Stoplist|where($_.'stop date' -lt $CurrentDate)){

try{
    $Usermail = $User.'e-mail address'
    $Username = get-aduser -Filter "EmailAddress -eq '$Usermail'" -properties Enabled


        if($Username.enabled){
        echo $Username 'still exists and is NOT disabled' >> C:\NotDisabled.txt
        }

        if($Username.enabled -eq $false){
        echo $Username 'still exists and is disabled' >> C:\NotDeleted.txt 
        }
}
catch{continue}
}

预期结果是仅当当前用户的停止日期小于当前日期时才启动循环。当前什么也没发生,删除了where部分,其余部分似乎运行正常。

非常感谢您的帮助。

编辑: CSV日期是这样的:

停止日期

01-02-2023
21-09-2019
21-01-2019
01-01-2019
01-01-2019

1 个答案:

答案 0 :(得分:1)

编辑:
该错误不仅在逻辑内,而且是一个错字:| where需要大括号> | where {}而不是括号。


'stop date'创建日期:

(get-date -date $_.'stop date')

一行:

foreach($User in $Stoplist|where{(get-date -date $_.'stop date') -lt $CurrentDate}){...}

$Stoplist|where{(get-date -date $_.'stop date') -lt $CurrentDate}是一个单元,可以用括号括起来:

foreach($User in ($Stoplist|where{(get-date -date $_.'stop date') -lt $CurrentDate}) ){...}

$User in $Stoplist周围没有括号,|仅引用最后一个对象$Stoplist