任务调度器。 VBS 脚本未被执行
Task scheduler. VBS script is not being executed
我创建了一个 vbs 来从 Outlook 未读电子邮件中检索附件并将它们存储到一个文件夹中。
GetMail.vbs
Dim SavePath
Dim Subject
Dim FileExtension
Dim k
SavePath = "D:\IN\"
Subject = "'Replication IN'"
Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objFolder = objNamespace.GetDefaultFolder(6) 'Inbox
Set colItems = objFolder.Items
Set colFilteredItems = colItems.Restrict("[Unread]=true")
Set colFilteredItems = colFilteredItems.Restrict("[Subject] = " & Subject)
For k = colFilteredItems.Count to 1 step -1
set objMessage = colFilteredItems.Item(k)
intCount = objMessage.Attachments.Count
If intCount > 0 Then
For i = 1 To intCount
objMessage.Attachments.Item(i).SaveAsFile SavePath & _
objMessage.Attachments.Item(i).FileName
Next
objMessage.Unread = False
End If
Next
现在,我必须自动执行此任务,完成后,执行另一个程序来处理收到的附件。为此,我创建了一个批处理文件。
MyBatch.bat
cls
@ECHO OFF
ECHO. * Retrieving emails ... *
"D:\GetMail.vbs"
ECHO. * Importing data. Please wait ... *
"D:\MyProgram.exe"
CLS
EXIT
我没有遇到任何问题,在执行 .bat 文件时一切正常。但是当这个文件被计划任务执行时,脚本无法读取电子邮件,也无法收集附件。
我检查了以下内容:
- 任务是 运行 作为管理员
- 运行 勾选最高权限复选框。
- 任务的最后执行状态是正确的。
- 事件日志查看器中没有相关错误。
可能是什么原因?
Outlook 与任何其他 Office 应用程序一样,不能在服务中使用(这就是任务计划程序)。
您可以使用扩展 MAPI(仅限 C++ 或 Delphi)或者可以在服务中使用包装器,例如 Redemption (I am its author - any language), it's RDO 对象系列。
您可能还想添加对 Namepace.Logon
的调用:
Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
objNamespace.Logon
Set objFolder = objNamespace.GetDefaultFolder(6) 'Inbox
我创建了一个 vbs 来从 Outlook 未读电子邮件中检索附件并将它们存储到一个文件夹中。
GetMail.vbs
Dim SavePath
Dim Subject
Dim FileExtension
Dim k
SavePath = "D:\IN\"
Subject = "'Replication IN'"
Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objFolder = objNamespace.GetDefaultFolder(6) 'Inbox
Set colItems = objFolder.Items
Set colFilteredItems = colItems.Restrict("[Unread]=true")
Set colFilteredItems = colFilteredItems.Restrict("[Subject] = " & Subject)
For k = colFilteredItems.Count to 1 step -1
set objMessage = colFilteredItems.Item(k)
intCount = objMessage.Attachments.Count
If intCount > 0 Then
For i = 1 To intCount
objMessage.Attachments.Item(i).SaveAsFile SavePath & _
objMessage.Attachments.Item(i).FileName
Next
objMessage.Unread = False
End If
Next
现在,我必须自动执行此任务,完成后,执行另一个程序来处理收到的附件。为此,我创建了一个批处理文件。
MyBatch.bat
cls
@ECHO OFF
ECHO. * Retrieving emails ... *
"D:\GetMail.vbs"
ECHO. * Importing data. Please wait ... *
"D:\MyProgram.exe"
CLS
EXIT
我没有遇到任何问题,在执行 .bat 文件时一切正常。但是当这个文件被计划任务执行时,脚本无法读取电子邮件,也无法收集附件。
我检查了以下内容:
- 任务是 运行 作为管理员
- 运行 勾选最高权限复选框。
- 任务的最后执行状态是正确的。
- 事件日志查看器中没有相关错误。
可能是什么原因?
Outlook 与任何其他 Office 应用程序一样,不能在服务中使用(这就是任务计划程序)。
您可以使用扩展 MAPI(仅限 C++ 或 Delphi)或者可以在服务中使用包装器,例如 Redemption (I am its author - any language), it's RDO 对象系列。
您可能还想添加对 Namepace.Logon
的调用:
Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
objNamespace.Logon
Set objFolder = objNamespace.GetDefaultFolder(6) 'Inbox