无法解析#lastlogontimestamp'到管理员的电子邮件不活动的X天数

时间:2015-09-07 10:35:21

标签: powershell active-directory

我正在创建一个脚本,搜索AD以查找仍处于活动状态但尚未登录超过40天的用户,并向该用户的管理员发送电子邮件。我正在使用lastlogontimestamp并将其从整数解析为本地时间格式。

但是我想扩展这一点。在电子邮件中,我不想显示上次登录的日期,而是要显示自脚本运行之日起最后一次登录后的X天数。

我已经清除了以前的工作方式,无法让新版本工作,但感觉我很亲近。对任何明显的道歉,我是新手。谁能看到我错在哪里?

从剧本中摘录:

{{1}}

此外,我似乎无法过滤超过40天无效但尚未使用的用户。在我的公司,用户有时会在他们到达之前几个月创建,显然我不希望他们的经理收到有关他们的电子邮件。任何人都可以指出我正确的方向将它们从查询中排除吗?

1 个答案:

答案 0 :(得分:0)

lastLogonTimestamp属性包含文件时格式的时间戳。您可以通过静态FromFileTime()方法将其直接转换回日期。然后计算该日期与当前日期之间的差异。可以通过生成的Days对象的TimeSpan属性获取天数差异:

$lastLogon = [DateTime]::FromFileTime($User.lastLogonTimeStamp)
$Daysinactive = ((Get-Date) - $lastLogon).Days

但是,您不需要自己转换日期,因为PowerShell AD cmdlet已经为您完成了。只需在属性列表中包含LastLogonDate属性,您就可以将最后一次登录日期作为实际日期:

Get-ADUser -Properties mail, manager, LastLogonDate, description

foreach($User in $Users) {
  $Daysinactive = ((Get-Date) - $User.LastLogonDate).Days

  ...
}

属性GivenNameSurnameSamAccountName位于默认的属性集Get-ADUser中,因此您无需明确指定它们。