Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Автоматическое выполнение команды (schtasks) (http://forum.oszone.net/showthread.php?t=186805)

Neosev 29-09-2010 01:55 1506942

Автоматическое выполнение команды (schtasks)
 
Собственно имеется Windows Embedded Standard 7 Evaluation Edition, в свою очередь майкрософт бесплатно раздаёт ключи для "пробы" на 180 дней. Суть задачи такова, автоматизировать выполнение команды slmgr –rearm с интеграцией в дистрибутив. К примеру, прошло 179 дней после установки ОС и выполняется данная команда, и потом опять через 179 дней.. можно непрерывно... (вообще всего 5 раз можно). Думаю понятно зачем... установить легально ось, и использовать 2,5 года бесплатно не заморачиваясь :) Подскажите, как это проще осуществить? На ум приходит планировщик заданий, написание мини-программки, создание службы... Но хочется получить совет, и в идеале рабочий пример. Заранее благодарен за любую помощь в этом вопросе.

Vadikan 29-09-2010 02:31 1506965

Цитата:

Цитата Neosev
выполняется данная команда, и потом опять через 179 дней.. можно непрерывно... ( »

Планировщик - ваш лучший друг. В триггерах поставьте "Ежедневно" и кол-во дней.
См. также Управление назначенными заданиями средствами командной строки (Schtasks)

Neosev 29-09-2010 03:03 1506977

Спасибо... разобрался с планировщиком.. Осталось 2 вопроса, как сделать так, чтобы дата старта задачи была - дата установки ос? И каким образом в в дистрибутив будет проще импортировать задачу?

Vadikan 02-10-2010 20:12 1509833

Цитата:

Цитата Neosev
Осталось 2 вопроса, как сделать так, чтобы дата старта задачи была - дата установки ос? »

По-моему, это просто не нужно, т.к. после создания задачи при установке системы дата создания и так будет текущей :) Если вас это не устраивает, задайте вопрос в Скриптовые языки администрирования Windows. Нужен скрипт, определяющий текущую дату и подставляющий ее в команду Schtasks.

Цитата:

Цитата Neosev
И каким образом в в дистрибутив будет проще импортировать задачу? »

Сравнительная таблица тут http://oszone.net/8594 Выбирайте из SetupComplete.cmd и FirstLogonCommands

Neosev 03-10-2010 23:46 1510726

Спасибо за подсказки... Вроде получилось.. но все равно есть косяки... Вообщем команда:
Код:

%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
Основываясь на событии, которое создается при окончании тестового периода, задание создается, но при появлении события - реакции ноль :(
Подскажите, где мой косяк?

Vadikan 04-10-2010 00:20 1510747

Цитата:

Цитата Neosev
этот вопрос решается установкой галочки в параметрах события на "Немедленно запускать задачу, если пропущен плановый запуск", но как включить данный параметр через командную строку? »

Экспортировать задание в XML, потом Импорт задания.

Neosev 04-10-2010 00:36 1510759

Хотелось бы конечно в идеале чисто командой :(
По поводу этого варианта так же думал, но если экспортировать задание в XML, то дата старта (от которого будет высчитываться 179 дней) будет же та, которую сделаю при создании этого файла... (экспорте)

Neosev 04-10-2010 23:38 1511514

Неужели ни у кого нету идей, насчет того как решить данную задачу не "ручным" методом? :(

Morpheus 05-10-2010 03:44 1511612

Конкретизирую задачу, т.к. мне тема планировщика тоже интересна :)
Необходимо создать 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 дней.

amel27 05-10-2010 12:54 1511826

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 1512327

amel27, отлично! Спасибо!

Neosev 05-10-2010 23:57 1512374

Спасибо.. Как я понял, создаём файл *.vbs , туда данный код, указываем в коде путь к XML, при запуске файла берется текущая системная дата, ну а следующей командой делаем стандартный импорт задачи из XML ? Я верно понял?

Morpheus 06-10-2010 00:02 1512379

Цитата:

Цитата Neosev
Как я понял, создаём файл *.vbs , туда данный код, »

Да.
Цитата:

Цитата Neosev
указываем в коде путь к XML »

Если TASK.XML лежит в этой же папке, то не надо.
Цитата:

Цитата Neosev
при запуске файла берется текущая системная дата »

+179 дней и вставляется в XML.
Цитата:

Цитата Neosev
ну а следующей командой делаем стандартный импорт задачи из XML »

Правильно.

Теперь надо это оттестировать при автоустановке :)

Neosev 06-10-2010 00:57 1512415

Ага.. Спасибо... Ну на недельке, как время появится на виртуальной машине потестирую... и отпишусь о результатах :)


Время: 07:10.

Время: 07:10.
© OSzone.net 2001-