Назад | Перейти на главную страницу

Сценарий Powershell, чтобы определить, входил ли пользователь в систему с момента последней перезагрузки

Итак, я работал над сценарием Powershell, который должен определять, произошел ли интерактивный вход в систему с момента последней перезагрузки. Я могу принудительно перезапустить систему перед запуском задачи, но я хотел бы добавить немного интеллекта в сценарий.

Предостережения:

Я могу получить информацию о последней перезагрузке системы:

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

Любые идеи? заранее спасибо

Если вы настроены на использование 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, для самых последних, успешный, eventID 4624 содержащий 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

Приведенный выше код может быть выгружен в сценарий и / или выполнен на удаленном компьютере. Я запускал команды только в интерактивном режиме, чтобы продемонстрировать результат примера.