每晚重新启动 Windows 域中所有计算机的好方法

ste*_*red 9 windows-server-2008 active-directory

在 Windows 域上重新启动 Windows 计算机列表的好方法是什么?假设 windows 域控制器没有执行此操作的服务,请为脚本提出建议。

我可以列出主机名并遍历主机名以向每个主机名发送重启命令吗?我可以在脚本运行时从 Windows 2008 机器中运行的 DHCP 服务器获取主机名列表吗?

我从最喜欢到最不喜欢的脚本语言是:PHP、javascript、Bash、Python(知之甚少)、VB(知道但不喜欢)

sys*_*138 15

如果 GPO 不是你的东西,并且你想使用 Mark Henderson 的第二个选项(批处理shutdown /m),你可以通过批处理关闭来使你的工作更容易,这样它就会并行而不是串行地完成它们。它需要管理站部分的 PowerShell,但它非常漂亮

foreach ($ComputerName in $ComputerList) {
    invoke-command -AsJob -ScriptBlock {
        params($ComputerName)
        shutdown /m $ComputerName /r /f /t 0
    } -ArgumentList $ComputerName
}
Run Code Online (Sandbox Code Playgroud)

该片段的作用是生成与$ComputerList 中的机器数量一样多的并行执行的后台作业。这可以使关闭 All The Things 的速度更快。

  • 这是一个有趣的解决方案——如果你有很多计算机要重启,我强烈推荐这个解决方案,因为它会并行运行关闭命令。 (2认同)
  • `-AsJob` 是这里的神奇之处。 (2认同)

MDM*_*rra 7

您可以使用组策略首选项通过创建一个新的计划任务来做到这一点,该任务将在每晚的特定时间运行。该任务的命令应该是shutdown /r /t 0. 然后,您可以将该 GPO 链接到其中包含您的计算机的一个或多个 OU。

您可能希望使用设置在 10-15 分钟之间的“以随机间隔运行此程序”选项。如果您不小心,让每台计算机同时启动可能对您的断路器不利。您可能还想选中仅在计算机闲置 x 小时时才运行任务的选项,以防有人通宵达旦。您不想通过重新启动试图在最后期限内完成的人来扼杀一整晚的工作。


Mar*_*son 6

两种选择:

  1. 通过运行的 GPO 创建计划任务shutdown /r /f /t 0shutdown /g /f /t 0在要重新启动的每台计算机上创建计划任务。(查看shutdown /?更多详细信息。

  2. 创建一个shutdown /m [computer name] /r /f /t 0从中央计算机(可能是域控制器?)运行的批处理。为要重新启动的每台计算机循环它(更改[computer name])。这意味着如果计算机由于任何原因无法访问,则不会重新启动,并且需要从有权重新启动计算机的帐户运行。

您应该能够编写一个批处理文件,循环遍历从活动目录中提取的计算机列表并运行该命令,但是我今天没有时间编写一个(即使我不愿意测试它我确实写了它,否则我会因为在一天中间重新启动每个人的计算机而被烤死)。