我正在构建一个系统来重新启动计算机以进行修补。大多数骨架都在那里工作,我使用工作流程和一些功能来允许我捕获错误并在发生故障时以多种方式重启系统。
我不确定的一件事是如何设置时间。我正在开发一个Web界面,人们可以在其中安排重新启动,无论是动态(一次)还是定期(每月)。引导的服务器信息和时间存储在SQL数据库中。
我缺少的部分是如何在计划时触发重启。我能想到的是允许整个小时的增量,并运行脚本每小时检查以查看数据库中的任何服务器是否具有“匹配”当前时间的重新启动时间。这可能会奏效,但有点不灵活。
有人能想到更好的方法吗?某种守护进程?
例如,用户X分配了300台服务器。他希望每周五晚上10点重启200次,周六晚上11点每月50次重启。将有十几个用户重启3000-4000台计算机,有时每月多次。
答案 0 :(得分:0)
好吧,让我们假设您有一个脚本,它将日期和时间作为参数,根据特定的日期和时间,日程安排,或者您的任何内容来查找要重启的计算机&# 39;重新存储在你的sql db中,它指定重启事件的频率。为了让我不太了解sql,我们假装这是有用的(需要PowerShell社区扩展snapin for Invoke-AdoCommand cmdlet):
[cmdletbinding()]
Param([string]$RebootTime)
$ConStr = 'Data Source=SQLSrv01;Database=RebootTracking;Integrated Security=true;'
$Query = "Select * from Table1 Where Schedule = $RebootTime"
$Data = Invoke-AdoCommand -ProviderName SqlClient -ConnectionString $ConStr -CommandText $Query
$data | ForEach{Do things to shutdown $_.ServerName}
你说你已经设置了重启服务器的东西,所以我甚至没有尝试过。然后,您需要做的就是在任何服务器应该重新启动时设置一个预定的工作:
Register-ScheduledJob –FilePath \\Srv01\Scripts\RebootServers.ps1 –Trigger @{Frequency=Weekly; At="10:00PM"; DaysOfWeek="Saturday"; Interval=4} -ArgumentList @{'RebootTime'="Day=Saturday;Weeks=4;Time=22:00"}
这是一个例子,但是你知道,你可能会用它来完成你的需求。这将每4个星期六(约每月)运行一次。那个计划任务将查询sql server以将字符串与字段匹配,实际上你可以按照你想要的任何方式格式化匹配所需的特定或一般。这样一个任务可以重新启动那200个服务器,另一个任务可以重新启动其他50个服务器,这完全取决于用户的需求。