Error while running AD commandlets in powershell from C#

I have tried executing AD commandlets in powershell using C# from the same machine. This works fine.

static void Main(string[] args)
            InitialSessionState iss = InitialSessionState.CreateDefault();
            iss.ImportPSModule(new string[] { "activedirectory" });
            Runspace myRunSpace = RunspaceFactory.CreateRunspace(iss);

            Pipeline pipeLine = myRunSpace.CreatePipeline();
            Command myCommand = new Command("Get-ADUser");
            myCommand.Parameters.Add("Filter", "sAMAccountName -eq 'user1'");


            //Command restoreCommand = new Command("Restore-ADObject");

            Console.WriteLine("Before Invoke");
            Collection<PSObject> commandResults = pipeLine.Invoke();
            Console.WriteLine("After Invoke");

            foreach (PSObject cmdlet in commandResults)
                //Console.WriteLine("Inside foreach");  
                string cmdletName = cmdlet.BaseObject.ToString();


But while trying to run the same command remotely using the invoke command it gives the error The term 'Get-ADUser' is not recognized as the name of a cmdlet, function, script file, or operable program.

The following is my program :

static void Main(string[] args)

        string shellUri = "";
        string userName = "Domain\\Administrator";
        string password = "Password";
        SecureString securePassword = new SecureString();

        foreach (char c in password)
        PSCredential credential = new PSCredential(userName, securePassword);
        WSManConnectionInfo connectionInfo = new WSManConnectionInfo(false, "machinename", 5985, "/wsman", shellUri, credential);
        using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo))

            using (PowerShell powershell = PowerShell.Create())
                powershell.Runspace = runspace;
                PSCommand new1 = new PSCommand();
                new1.AddParameter("identity", "CN=user1,DC=example,DC=com");
                powershell.Commands = new1;
                Collection<PSObject> results = powershell.Invoke();
                foreach (PSObject obj in results)
                 PSMemberInfoCollection<PSPropertyInfo> propInfos = obj.Properties;
                 foreach (PSPropertyInfo propInfo in propInfos)
                     string propInfoValue = (propInfo.Value == null) ? "" : propInfo.Value.ToString();
                     Console.WriteLine("{0} --> {1}", propInfo.Name, propInfoValue);


  1. How can I achieve calling AD commandlets remotely?
  2. Is there a way to invoke commands remotely using InitialSessionState rather than WSManConnectionInfo .
  3. If I use invoke-command -computername $DC -ScriptBlock {Remove-ADUser -identity "user1"} -credential $cred - i get the error The term 'Remove-ADUser' is not recognized as the name of a cmdlet, function, script file, or operable program.

But it is possible to use command Remove-ADUser -identity "user1" -server $DC -credential $cred .How to directly execute the AD command in powershell from C# client?


You need to import the ActiveDirectory module in the remote runspace before executing the AD command e.g.:


Need Your Help

How to include 3rd party dll resources file into install package

c# setup-project localized

I have two projects, both of them provides localizable support.