2

我正在尝试编写一个 Powershell 脚本来识别 90 天未登录的用户,但我不断收到此错误消息:

找不到“op_Subtraction”的重载和参数计数:“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"}
}

想法??

谢谢!!

4

2 回答 2

0

对于从未登录过的用户,您会收到错误消息。LastLogonDate属性为空,因此您不能从 $today 中减去它为防止出现错误,请先在if语句中检查属性是否为 null,否则仅尝试减法。

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"
    }
  }
}

顺便说一句,我不太确定您打算在哪种情况下输出“无价值”消息,但对于过去 90 天内登录的任何用户都会显示该消息。

于 2013-07-29T22:48:49.687 回答
0

这个怎么样:

Search-ADAccount -AccountInactive -TimeSpan "90" -UsersOnly
于 2013-07-30T06:49:14.247 回答