Vbscript 导出SAS项目日志文件

Vbscript 导出SAS项目日志文件,vbscript,sas,monitoring,Vbscript,Sas,Monitoring,我曾经每天运行3个SAS EG项目。几天后,我们有了一个“SAS调度器”,它基本上在夜间运行后者(第一个在凌晨00:00,第二个在凌晨01:00,第三个在凌晨03:00)。每个SAS项目都有多个SAS程序 总而言之,这是个好消息,但这也意味着我不能再直接查看日志了 为了跟踪夜间工作,我试图找到导出每个项目的日志文件的最佳方法。我最近发现了SAS项目日志,它基本上总结了SAS项目中所有程序的日志 我在SAS社区论坛上找到了的答案,基本上调整了.vbs脚本,使用以下代码将SAS项目日志文件保存为.t

我曾经每天运行3个SAS EG项目。几天后,我们有了一个“SAS调度器”,它基本上在夜间运行后者(第一个在凌晨00:00,第二个在凌晨01:00,第三个在凌晨03:00)。每个SAS项目都有多个SAS程序

总而言之,这是个好消息,但这也意味着我不能再直接查看日志了

为了跟踪夜间工作,我试图找到导出每个项目的日志文件的最佳方法。我最近发现了SAS项目日志,它基本上总结了SAS项目中所有程序的日志

我在SAS社区论坛上找到了的答案,基本上调整了
.vbs
脚本,使用以下代码将SAS项目日志文件保存为.txt:

Set objProjectLog = objProject.ProjectLog
objProjectLog.Clear()

objProjectLog.Enabled = True
'strProjectLog = objProjectLog.Text
objProjectLog.SaveAs "c:\temp\projectLog.txt"
但是,1)它是一个.txt文件而不是日志文件,2)我不知道在当前的.vbs脚本中添加它的位置:

Option Explicit
Dim app

Call dowork

'shut down the app
If not (app Is Nothing) Then
    app.Quit
    Set app = Nothing
End If


Sub dowork()
    On Error Resume Next
    '----
    ' Start up Enterprise Guide using the project name
    '----
    Dim prjName
    Dim prjObject

    prjName = "C:\Users\kermit\Desktop\Project.egp"    'Project Name
      
    Set app = CreateObject("SASEGObjectModel.Application.8.1")
    If Checkerror("CreateObject") = True Then
        Exit Sub
    End If
    
    '-----
    ' open the project
    '-----
    Set prjObject = app.Open(prjName,"")
    If Checkerror("app.Open") = True Then
        Exit Sub
    End If
    
        
    '-----
    ' run the project
    '-----
    prjObject.run
    If Checkerror("Project.run") = True Then
        Exit Sub
    End If
    
            
    '-----
    ' Save the new project
    '-----
    prjObject.Save
    If Checkerror("Project.Save") = True Then
        Exit Sub
    End If
    
    '-----
    ' Close the project
    '-----
    prjObject.Close
    If Checkerror("Project.Close") = True Then
        Exit Sub
    End If
       
End Sub

Function Checkerror(fnName)
    Checkerror = False
    
    Dim strmsg
    Dim errNum
    
    If Err.Number <> 0 Then
        strmsg = "Error #" & Hex(Err.Number) & vbCrLf & "In Function " & fnName & vbCrLf & Err.Description
        'MsgBox strmsg  'Uncomment this line if you want to be notified via MessageBox of Errors in the script.
        Checkerror = True
    End If
         
End Function
选项显式
昏暗的应用程序
嫁妆
“关闭应用程序
如果不是(应用程序什么都不是),那么
应用程序。退出
设置app=Nothing
如果结束
子工作()
出错时继续下一步
'----
'使用项目名称启动企业指南
'----
模糊prjName
模糊项目
prjName=“C:\Users\kermit\Desktop\Project.egp”'项目名称
Set app=CreateObject(“SASEGObjectModel.Application.8.1”)
如果Checkerror(“CreateObject”)=True,则
出口接头
如果结束
'-----
'打开项目
'-----
设置prjObject=app.Open(prjName,“”)
如果Checkerror(“app.Open”)=True,则
出口接头
如果结束
'-----
"办项目",
'-----
prjObject.run
如果Checkerror(“Project.run”)=True,则
出口接头
如果结束
'-----
'保存新项目
'-----
prjObject.Save
如果Checkerror(“Project.Save”)=True,则
出口接头
如果结束
'-----
"关闭项目"
'-----
项目,结束
如果Checkerror(“Project.Close”)=True,则
出口接头
如果结束
端接头
函数检查错误(fnName)
Checkerror=False
Dim strmsg
暗黑
如果错误号为0,则
strmsg=“Error#”&Hex(Err.Number)&vbCrLf&“函数中”&fnName&vbCrLf&Err.Description
“MsgBox strmsg”如果希望通过MessageBox通知脚本中的错误,请取消对此行的注释。
Checkerror=True
如果结束
端函数

最后,我希望在早上,我运行一个程序,扫描3个项目日志文件中的注释、警告和错误,并向自己发送一封包含结果的电子邮件。因此,有没有办法将SAS项目日志导出到文件夹中(而不是手动导出)?

那么,首先,这段代码在做什么

Set objProjectLog = objProject.ProjectLog
objProjectLog.Clear()
这将清除项目日志。这需要在项目运行之前完成-否则日志包含过去运行的数据。所以把它放在prjOBject.Run()之前

然后将项目日志导出到文本文件。当然,您可以随意调用该文本文件。您需要在程序运行之后以及关闭之前的某个地方显示此代码。就在PrjObject.Run()之后可能就可以了

您需要更新名称以匹配vbs文件的名称-它们使用objproject,而您的vbs使用prjObject,但它们是相同的,只需匹配名称即可

第二,你还能做什么?如果VBS不是你的拿手好戏,你有很多其他方法可以做到这一点

  • 将EG项目导出到.sas文件中,然后在基本sas中使用正常输出选项对此进行调度。这也可以通过调度界面实现
  • 使用PROC PRINT在SAS代码内重定向日志
  • 将您的EG项目复制到您可以看到的位置。EG项目确实包含运行的所有内容的日志-因此没有理由不打开.egp并查看它,只要确保您没有在生产文件中这样做,因为您可能会忘记关闭

我的偏好不是安排EG项目,而是安排.sas项目;使用EG作为开发环境,然后导出到.sas。这给了你更多的灵活性。但是,有很多不同的方法可以剥这只猫的皮。

那么,首先,这段代码在做什么

Set objProjectLog = objProject.ProjectLog
objProjectLog.Clear()
这将清除项目日志。这需要在项目运行之前完成-否则日志包含过去运行的数据。所以把它放在prjOBject.Run()之前

然后将项目日志导出到文本文件。当然,您可以随意调用该文本文件。您需要在程序运行之后以及关闭之前的某个地方显示此代码。就在PrjObject.Run()之后可能就可以了

您需要更新名称以匹配vbs文件的名称-它们使用objproject,而您的vbs使用prjObject,但它们是相同的,只需匹配名称即可

第二,你还能做什么?如果VBS不是你的拿手好戏,你有很多其他方法可以做到这一点

  • 将EG项目导出到.sas文件中,然后在基本sas中使用正常输出选项对此进行调度。这也可以通过调度界面实现
  • 使用PROC PRINT在SAS代码内重定向日志
  • 将您的EG项目复制到您可以看到的位置。EG项目确实包含运行的所有内容的日志-因此没有理由不打开.egp并查看它,只要确保您没有在生产文件中这样做,因为您可能会忘记关闭

我的偏好不是安排EG项目,而是安排.sas项目;使用EG作为开发环境,然后导出到.sas。这给了你更多的灵活性。但是有很多不同的方法可以剥下这只猫的皮。

带有程序输出的文本文件是一个日志文件。如果您想更方便地跟踪它们,可以将其扩展名设为.log。我不知道VBS代码在做什么,但是