我正在创建一个脚本,搜索AD以查找仍处于活动状态但尚未登录超过40天的用户,并向该用户的管理员发送电子邮件。我正在使用lastlogontimestamp并将其从整数解析为本地时间格式。
但是我想扩展这一点。在电子邮件中,我不想显示上次登录的日期,而是要显示自脚本运行之日起最后一次登录后的X天数。
我已经清除了以前的工作方式,无法让新版本工作,但感觉我很亲近。对任何明显的道歉,我是新手。谁能看到我错在哪里?
从剧本中摘录:
{{1}}
此外,我似乎无法过滤超过40天无效但尚未使用的用户。在我的公司,用户有时会在他们到达之前几个月创建,显然我不希望他们的经理收到有关他们的电子邮件。任何人都可以指出我正确的方向将它们从查询中排除吗?
答案 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
...
}
属性GivenName
,Surname
和SamAccountName
位于默认的属性集Get-ADUser
中,因此您无需明确指定它们。