Hello All,
My Desktop was upgraded to Windows 11 without the VB Script feature. I need to figure out how to convert the vb script that SAS EG generates to powershell or javascript.
Below is .vbs script that I want to convert to powershell or javascript.
Option Explicit
Dim app ' As SASEGuide.Application
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 ' As String
Dim prjObject ' As SASEGuide.Project
Dim containerName ' As String
Dim containerObject ' As SASEGuide.Container
Dim containerColl ' As SASEGuide.ContainerCollection
prjName = "&Networkpath\data_extract_server.egp" ' Project Name
containerName = "prod_server" ' Container Name
Set app = CreateObject("SASEGObjectModel.Application.8.1")
If Checkerror("CreateObject") = True Then
Exit Sub
End If
Set prjObject = app.Open(prjName,"")
If Checkerror("App.Open") = True Then
Exit Sub
End If
'-----
'Get The Container Collection and Object
'-----
Set containerColl = prjObject.ContainerCollection
If Checkerror("Project.ContainerCollection") = True Then
Exit Sub
End If
Dim i ' As Long
Dim count ' As Long
count = containerColl.count
For i = 0 To count - 1
Set containerObject = containerColl.Item(i)
If Checkerror("ContainerCollection.Item") = True Then
Exit Sub
End If
If (containerObject.Name = containerName) Then
Exit For
Else
Set containerObject = Nothing
End If
Next
If not (containerObject Is Nothing) Then
'----
' Run the Container
'----
containerObject.Run
If Checkerror("Container.Run") = True Then
Exit Sub
End If
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 ' As String
Dim errNum ' As Long
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
I looked around but having trouble doing it myself.
VB Script had its days (or decades) but it is on the way out. Here's a PowerShell script (I named it RunFlow.ps1) that can take a project (full path) and flow name and run it. It also Saves the project file after running the flow (which will update any project results like log, ODS, etc).
# check for an input file
if ($args.Count -eq 2)
{
$fileToProcess = $args[0]
$flowToRun = $args[1]
}
else
{
Write-Host "EXAMPLE Usage: RunFlow.ps1 path-and-name-EGP-file process-flow"
Exit -1
}
# check that the input file exists
if (-not (Test-Path $fileToProcess))
{
Write-Host "$fileToProcess does not exist."
Exit -1
}
# change this if running a different version of EG
$egVersion = "SASEGObjectModel.Application.8.1"
# create an instance of the EG automation model
$eguideApp = New-Object -comObject $egVersion
Write-Host $eguideApp.Name $eguideApp.Version
Write-Host "Opening " $fileToProcess ", looking to run " $flowToRun
$project = $eguideApp.Open("$fileToProcess", "")
# Show all of the process flows in the project
$pfCollection = $project.ContainerCollection
foreach ($pf in $pfCollection)
{
if ($pf.ContainerType -eq 0)
{
if ($pf.Name -eq $flowToRun)
{
Write-Host "Running " $flowToRun
$pf.Run()
Write-Host "Saving updated " $project.Name
$project.Save()
}
}
}
$project.Close()
# Quit (end) the application object
$eguideApp.Quit()
You run it like this:
.\RunFlow.ps1 "C:\Projects\Automation\Daily_Job.egp" "Prod Flow"
Enterprise Guide 8.5.0.0
Opening C:\Projects\Automation\Daily_Job.egp , looking to run Prod Flow
Running Prod Flow
Saving updated Daily_Job
Can definitely use more error checks for a more robust script. See Doing More with SAS Enterprise Guide Automation for more information about the EG automation model.
As of yet, I have not seen anything that will convert easily between VB* and any of the .NET world (including PowerShell).
Best bet, in my experience, is to ask ChatGPT to do the prelim conversion. I then tweak it from there. It is mostly ok but is never right. YMMV. You have a trivial script so easy to convert.
VBS is dead so best to move away. PowerShell is an excellent choice.
VB Script had its days (or decades) but it is on the way out. Here's a PowerShell script (I named it RunFlow.ps1) that can take a project (full path) and flow name and run it. It also Saves the project file after running the flow (which will update any project results like log, ODS, etc).
# check for an input file
if ($args.Count -eq 2)
{
$fileToProcess = $args[0]
$flowToRun = $args[1]
}
else
{
Write-Host "EXAMPLE Usage: RunFlow.ps1 path-and-name-EGP-file process-flow"
Exit -1
}
# check that the input file exists
if (-not (Test-Path $fileToProcess))
{
Write-Host "$fileToProcess does not exist."
Exit -1
}
# change this if running a different version of EG
$egVersion = "SASEGObjectModel.Application.8.1"
# create an instance of the EG automation model
$eguideApp = New-Object -comObject $egVersion
Write-Host $eguideApp.Name $eguideApp.Version
Write-Host "Opening " $fileToProcess ", looking to run " $flowToRun
$project = $eguideApp.Open("$fileToProcess", "")
# Show all of the process flows in the project
$pfCollection = $project.ContainerCollection
foreach ($pf in $pfCollection)
{
if ($pf.ContainerType -eq 0)
{
if ($pf.Name -eq $flowToRun)
{
Write-Host "Running " $flowToRun
$pf.Run()
Write-Host "Saving updated " $project.Name
$project.Save()
}
}
}
$project.Close()
# Quit (end) the application object
$eguideApp.Quit()
You run it like this:
.\RunFlow.ps1 "C:\Projects\Automation\Daily_Job.egp" "Prod Flow"
Enterprise Guide 8.5.0.0
Opening C:\Projects\Automation\Daily_Job.egp , looking to run Prod Flow
Running Prod Flow
Saving updated Daily_Job
Can definitely use more error checks for a more robust script. See Doing More with SAS Enterprise Guide Automation for more information about the EG automation model.
Check out this tutorial series to learn how to build your own steps in SAS Studio.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.