Добавить сценарий выхода из системы для автономной рабочей станции?

У меня есть 6 версий Windows в виртуальных машинах для тестирования программного обеспечения. Виртуальные машины Windows автономны и не являются частью домена. Они охватывают Windows XP и Windows 10. Тестируемое программное обеспечение выдает от 1,75 до 2 ГБ выходных артефактов во время тестирования (объектные файлы, файлы базы данных программ, библиотеки и исполняемые файлы).

Я хочу выполнить сценарий выхода из системы, который очищает артефакты. Сценарий довольно прост, поскольку ему нужно только удалить 3 папки в определенном каталоге, если он существует. У меня уже есть сценарий.

Я обнаружил, что КБ, такие как Назначить сценарии выключения компьютера и обсуждения MSDN, такие как Запуск сценариев выхода из системы синхронно - Автономная рабочая станция, но они предполагают, что компьютер Windows является рабочей станцией-участником и частью домена.

Как добавить сценарий выхода из системы на автономной рабочей станции / рабочей станции, не являющейся участником, для очистки артефактов сборки во время выхода из системы?

3 ответа

В зависимости от того, что на самом деле происходит в системе после тестирования стандартного планировщика задач Windows. Если пользователь выходит из системы, происходит событие. Если у вас есть конкретный пользователь, вы можете даже сопоставить его с ним, и, соответственно, разработав свой сценарий, вы можете обнаружить выход из системы. В качестве альтернативы вы можете записать пользовательское событие в журнал событий и наблюдать за ним. Я не уверен, если On disconnect from user session будет срабатывать при локальном выходе из системы.

В противном случае было бы применимо предложение от Big Chris/ комментарий к вашему вопросу о том, что вы могли бы использовать политику локальной группы. Вы можете столкнуться с проблемами в Windows XP, так как XP сильно отличается, но это, вероятно, применимо для каждого решения.

Правильный / оптимальный способ, вероятно, заключался бы в том, чтобы сценарий, выполняющий очистку, был последним этапом вашего тестирования. После всего этого можно будет убедиться, что тестирование выполнено, и в зависимости от того, как вы на самом деле выполняете тесты (система автоматической сборки, которая запускает тесты?), Вы можете даже настроить его как дополнительный шаг.

Проверено на Win 7 HP 32,64 - Win 7 Ent 32,64

Если вы запускаете тесты, то это означает, что вы повторно входите в систему, когда начинается следующий этап тестирования. Поэтому просто назначьте через TASK SCHEDULER триггер LOGON для запуска сценария во время LOGON и назначьте его как пользователя SYSTEM, чтобы он работал в фоновом режиме. Просто сохраните приведенный ниже пример TASK как файл XML и отредактируйте исходный код:

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.3" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2016-08-17T08:16:28.8123508</Date>
   ! <Author>DOMAIN\USER</Author>
   ! <Description>Your description</Description>
  </RegistrationInfo>
  <Triggers>
    <LogonTrigger>
      <Enabled>true</Enabled>
    </LogonTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
   !   <UserId>S-1-5-18</UserId> -> This is SYSTEM user ID
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>StopExisting</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
    <UseUnifiedSchedulingEngine>false</UseUnifiedSchedulingEngine>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>P3D</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
    !  <Command>C:\cleanup.bat</Command> This is where your script resides
    </Exec>
  </Actions>
</Task>

Используйте локальную групповую политику для назначения сценария выхода из системы.

Некоторые исследования быстро находят различные причины, по которым, например, использовать планировщик задач непросто, а рекомендуемый метод - групповая политика.

Другие вопросы по тегам