WMI – start a process on remote machine and passing custom credentials.

Tags: IIS, WMI

I use System.Management in .NET 2.0 to connect, pass custom credentials to a remote machine and query with WMI frequently.   This is straight forward and there are many examples showing the syntax how to do this.   However, while working with remote IIS7 installs,  I wanted to execute a command on a remote machine while passing custom credentials.  I couldn’t find an example that provided this functionality, hopefully this will save someone time searching for the syntax.  This sample starts an instance of ‘calc.exe’ on a remote machine. 

The code accepts four parameters

  • Command to run,
  • Machine to connect to,
  • UserName,
  • Password

Module Module1

    Sub Main()
        Dim retValue As String
        retValue = RunCommand(“calc.exe”, “MachineName”, “MachineNameUserID”, “Password”)
        Console.WriteLine(retValue)
    End Sub

    Function RunCommand(ByVal strCommand As String, ByVal strMachineName As String, ByVal strUserName As String,
ByVal strPassword As String) As String
        Dim options As New System.Management.ConnectionOptions
        options.Username = strUserName
        options.Password = strPassword

        Dim path As New System.Management.ManagementPath(“\” & strMachineName & “rootcimv2:Win32_Process”)
        Dim scope As New System.Management.ManagementScope(path, options)

        scope.Connect()

        Dim opt As New System.Management.ObjectGetOptions()
        Dim classInstance As New System.Management.ManagementClass(scope, path, opt)

        Dim inParams As System.Management.ManagementBaseObject = classInstance.GetMethodParameters(“Create”)
        inParams(“CommandLine”) = strCommand

        ‘ Execute the method and obtain the return values.
        Dim outParams As System.Management.ManagementBaseObject = classInstance.InvokeMethod(“Create”, inParams, Nothing)
        Return “ReturnValue:” & outParams(“returnValue”) & ” Process ID: {0}” & outParams(“processId”)

    End Function

End Module

Some links I found useful

Return code s
Description (these are the codes returned once a process has executed)

0 Successful completion
2 Access denied
3 Insufficient privilege
8 Unknown failure
9 Path not found
21 Invalid parameter