Показать полную графическую версию : [решено] Автоматическое выполнение команды (schtasks)
Собственно имеется Windows Embedded Standard 7 Evaluation Edition, в свою очередь майкрософт бесплатно раздаёт ключи для "пробы" на 180 дней. Суть задачи такова, автоматизировать выполнение команды slmgr –rearm с интеграцией в дистрибутив. К примеру, прошло 179 дней после установки ОС и выполняется данная команда, и потом опять через 179 дней.. можно непрерывно... (вообще всего 5 раз можно). Думаю понятно зачем... установить легально ось, и использовать 2,5 года бесплатно не заморачиваясь :) Подскажите, как это проще осуществить? На ум приходит планировщик заданий, написание мини-программки, создание службы... Но хочется получить совет, и в идеале рабочий пример. Заранее благодарен за любую помощь в этом вопросе.
выполняется данная команда, и потом опять через 179 дней.. можно непрерывно... ( »
Планировщик - ваш лучший друг. В триггерах поставьте "Ежедневно" и кол-во дней.
См. также Управление назначенными заданиями средствами командной строки (Schtasks) (http://www.oszone.net/12653/Schtasks)
Спасибо... разобрался с планировщиком.. Осталось 2 вопроса, как сделать так, чтобы дата старта задачи была - дата установки ос? И каким образом в в дистрибутив будет проще импортировать задачу?
Осталось 2 вопроса, как сделать так, чтобы дата старта задачи была - дата установки ос? »
По-моему, это просто не нужно, т.к. после создания задачи при установке системы дата создания и так будет текущей :) Если вас это не устраивает, задайте вопрос в Скриптовые языки администрирования Windows (http://forum.oszone.net/forum-102.html). Нужен скрипт, определяющий текущую дату и подставляющий ее в команду Schtasks.
И каким образом в в дистрибутив будет проще импортировать задачу? »
Сравнительная таблица тут http://oszone.net/8594 Выбирайте из SetupComplete.cmd (http://oszone.net/8604) и FirstLogonCommands (http://oszone.net/8609)
Спасибо за подсказки... Вроде получилось.. но все равно есть косяки... Вообщем команда:
%WINDIR%\system32\Schtasks.exe /Create /RU "NT AUTHORITY\SYSTEM" /RL Highest /TN TASK /SC "DAILY" /MO "179" /TR "%WINDIR%\system32\slmgr.vbs -rearm"
Событие создается, но выполняется только если компьютер запущен в то время, которое указывается при создании события. При создании через интерфейс "Планировщика заданий" этот вопрос решается установкой галочки в параметрах события на "Немедленно запускать задачу, если пропущен плановый запуск", но как включить данный параметр через командную строку? Или может это все можно сделать по-другому?
Попробовал сделать "событийно-управляемую" задачу:
%WINDIR%\system32\Schtasks.exe /Create /TN TASK /TR "%WINDIR%\system32\slmgr.vbs -rearm" /SC ONEVENT /EC Application /MO *[System/EventID=4103] /RL Highest
Основываясь на событии, которое создается при окончании тестового периода, задание создается, но при появлении события - реакции ноль :(
Подскажите, где мой косяк?
этот вопрос решается установкой галочки в параметрах события на "Немедленно запускать задачу, если пропущен плановый запуск", но как включить данный параметр через командную строку? »
Экспортировать задание в XML, потом Импорт задания (http://technet.microsoft.com/ru-ru/library/cc722156.aspx).
Хотелось бы конечно в идеале чисто командой :(
По поводу этого варианта так же думал, но если экспортировать задание в XML, то дата старта (от которого будет высчитываться 179 дней) будет же та, которую сделаю при создании этого файла... (экспорте)
Неужели ни у кого нету идей, насчет того как решить данную задачу не "ручным" методом? :(
Morpheus
05-10-2010, 03:44
Конкретизирую задачу, т.к. мне тема планировщика тоже интересна :)
Необходимо создать XML с текстом:
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2010-10-05T03:04:20.5546931</Date>
</RegistrationInfo>
<Triggers>
<CalendarTrigger>
<StartBoundary>2010-10-05T03:03:30.0158025</StartBoundary>
<Enabled>true</Enabled>
<ScheduleByDay>
<DaysInterval>179</DaysInterval>
</ScheduleByDay>
</CalendarTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<LogonType>InteractiveToken</LogonType>
<RunLevel>HighestAvailable</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>false</AllowHardTerminate>
<StartWhenAvailable>true</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>%WINDIR%\system32\slmgr.vbs</Command>
<Arguments>-rearm</Arguments>
</Exec>
</Actions>
</Task>
В котором вместо выделенного куска выводилась бы текущая дата (время не важно, наверное) + 179 дней.
VBS-вариант для актуализации выделенного куска XML-файла:
strFile = "TASK.XML"
Set objFormat = CreateObject("VBScript.RegExp")
objFormat.Pattern = "(\D)(?=\d\D)"
objFormat.Global = True
Set objStartB = CreateObject("VBScript.RegExp")
objStartB.Pattern = "(<StartBoundary>).*?(</StartBoundary>)"
objStartB.IgnoreCase = True
objStartB.Global = True
Set FSO = CreateObject("Scripting.FileSystemObject")
Set oF = FSO.OpenTextFile(strFile,1)
sF = oF.ReadAll
oF.Close
DN = DateAdd("d",179,Now())
DT = Year(DN) &"-"& Month(DN) &"-"& Day(DN) &"T"& Hour(DN) &":"& Minute(DN) &":"& Second(DN) &".0000000"
sF = objStartB.Replace(sF, "$1"& objFormat.Replace(DT,"$10") &"$2")
Set oF = FSO.OpenTextFile(strFile, 2)
oF.Write(sF)
oF.Close
Morpheus
05-10-2010, 22:56
amel27, отлично! Спасибо!
Спасибо.. Как я понял, создаём файл *.vbs , туда данный код, указываем в коде путь к XML, при запуске файла берется текущая системная дата, ну а следующей командой делаем стандартный импорт задачи из XML ? Я верно понял?
Morpheus
06-10-2010, 00:02
Как я понял, создаём файл *.vbs , туда данный код, »
Да.
указываем в коде путь к XML »
Если TASK.XML лежит в этой же папке, то не надо.
при запуске файла берется текущая системная дата »
+179 дней и вставляется в XML.
ну а следующей командой делаем стандартный импорт задачи из XML »
Правильно.
Теперь надо это оттестировать при автоустановке :)
Ага.. Спасибо... Ну на недельке, как время появится на виртуальной машине потестирую... и отпишусь о результатах :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.