我有一个 Microsoft 域(主要是 2008r2\7)。
我正在寻找一种方法,在加入域后(重启后)立即运行脚本(无需用户登录),但到目前为止我失败了。
另外,我希望它只运行一次,因此安排重复任务不是一个选择。
让它一遍又一遍地运行对我来说似乎是一种浪费。
我尝试过带有启动脚本的 GPO,但计算机在启动后才收到 GPO。
我还尝试过带有计划任务的 GPO(具有不同的触发器),但它们也不起作用:
“启动时”触发器与启动脚本一样失败。
“创建任务时”失败,我猜是因为它不是以通常的方式创建的。
“按计划”无关紧要,因为我需要它在加入后立即运行(设置已经过去的日期不起作用)。
找不到任何相关的注册表项,但我认为它们会遇到与 GPO 启动脚本相同的问题。
唯一可能满足我需求的想法是将任务附加到 DC 上的相关事件,然后远程运行该脚本。
还有更好的建议吗?
--编辑--
根据答案(很棒,但还不够准确),我有几点要补充:
1. 这个问题适用于两台服务器(2008r2\2012\2012r2),但我只在 2012r2 上进行了测试。2
. 我正在寻找一种更像一次运行的解决方案,这意味着我不希望它无休止地运行,直到满足某些条件。3
. 我们使用映像来部署服务器和工作站,但我不能使用涉及编辑它们的解决方案,因为 a) 那需要我在每次需要更改脚本中的某些内容时更新它们 b) BYOD。4.
我们不使用连接脚本(我们根本不需要......),所以开始使用它对我来说似乎是一种浪费。此外,它还存在一些问题(例如,我应该把它放在哪里?在图像中?在共享位置?BYOD 怎么办?那会违背第 3 点)。
谢谢。
答案1
向您的构建映像添加自定义注册表项,只需在某处添加一个简单的“1”值。向
构建映像添加检查注册表项值的计划任务,在此注册表项中添加对您的域名的检查
HKLM\System\CurrentControlSet\Services\Tcpip\参数
如果发现两者都运行您的脚本,则在完成时将自定义注册表项更改为 0。让此任务在启动时运行。
然后,您可以保留此任务,也可以使用 gpo 删除计划任务。但是,如果您保留它并且需要重新运行脚本,您只需将注册表项改回 1 并重新启动即可。
稍微有点安全问题是计划任务需要以本地管理员帐户运行。
答案2
加入域后您难道不需要重新启动吗?如果您创建了启动脚本,它将在重新启动后立即应用,并在加载其他组策略对象时应用。
您现在如何加入域?您还可以将加入域集成到脚本中。使用 Powershell,可以使用 Add-Computer 完成此操作,从命令行您可以使用 netdom。
如果您使用配置管理工具,通常您会将其集成到您的任务序列中。
答案3
连接是如何执行的?手动 GUI 交互还是通过脚本?如果是脚本,请在连接脚本中添加一行,以便通过 RunOnce 注册表项运行第二个脚本。
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce https://msdn.microsoft.com/en-us/library/windows/desktop/aa376977%28v=vs.85%29.aspx
---开始编辑---
哦!对了
考虑到您对 GPO 应用延迟的评论...我主要在执行同步 GPO 处理的服务器操作系统上工作。工作站执行异步操作。尝试以下操作以获得异步:
在构建过程/图像中尝试禁用“快速登录优化”
https://technet.microsoft.com/en-us/magazine/gg486839.aspx
计算机配置\管理模板\系统\登录
在计算机启动和登录时始终等待网络 = 已启用
创建 GPO 启动脚本 GPO:
计算机配置/策略/Windows 设置/脚本/启动
在您定义的脚本中,使用以下代码:
$built = gwmi Win32_OperatingSystem | foreach {[System.Management.ManagementDateTimeconverter]::ToDateTime($_.InstallDate)}
if ($built -gt (get-date).addHours(-4)) {
"do something"
}
答案4
我曾经在学校工作。
我们自动化了连接和脚本编写过程(拥有一个可以持续数年的完美部署映像可能是不切实际的)。因此我们使用 WDS/MDT 进行部署。
我们填写了 .xml 应答文件,因此我们部署的多播图像加入到 OU(组织单位)安装中,并且我们应用 GPO 进行最终脚本编写并移出 OU 安装。
这样,我们只需要用正确的名称重命名工作站,并将其放置在正确的 OU 中。