2012-05-21 20 views
5

Tôi sử dụng Trình chỉnh sửa chính sách nhóm là một phần của Windows 7 (cũng của Windows XP) để chạy một kịch bản tắt máy, sẽ tự động được thực hiện mỗi khi hệ thống bị tắt hoặc khởi động lại. Vấn đề của tôi là: Tôi cần phải biết trong kịch bản của tôi nếu người dùng đã chọn để tắt hệ thống, hoặc nếu anh ta đã chọn khởi động lại để thay thế. Cả hai hành động sẽ làm cho Windows chạy kịch bản tắt máy, nhưng làm thế nào tôi có thể xác định trong suốt quá trình thực thi tập lệnh mà hành động đã thực sự được thực hiện?Trong kịch bản Windows 7, làm thế nào tôi có thể xác định nếu tắt hệ thống hiện tại thực sự là khởi động lại?

Có cách nào để biết, trong khi tắt máy, nếu hệ thống hiện đang thực hiện tắt hoặc khởi động lại?

Trả lời

8

On hệ thống pre-vista bạn có thể truy vấn các Registry:

Các Shutdown Setting DWORD tìm thấy dưới HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer lưu trữ các thiết lập được lựa chọn gần đây nhất từ ​​danh sách trên Shut Down hộp thoại Windows cho người dùng hiện tại.

On hơn hệ thống gần đây, bạn có thể truy vấn các Hệ thống Eventlog trong kịch bản tắt máy của bạn, như thế này:

$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

Cảm ơn rất nhiều, điều này cũng đúng nếu tắt hoặc khởi động lại được lập trình, hoặc thông qua dòng lệnh, như khi bạn chạy "shutdown.exe -r" hoặc "shutdown.exe -s" từ cmd- Cửa sổ? Tôi thực sự muốn nhận ra tắt máy hoặc khởi động lại, bất kể nó được bắt đầu như thế nào. – Erik

+0

Ngoài câu trả lời trước của tôi: không may, giá trị này không tồn tại trên bất kỳ hệ thống Windows 7 nào của tôi, và nó cũng không có trong khi tắt máy, tôi đã viết một VB Script nhỏ để kiểm tra giá trị đó trong khi tắt/khởi động lại, nhưng đăng ký giá trị đơn giản là không có mặt. Bạn có thể kiểm tra xem giá trị này có xuất hiện trên máy Win7 của bạn không? Thông tin này có đúng với Win7 không? – Erik

+0

Cập nhật câu trả lời cho Windows Vista/7 –

1

đang bash này sử dụng các tiện ích wevtutil.exe để xác định xem hệ thống được khởi động lại. Việc di chuyển sang tập lệnh theo lô sẽ không khó. Đối với Windows không phải tiếng Anh, hãy thay thế restart bằng cụm từ tương đương đã đăng ký trong nhật ký sự kiện. This blog post bao gồm vấn đề với nhiều chi tiết hơn.

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 
Các vấn đề liên quan