2012-05-21 1 views
5

Windows 7의 일부인 그룹 정책 편집기 (Windows XP의 경우도 있음)를 사용하여 시스템 종료 또는 재부팅 할 때마다 자동으로 실행되는 종료 스크립트를 실행합니다. 내 문제는 : 사용자가 시스템을 종료하도록 선택했는지 또는 대신 재부팅을 선택한 경우 스크립트에서 알 필요가 있습니다. 두 작업 모두 Windows에서 종료 스크립트를 실행하게하지만 실제로 해당 스크립트 실행 중에 어떤 작업을 수행했는지 확인할 수 있습니까?Windows 7 스크립트에서 현재 시스템 종료가 실제로 재부팅되는지 어떻게 확인할 수 있습니까?

시스템이 현재 종료 또는 재부팅을 수행하는 경우 시스템 종료 중에 알 수있는 방법이 있습니까? 당신이 레지스트리를 조회 할 수 있습니다사전 비스타 시스템에서

답변

8

:

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer 저장 현재 사용자의 Windows 종료 대화 상자의 목록에서 가장 최근에 선택한 설정 아래에있는 Shutdown Setting DWORD. 최근 시스템

, 당신은 다음과 같이 당신의 종료 스크립트에 시스템 이벤트 로그을 조회 할 수 있습니다

$systemstateentry = get-eventlog -LogName system -Source User32 | ?{$_.eventid -eq 1074} | select -first 1 

switch -regex ($systemstateentry.message) 
    { 
     ".*restart.*" {"restart"} 
     ".*power off.*" {"power off"} 
     default {"unknown"} 
    } 
+0

고마워요,이 또한 사실입니다 창문? 어떻게 시작되었는지에 관계없이 종료 또는 재부팅을 인식하고 싶습니다. – Erik

+0

내 이전 대답에 추가 : 불행히도이 값은 내 Windows 7 시스템에 존재하지 않으며 시스템 종료 중에도 나타나지 않습니다. 종료/재부팅 중에 해당 값을 확인하는 약간의 VB 스크립트 검사를 작성했지만 레지스트리 가치는 단순히 존재하지 않는다. 이 값이 Win7 컴퓨터에 있는지 확인할 수 있습니까? Win7에서이 정보는 여전히 사실입니까? – Erik

+0

Windows Vista/7에 대한 답변이 업데이트되었습니다. –

1

이 bash는 코드는 시스템이 재부팅 할 것인지를 결정하기 위하여 wevtutil.exe 유틸리티를 사용합니다. 배치 스크립트로의 마이그레이션은 어렵지 않습니다. 영어가 아닌 Windows의 경우 restart을 이벤트 로그에 등록 된 해당 용어로 바꿉니다. This blog post에서 문제를 자세히 설명합니다. 종료 또는 재부팅이 cmd-에서 "Shutdown.exe를 -s"를 프로그래밍 방식으로 수행, 또는 커맨드를 통해, 당신은 "Shutdown.exe를 -r"을 실행하면 같은 또는 경우

query='*[System[(EventID=1074) and TimeCreated[timediff(@SystemTime) <= 60000]]]' 
current_shutdown=$(wevtutil qe system -c:1 -rd:true -f:xml -q:"$query") 
rebooting=$(grep -iE "<data[^<>]*>restart</data>" <<<"$current_shutdown") 

if [[ -n "$rebooting" ]]; then echo 'System is rebooting' 
elif [[ -n "$current_shutdown" ]]; then echo 'System is shutting down' 
else echo 'System is neither rebooting nor shutting down'; fi 
관련 문제