Powershell 比较日期并在禁用且在范围内时启用 AD 用户
Powershell compare dates and enable AD User if disabled and in range
我似乎不明白为什么这个脚本不起作用。没有错误,但 $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 + " ")
如果没有输入文件的样本,很难说,但是,如果您没有收到任何错误,我会首先检查 $Row.sAMAccountName
是否正在评估循环内的任何内容。就像您注释掉的 Write-Host
行一样,对于 $user
属性。
干杯。
可能需要将这些日期转换为 [datetime]/dates,以便针对 $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
}
我似乎不明白为什么这个脚本不起作用。没有错误,但 $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 + " ")
如果没有输入文件的样本,很难说,但是,如果您没有收到任何错误,我会首先检查 $Row.sAMAccountName
是否正在评估循环内的任何内容。就像您注释掉的 Write-Host
行一样,对于 $user
属性。
干杯。
可能需要将这些日期转换为 [datetime]/dates,以便针对 $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
}