【问题标题】:Creating scheduled task in remote servers using powershell with varying starttime使用具有不同开始时间的 powershell 在远程服务器中创建计划任务
【发布时间】:2020-05-19 20:27:24
【问题描述】:
我正在尝试在具有不同启动时间的多个远程服务器中创建简单的重启任务。这是powershell脚本:
$computers = gc "c:\servers.txt"
foreach ($computer in $computers)
{
icm $computer {SchTasks /Create /SC WEEKLY /D TUE /TN “Reboot Task” /TR “shutdown /r /t 0” /ST 15:00 /RU "SYSTEM"}
}
对于每台计算机,我希望有不同的重启时间。每次循环运行时,它可以只增加 5 分钟。所以第一台服务器是 15:00,第二台服务器是 15:05,依此类推。
怎么可能?
【问题讨论】:
标签:
powershell
windows-task-scheduler
【解决方案1】:
$computers = Get-Content "c:\servers.txt"
$timeStart = New-TimeSpan -Hours 15 -Minutes 0
$timeToAdd = New-TimeSpan -Hours 0 -Minutes 5
$sb = {
param($st)
if ( SchTasks /Query /TN "Reboot Task" 2>$NULL ) {
Write-Host SchTasks /Delete /TN "Reboot Task" /F
}
Write-Host SchTasks /Create /SC WEEKLY /D TUE /TN "Reboot Task" /TR "shutdown /r /t 0" /ST $st /RU "SYSTEM"
}
foreach ( $computer in $computers ) {
$timeSTime = $timeStart.ToString( 'hh":"mm')
$timeStart = $timeStart.Add( $timeToAdd)
Invoke-Command -ComputerName $computer -ScriptBlock $sb -ArgumentList $timeSTime
}
在上面的代码中sn -p:
- 使用
[System.TimeSpan] 对象轻松更新开始时间(也适用于午夜),并且
- 更新的开始时间作为参数传递给脚本块(参见this answer),并且
- 在脚本块中添加了一个基本测试(如果已存在则删除任务)以正确服务(假设)之前的尝试,并且
-
schtasks 命令仅用于调试。