我正在尝试编写一个Powershell脚本,用于标识尚未登录90天的用户,但我不断收到此错误消息:
找不到“op_Subtraction”的重载和参数count:“2”。起初我以为这是一个变量类型的不匹配,但是看看减法的变量看起来很好。
PS C:\> $today.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True DateTime System.ValueType
PS C:\> $users[198].LastLogonDate.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True DateTime System.ValueType
$today = Get-Date
$days = 90
$users = Get-ADUser -Properties * -Filter *
foreach ($i in $users)
{
$difference = $today - $i.LastLogonDate
#Write-Host $i.Name + $difference.Days
if ($difference.Days -ge $days){Write-Host $i.name " hasn't logged on in 90 days"}
elseif ($i.LastLogonDate -eq $null) {Write-Host $i.name " has null value"}
else {Write-Host " No Value"}
}
思想??
谢谢!
答案 0 :(得分:0)
您从未登录过的用户会收到错误消息。 LastLogonDate 属性为null,因此您无法从$ today中减去它。要防止出现错误,请先在 if 语句中检查属性是否为空,否则仅尝试减法。
foreach ($i in $users) {
if ($i.LastLogonDate -eq $null) {
Write-Host $i.name " has null value"
} else {
$difference = $today - $i.LastLogonDate
if ($difference.Days -ge $days) {
Write-Host $i.name " hasn't logged on in 90 days"
} else {
Write-Host " No Value"
}
}
}
顺便说一下,我不太确定你打算在哪些情况下输出“No Value”消息,但是对于在过去90天内登录的任何用户都会显示
答案 1 :(得分:0)
这个怎么样:
Search-ADAccount -AccountInactive -TimeSpan "90" -UsersOnly