2012-05-21 28 views
5

Windows 7'nin bir parçası olan (Windows XP'nin de olduğu) Grup İlkesi Düzenleyicisi'ni kullanarak, sistem her kapatıldığında veya yeniden başlatıldığında otomatik olarak yürütülecek bir kapatma komut dosyasını çalıştırıyorum. Benim sorunum: Kullanıcı sistemi kapatmayı seçtiyse ya da bunun yerine yeniden başlatmayı seçtiyse komutumda bilmem gerek. Her iki eylem de Windows'u kapatma komut dosyasını çalıştırır, ancak bu komut yürütme sırasında hangi eylemin gerçekten gerçekleştirildiğini nasıl belirleyebilirim?Windows 7 komut dosyasında, geçerli sistem kapatma işleminin gerçekten yeniden başlatılıp başlatılmayacağını nasıl belirleyebilirim?

Sistem şu anda kapatma veya yeniden başlatma gerçekleştirirse, kapatma sırasında bilmenin bir yolu var mı? Eğer Registry sorgulayabiliröncesi vista sistemlerinde

cevap

8

:

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer mağazalarında geçerli kullanıcı için Windows'u Kapat iletişim kutusunda listeden en son seçilen ayarların altında bulunan Shutdown Setting DWORD. daha yeni sistemlerde günü

, böyle, senin kapatma komut Sistemi Olay günlüğü sorgulayabilir:

$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

Çok teşekkürler, bu da doğrudur Pencere? Nasıl başlatıldığına bakılmaksızın kapatma veya yeniden başlatma işlemlerini gerçekten bilmek isterim. – Erik

+0

Önceki cevabımın eki: ne yazık ki, bu değer benim Windows 7 sistemlerinden herhangi birinde mevcut değil ve ayrıca kapatma sırasında da mevcut değil, kapatma/yeniden başlatma sırasında bu değeri kontrol eden küçük bir VB Script yazdım, ancak kayıt değer sadece mevcut değildir. Win7 makinenizde bu değerin olup olmadığını kontrol edebilir misiniz? Bu bilgi Win7 için hala geçerli mi? – Erik

+0

Windows Vista/7 için yanıt güncellendi –

1

Bu bash kod sistemi yeniden belirlemek için wevtutil.exe programı kullanır. Toplu betiğe geçiş zor olmamalıdır. İngilizce olmayan Windows için, restart'u, olay günlüğüne kaydedilen eşdeğer bir terimle değiştirin. This blog post, sorunu daha fazla ayrıntıyla ele alır. kapatma veya yeniden başlatma cmd den "shutdown.exe -s" programlama yoluyla yapılabilir veya komut yoluyla, siz "shutdown.exe -r" çalıştırırsanız gibi veya eğer

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