Powershell 脚本用于查找用户自上次重启后是否已登录

Powershell 脚本用于查找用户自上次重启后是否已登录

因此,我一直在编写一个 Powershell 脚本,该脚本需要检测自上次重启以来是否发生过交互式登录。我可以在启动任务之前强制系统重启,但我想为脚本添加一些智能功能。

注意事项:

  • 必须使用 Powershell。
  • 不需要特殊的电源组或插件。
  • 无法使用 Active Directory 命令。(没有 get-qaduser)

我已经能够获取系统上次重启的时间:

$date = Get-WmiObject Win32_OperatingSystem | %{$_.LastBootUpTime} 
$RebootTime = [System.DateTime]::ParseExact($date.split(".")[0],'yyyyMMddHHmmss',$null) 

有什么想法吗?提前致谢

答案1

如果您打算使用 WMI,您可以做得LastBootUpTime更清楚一些:

PS C:\> $wmi = Get-WmiObject -Class Win32_OperatingSystem
PS C:\> $rebootTime = $wmi.ConvertToDateTime($wmi.LastBootUpTime)
PS C:\> $rebootTime
Tuesday, May 24, 2011 3:18:28 PM

考虑到这一点,我们搜索Security事件日志,因为$rebootTime,对于最近的,成功的,eventID4624包含Logon Type 2-- 交互式登录:

PS C:\> $entry = Get-EventLog -After $rebootTime -LogName Security | Where-Object {($_.EventID -eq '4624') -and ($_.EntryType -eq 'SuccessAudit') -and ($_.Message | Select-String "Logon Type:\t\t\t2")} | Select-Object -First 1
PS C:\> $lastLogon = $entry.TimeGenerated
PS C:\> $lastLogon
Tuesday, May 24, 2011 3:19:34 PM

然后,快速比较一下:

PS C:\> $lastLogon -gt $rebootTime
True

上述代码可以转储到脚本中和/或在远程计算机上执行。我仅以交互方式运行命令来演示示例输出。

相关内容