2016-09-07 3 views
0

Используя информацию, которую я узнал 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 

ответ

1
Set task = rootfolder.GetTasks(taskname) 

Данное заявление не делать то, что вы думаете, что он делает. Метод/свойство GetTasks (обратите внимание на конечные «s») возвращает все задачи в данной папке. Его параметр представляет собой целочисленный флаг, указывающий, должны ли скрытые задачи включаться в возвращаемый список (1 → включают скрытые задачи, 0 → не включают скрытые задачи).

То, что вы на самом деле хотите это GetTask свойство:

Set task = rootfolder.GetTask(taskname) 
+0

спасибо Ansgar ... –