我需要监控用户在 Active Directory 中的上次登录情况。我使用以下脚本将用户的 Lastlogon 属性设置为变量。
$user1logon = (获取 ADUser - 身份 $用户名 - 属性lastlogonTimestamp).lastlogonTimestamp
当我回显此变量时,它为我的测试用户返回值 133340258148779315。我认为这是 Unix 时间?
为了使其可读,我尝试使用以下内容进行转换。
$reallogon = (获取日期 01.01.1970).AddSeconds($user1logon)
($reallogon).ToString("yyyy-MM-dd HH:mm:ss.ffffff")
运行时返回此错误消息
使用“1”个参数调用“AddSeconds”时出现异常:“要添加的值超出范围。 参数名称:值” 在行:1 字符:1
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentOutOfRangeException
您不能对空值表达式调用方法。 在行:2 字符:1
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
我不太确定如何修复它,因为我是脚本编写和 Powershell 的新手,任何帮助将不胜感激!
尝试从 Active Directory 中提取上次登录日期的列表
LastLogonTimeStamp
属性在FileTime中表示,要将其转换为datetime
实例,您可以使用FromFileTimeUtc
方法:
[datetime]::FromFileTimeUtc(133340258148779315)
# or to get a string in the desired format:
[datetime]::FromFileTimeUtc(133340258148779315).ToString('yyyy-MM-dd HH:mm:ss.ffffff')
顺便说一句,不建议依靠
LastLogonTimeStamp
来查找用户的上次登录情况,您应该使用 lastLogon
属性 查询所有域控制器以获得准确的结果。有关详细信息,请参阅此答案。