在远程计算机上使用PowerShell脚本设置计划任务

时间:2019-01-08 19:29:28

标签: powershell scheduled-tasks remote-desktop

我正在尝试创建Powershell脚本(PS的新手)来设置时间表 任务条目,以运行bat文件。

入口点:从AD中的安全组读取计算机名称,然后将计算机列表导出到.csv文件。

要处理什么?运行已复制到远程计算机C:\ tmp \ file.bat

的.bat文件。

有什么要求:我相信可以设置作业,但是如果作业在远程计算机上已经存在,则无法处理错误/捕获。如果有人帮助我,我将不胜感激。谢谢您的宝贵时间!

Function set-TaskSchedule {
  $RPCs = Get-Content ".\List.csv"
  foreach ($item in $RPCs) {
    Invoke-Command -ComputerName $item {Register-ScheduledJob -Name DumpLogs -ScriptBlock {Start-Process C:\tmp\file.bat} -Trigger (New-JobTrigger -Daily -At 05:30pm)}
    Write-Host "$item is set!"
  }
}
set-TaskSchedule

2 个答案:

答案 0 :(得分:0)

您应该使用try catch块来捕获错误或异常,下面的功能应该可以帮助您

function set-TaskSchedule
{
Param($xyz) #ifany parameters for input to function
try
{
    $RPCs = Get-Content ".\List.csv"
    foreach ($item in $RPCs) 
    {
        Invoke-Command -ComputerName $item {Register -scheduledJob -Name DumpLogs -ScriptBlock {Start-Process C:\tmp\file.bat} -Trigger (New-JobTrigger -Daily -At 05:30pm)}
        Write-Host "$item is set!"
    }
}
catch
{
    Write-Error " Exception while scheduling task"
    Write-Error $_.Exception.message
    Write-Error " ErrorStack: $Error[0] "
    #exit 1
}
return $abc #if u want to return anything form this function

}

答案 1 :(得分:-1)

如果您不想编写try-catch,最简单的选择是将-ErrorAction SilentlyContinue添加到Register-ScheduledJob命令中。我建议进行广泛的测试,并确保它适合所有情况。如果没有,您应该花时间编写一个错误处理程序。您可以在脚本块中包含多行,添加换行符将使其更易于阅读。

以下是在Invoke-Command中使用Try-Catch的示例:

Function set-TaskSchedule {
  $RPCs = Get-Content ".\List.csv"
  foreach ($item in $RPCs) {
    Invoke-Command -ComputerName $item {Register-ScheduledJob -Name DumpLogs -ScriptBlock {
      try {
        Start-Process C:\tmp\file.bat -Trigger (New-JobTrigger -Daily -At 05:30pm) -ErrorAction Stop
        Write-Host "$item is set!"
      }
      catch {
        Write-Host "$item failed!"            
      }
    }
  }
}
set-TaskSchedule