BookmarkSubscribeRSS Feed
☑ This topic is solved. Need further help from the community? Please sign in and ask a new question.
sbkp
Calcite | Level 5

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.

1 ACCEPTED SOLUTION

Accepted Solutions
ChrisHemedinger
Community Manager

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.

SAS For Dummies 3rd Edition! Check out the new edition, covering SAS 9.4, SAS Viya, and all of the modern ways to use SAS!

View solution in original post

2 REPLIES 2
AlanC
Barite | Level 11

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.

https://github.com/savian-net
ChrisHemedinger
Community Manager

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.

SAS For Dummies 3rd Edition! Check out the new edition, covering SAS 9.4, SAS Viya, and all of the modern ways to use SAS!

hackathon24-white-horiz.png

The 2025 SAS Hackathon Kicks Off on June 11!

Watch the live Hackathon Kickoff to get all the essential information about the SAS Hackathon—including how to join, how to participate, and expert tips for success.

YouTube LinkedIn

Creating Custom Steps in SAS Studio

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 2 replies
  • 2070 views
  • 3 likes
  • 3 in conversation