简体   繁体   中英

Call a Powershell script with different credentials and pass parameters

I have some questions: how to achieve this activity using below code as I cannot find method to pass the userid and password in runspace.

  1. How to call a PowerShell script with different credentials?
  2. How to pass arguments when calling the PowerShell scripts?
  3. I want to get the output.

I have use the code below but unable to pass the credentials.

private static string RunScript(string scriptFile, string servername, string volume, string size,string userID,string userpassword)
{
    // Validate parameters
    StringBuilder stringBuilder = new StringBuilder();

    try
    {
        if (string.IsNullOrEmpty(scriptFile)) 
        { throw new ArgumentNullException("scriptFile"); }

        // if (parameters == null)
        // { throw new ArgumentNullException("parameters"); }

        RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create();

        using (Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration))
        {
            runspace.Open();
            RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace);
            scriptInvoker.Invoke("Set-ExecutionPolicy -Scope Process -ExecutionPolicy Unrestricted");

            Pipeline pipeline = runspace.CreatePipeline();

            Command scriptCommand = new Command(scriptFile);

            CommandParameter Param1 = new CommandParameter("-Server  ",servername);
            CommandParameter Param2 = new CommandParameter("-Volumeletter", volume);
            CommandParameter Param3 = new CommandParameter("-deltasize", size);

            scriptCommand.Parameters.Add(Param1);
            scriptCommand.Parameters.Add(Param2);
            scriptCommand.Parameters.Add(Param3);

            pipeline.Commands.Add(scriptCommand);

            log.Info("scriptCommand " + scriptCommand.ToString());
            log.Info("scriptCommandValue Param[command] " + scriptCommand.Parameters[0].Value.ToString());
            log.Info("scriptCommandValue Param[password] " + scriptCommand.Parameters[1].Value.ToString());
            log.Info("scriptCommandValue Param[usename] " + scriptCommand.Parameters[2].Value.ToString());

            Collection<PSObject> psObjects;

            psObjects = pipeline.Invoke();

            foreach (PSObject obj in psObjects)
            {
                stringBuilder.AppendLine(obj.ToString());
            }

            // Console.WriteLine(stringBuilder.ToString());
            log.Info("output string : " + stringBuilder.ToString());
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }

    return stringBuilder.ToString();
}

//try using this sample it worked for me

function getUser($abc) {

        <#Previously created password file in C:\Script\cred.txt, read-host -assecurestring | convertfrom-securestring | out-file C:\Script\cred.txt#>

        $password = get-content C:\Script\cred.txt| convertto-securestring
        $credentials = new-object -typename System.Management.Automation.PSCredential -argumentlist "DOMAIN\Username",$password
        $output = start-process powershell -Credential $credentials -ArgumentList '-noexit','-File', 'C:\script\script2.ps1', $abc
        return $output
    }

    [string]$abc = $args

    getUser($abc)

    Write-host Output is $output

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM