我正在尝试创建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
答案 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