Используя информацию, которую я узнал here и here. Я создал короткий код ниже.VBScript - Использование обработки ошибок для определения того, существует ли задача
Когда я запускаю код и сознательно вводю задачу, которая существует в папке «\» библиотеки планировщика задач, я получаю сообщение «Задача не существует» msgbox.
Я попытался включить двойные кавычки вокруг переменных, переданных в функцию, без каких-либо успехов. Любое руководство очень ценится.
Option Explicit
Dim strtaskn, strtaskf, sso, result
Call start
Sub start
strtaskn = ""
strtaskf = ""
Do While Len(strtaskn) = 0
strtaskn = inputbox("Please enter task name to search for:", "Task Exist?")
If isempty(strtaskn) Then
WScript.Quit()
End If
Loop
strtaskf = InputBox("Please enter task folder to search in:" & vbCrLf & vbCrLf & "Leave blank for default folder", "Task Exist?")
If Len(strtaskf) = 0 Then strtaskf = "\"
If IsEmpty(strtaskf) Then
WScript.Quit()
End If
'WScript.Echo strtaskn
'WScript.Echo strtaskf
Call taskexist(strtaskn, strtaskf)
End Sub
Function taskexist(taskname, taskfolder)
Dim rootfolder, task
Set sso = CreateObject("Schedule.Service")
Call sso.Connect()
On Error Resume Next
Set rootfolder = sso.GetFolder(taskfolder)
If Err.Number <> 0 Then
result = MsgBox("Task folder does not exist " & Err.Description & vbCrLf & vbCrLf & "Do you wish to try another search?", vbYesNo+vbCritical, "Task Exist?")
Select Case result
Case vbYes
Err.Clear
Call start
Case vbNo
WScript.Quit()
End Select
Err.Clear
End If
Set task = rootfolder.GetTasks(taskname)
If Err.Number <> 0 Then
result = MsgBox("Task does not exist " & Err.Description & vbCrLf & vbCrLf & "Do you wish to try another search?", vbYesNo+vbCritical, "Task Exist?")
Select Case result
Case vbYes
Err.Clear
Call start
Case vbNo
WScript.quit()
End Select
Err.Clear
End If
On Error Goto 0
result = MsgBox("Task exists" & vbCrLf & vbCrLf & "Do you wish to try another search?", vbYesNo+vbInformation, "Task Exist?")
End Function
ОБНОВЛЕНИЕ
Используя пример, показанный в моем первом link, я могу видеть альтернативный способ достижения той же цели путем загрузки каждой задачи, найденный в коллекции (по .name) в массив и сравнение элементов с именем задачи, которое я ищу, или просто с помощью цикла итерации.
UPDATE
Перед изучением ошибки в моем исходном коде, благодаря Ansgar. Я начал скриптовому альтернативный вариант, который я считаю, делиться с сообществом является правильным, что нужно сделать ...
option explicit
dim strtaskn, strtaskf, sso, rootfolder, taskcollect, numtasks, intcomp, taskreg, result
call start
sub start
strtaskn=""
strtaskf=""
do while len(strtaskn)=0
strtaskn = inputbox("Please enter task name to search for:","Task Exist?")
if isempty(strtaskn) then
wscript.quit()
end if
loop
strtaskf = inputbox("Please enter task folder to search in:" &vbcrlf&vbcrlf& "Leave blank for default folder","Task Exist?")
if len(strtaskf)=0 then strtaskf = "\"
if isempty(strtaskf) then
wscript.quit()
end if
wscript.echo strtaskn
wscript.echo strtaskf
set sso = createobject("schedule.service")
call sso.connect()
on error resume next
set rootfolder = sso.getfolder(strtaskf)
if err.number <> 0 then
result = msgbox("Task folder does not exist " &err.description &vbcrlf&vbcrlf& "Do you wish to try another search?", vbyesno+vbcritical, "Task Exist?")
select case result
case vbyes
err.clear
call start
case vbno
wscript.quit()
end select
err.clear
end if
on error goto 0
set taskcollect = rootfolder.gettasks(0)
numtasks = taskcollect.count
if numtasks = 0 then
wscript.echo "No tasks are present in " &strtaskf& " folder"
else
for each taskreg in taskcollect
intcomp = strcomp(strtaskn, taskreg.name, vbtextcompare)
if intcomp = 0 then
result = msgbox("Task exists" &vbcrlf&vbcrlf& "Do you wish to try another search?", vbyesno+vbinformation, "Task Exist?")
select case result
case vbyes
call start
case vbno
wscript.quit()
end select
end if
next
result = msgbox("Task does not exist " &vbcrlf&vbcrlf& "Do you wish to try another search?", vbyesno+vbcritical, "Task Exist?")
select case result
case vbyes
call start
case vbno
wscript.quit()
end select
end if
end sub
спасибо Ansgar ... –