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

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

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

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

3 ответа3

1

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

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

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

1

Проверено на 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>
0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .