I have a windows service (C#) running as Local System. I want to be able to read my database and run PowerShell commands and scripts. I am able to run most scripts but my test machine is hanging on this one :
NET USE Z: /Delete /y
NET USE Z: \\TEST2\ProgramData
I can run these commands on the computer and it all works but when I try to run these commands from within my Windows Service it hands on the line which runs the script.
    private static bool RunPSCommand(string command, out string output)
    {
        // create Powershell runspace
        Runspace runspace = RunspaceFactory.CreateRunspace();
        // open it
        runspace.Open();
        // create a pipeline and feed it the script text
        Pipeline pipeline = runspace.CreatePipeline();
        pipeline.Commands.AddScript(command);
        // add an extra command to transform the script output objects into nicely formatted strings
        // remove this line to get the actual objects that the script returns. For example, the script
        // "Get-Process" returns a collection of System.Diagnostics.Process instances.
        pipeline.Commands.Add("Out-String");
        // execute the script
        try
        {
            StringBuilder stringBuilder = new StringBuilder();
            Collection<PSObject> results = pipeline.Invoke();
            if (pipeline.HadErrors)
            {
                var errors = pipeline.Error.ReadToEnd();
                foreach (object error in errors)
                {
                    stringBuilder.AppendLine(error.ToString());
                }
            }
            // close the runspace
            runspace.Close();
            // convert the script result into a single string        
            foreach (PSObject obj in results)
            {
                stringBuilder.AppendLine(obj.ToString());
            }
            output = stringBuilder.ToString();
            return true;
        }
        catch (CommandNotFoundException e)
        {
            output = e.Message;
            return false;
        }
        catch (Exception e)
        {
            output = e.Message;
            return false;
        }
    }
I am not sure why this is so difficult. I have been wracking my head on this one for three days and trying every option from net use to DOM objects
NET USE Z: /Delete /y
(New-Object -Com WScript.Network).MapNetworkDrive("z:" , "\\test2\programdata")