Powershell比较日期并在禁用和范围内启用AD用户

时间:2015-02-05 17:51:41

标签: powershell csv

我似乎无法弄清楚为什么这个脚本不起作用。没有错误,但$ User对象未被评估为$ True。如果另一个系统显示重新雇用的日期小于或等于8天,那么目的是启用重新雇用的用户的AD帐户。

$CSVLine = "C:\scripts\adp\Test ADP Import spec.csv"
$ErrorLog = "C:\scripts\adp\ADPProcessErrors.csv"
$a = Get-Date


ForEach ($row in (import-csv $CSVLine)) {
$User = Get-ADUser -LDAPFilter ("(sAMAccountName=" + $Row.sAMAccountName + ")") -Properties *
#Write-Host ("User:" + $user.samaccountname + " enabled =" + $user.enabled + " ")
 If ((($User.Enabled -eq $False)) -and ($Row.'Date of hire/rehire' -gt $a) -and (($Row.'Date of hire/rehire') -le ($a.AddDays(8))) )    {

        (Set-ADUser -Enabled $True -Identity $User)
        ("SID:" + $Row.sAMAccountName + ", User:[" + $User.givenName + " " + $User.sn + "] Re-Hire date is in range. Account enabled.") | Out-File -FilePath $ErrorLog -Append

    }    
    } 
                 Write-Host ("CSV Object: " + $Row.'Date of hire/rehire'.GetType())
                 Write-Host ("CSV Object Value:" + $Row.'Date of hire/rehire' + " " )
                 Write-Host ("User:" + $user.samaccountname + " enabled =" + $user.enabled + " ")

2 个答案:

答案 0 :(得分:0)

如果没有输入文件的样本,有点难以说,但如果您没有收到任何错误,我首先要检查$Row.sAMAccountName是否正在评估内部的任何内容循环。就像您对已注释掉的Write-Host行一样,对于$user属性。

干杯。

答案 1 :(得分:0)

这些日期可能需要作为[datetime] / date投放,以便针对$a的数学运算起作用。它很可能只是按字母顺序比较将它们视为字符串。

PS C:\Users\mcameron> "b" -gt "a"
True

如果没有样本日期,就无法告诉您该做什么,以便我们可以看到这些格式。如果您的日期格式与" 2/8/2015"然后一个简单的演员会解决这个问题

PS C:\Users\mcameron> [datetime]"2/8/2015"
Sunday, February 08, 2015 12:00:00 AM

将您的if更新为以下内容:

If ((($User.Enabled -eq $False)) -and ([datetime]($Row.'Date of hire/rehire') -gt $a) -and ([datetime]($Row.'Date of hire/rehire') -le ($a.AddDays(8))) ){
    #.....Process
}