Runs a job on asked nodes that meet certain processor and memory criteria.

Visual Basic
Edit|Remove
strClusterName = "localhost" 'Change to name of cluster if not run locally.
intProcessors = 1 'Number of processors required for job
intMemory = 10 'MB of memory required for job
strCommandLine = "mpiexec batchpi"
strWorkDir = "c:\scripts\"
strUsername = "" 'If empty string, script prompts for username.
strPassword = "" 'If empty string, script prompts for password.
blnIsConsole = True 'True = cmd-line, False = GUI
intHandle = 0

Set objComputeCluster = CreateObject("Microsoft.ComputeCluster.Cluster")
objComputeCluster.Connect(strClusterName)
WScript.Echo "Compute Cluster Name: " & objComputeCluster.Name & vbCrLf & _
 "Node criteria:" & vbCrLf & _
 "  Number of processors: "  & intProcessors & vbCrLf & _
 "  Physical memory: "  & intMemory & " MB" & vbCrLf & _
 "Compute Cluster Nodes:"
Set colNodes = objComputeCluster.ComputeNodes
strSelectedNodes = ""
For Each objNode In colNodes
  If objNode.NumberOfProcessors >= intProcessors And _
   objNode.Memory >= intMemory And _
   objNode.Status = 0 Then 'Node is Ready.
    WScript.Echo vbCrLf & "  Name: " & objNode.Name & vbCrLf & _
     "    Number of Processors: " & objNode.NumberOfProcessors & vbCrLf & _
     "    Memory: " & objNode.Memory & " MB"
    strSelectedNodes = strSelectedNodes & objNode.Name & ","
  Else
    WScript.Echo vbCrLf & "  Name: " & objNode.Name & vbCrLf & _
     "    Node does not meet criteria."
  End If
Next

If strSelectedNodes <> "" Then
  If Right(strSelectedNodes, 1) = "," Then
    strSelectedNodes = Left(strSelectedNodes, Len(strSelectedNodes) - 1)
  End If
  Set objJob = objComputeCluster.CreateJob
  objJob.Name = "Test-" & Date & "-" & Time
  objJob.AskedNodes = strSelectedNodes
  objJob.MaximumNumberOfProcessors = intProcessors
  objJob.MinimumNumberOfProcessors = intProcessors
  objJob.Priority = 2
  objJob.IsExclusive = False
  intJobID = objComputeCluster.AddJob((objJob))
  WScript.Echo "Job ID: " & intJobID
  Set objTask = objComputeCluster.CreateTask
  objTask.Name = "Task1"
  objTask.CommandLine = strCommandLine
  objTask.Stdout = strWorkDir & strNode & "-Task1Out.txt"
  objTask.Stderr = strWorkDir & strNode & "-Task1Err.txt"
  objTask.WorkDirectory = strWorkDir
  intTaskID = objComputeCluster.AddTask(objJob.ID, (objTask))
  WScript.Echo "Task ID: " & intTaskID
  objComputeCluster.SubmitJob intJobID, strUsername, strPassword, _
   blnIsConsole, intHandle
  WScript.Echo vbCrLf & "Submitted Job: " & intJobID & " " & objJob.Name & _
   " on the following nodes:"
  arrNodes = Split(strSelectedNodes, ",")
  For Each strNode In arrNodes
    WScript.Echo "  " & strNode
  Next
Else
  WScript.Echo vbCrLf & "No nodes met criteria. Job not submitted."
End If