我在虚拟机中安装了 6 个版本的 Windows 来测试软件。Windows 虚拟机是独立的,不属于域。它们涵盖 Windows XP 到 Windows 10。测试的软件在测试期间会产生大约 1.75 GB 到 2 GB 的输出工件(目标文件、程序数据库文件、库和可执行文件)。
我想执行一个清除工件的注销脚本。该脚本非常简单,因为它只需要删除某个目录中的 3 个文件夹(如果存在)。我已经有脚本了。
我发现 KB 就像分配计算机关机脚本以及 MSDN 讨论同步运行注销脚本 - 独立工作站,但他们假设 Windows 计算机是成员工作站并且是域的一部分。
如何将注销脚本添加到独立/非会员工作站以在注销期间清理构建工件?
答案1
根据测试完成后系统实际发生的情况,默认Windows 任务计划程序。如果用户注销,则会发生事件。如果您有特定用户,您甚至可以将其与他匹配,并且通过相应地设计脚本,您可能可以检测到注销。或者,您可以将自定义事件写入事件日志并监视它。我不确定是否On disconnect from user session
会在本地注销时触发。
否则,Big Chris 的建议/对您问题的评论(您可能能够使用本地组策略)将适用。您可能会在 Windows XP 中遇到此问题,因为 XP 有很大不同,但这可能适用于每个解决方案。
正确/最佳方法可能是将执行清理的脚本作为测试的最后阶段。毕竟,这将确保测试完成,并且根据您实际进行测试的方式(运行测试的自动构建系统?),您甚至可以将其设置为附加步骤。
答案2
已在 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>
答案3
使用本地组策略分配注销脚本。
一些研究很快发现了使用任务计划程序等不容易的各种原因,而推荐的方法是组策略。