![]() |
Как проверить что выполняется выключение компьютера а не перезагрузка ?
Редактор локальной групповой политики gpedit.msc
Конфигурация компьютера - Конфигурация Windows - Сценарии - Завершение работы Мне надо перед выключением компьютера выполнить скрипт, как в скрипте определить что комп выключается а не перегружается ? |
Как вариант Журнал событий "System-User32" Код события: 1074, Тип выключения: Выключение компьютера
Как в скрипте прочитать последнею запись из журнала и при сравнении Кода и Типа запустить скрипт ? |
wevtutil qe system /c:1 /rd:true /q:"*[System[EventID=1074]]"
|
Оно и на перезагрузку тоже работает, мне надо только на выключение.
Я сделал так: strComputer = "." Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colLoggedEvents = objWMIService.ExecQuery _ ("Select * from Win32_NTLogEvent Where Logfile = 'System' and SourceName='User32'" _ & "and (EventCode = '1074' or EventCode = '1076')") For Each objEvent in colLoggedEvents If InStr(objEvent.Message, "Тип выключения: Выключение питания") > 0 Then ' Тут формируется имя файла, я копипастить не стал NameFile = "Arc" Set WshShell = CreateObject("Wscript.Shell") WshShell.Run("c:\Progra~1\7-Zip\7z.exe a -mx7 -r0 -x!*.cdx D:\Archiv\DB_" & NameFile & ".7z d:\1C\DB", 1, True) End If Exit For Next Помогите избавиться от For, в запросе если делаю TOP 1 или Select 1, начинает ругаться на For, как сделать выборку из запроса на одну запись ? |
Замените For на
Код:
Select Case testexpression |
Цитата:
|
|
|
Цитата:
|
Цитата:
Вот 1с запрос, нужно тоже самое только в скрипте: Запрос = Новый Запрос ("ВЫБРАТЬ ПЕРВЫЕ 1 | Message |ИЗ | ЖурналСобытий |ГДЕ | Logfile = "System" | И SourceName = "User32" | И (EventCode = 1074 ИЛИ EventCode = 1076)"; Выборка = Запрос.Выполнить(); Если Выборка.Следующий() Тогда Если Найти(Выборка.Message, "Выключение компьютера") > 0 Тогда //Тут запускаю архивацию КонецЕсли; КонецЕсли; |
Можно счетчиком будет брать только до i=1 сообщения в журнале начиная с самого последнего события
Цитата:
Код:
strComputer = "." |
Это неправильно...
Вот так можно сделать ? Set colLoggedEvents = objWMIService.ExecQuery("Select TOP 1 Message from Win32_NTLogEvent Where Logfile = 'System' and SourceName='User32' and (EventCode = '1074' or EventCode = '1076')") Или Set colLoggedEvents = objWMIService.ExecQuery("Select 1 Message from Win32_NTLogEvent Where Logfile = 'System' and SourceName='User32' and (EventCode = '1074' or EventCode = '1076')") Вот так можно? Он тут выберет только одну запись, как ее потом можно получить без FOR. т.е. как сделать МояЗапись = colLoggedEvents.Выбрать(); или МояЗапись = colLoggedEvents.Прочитать(); |
Цитата:
В таком случае Ваш вариант с использованием оператора Exit For полностью решает эту задачу. Loran_rus, Реаниматор, не тратьте время попусту. В данном случае нет способа получить ссылку только на один экземпляр коллекции. Можно лишь при переборе "отсеивать" ненужные экземпляры по тому или иному признаку. |
Время: 23:15. |
Время: 23:15.
© OSzone.net 2001-