簡體   English   中英

如何通過C#程序將參數傳遞給Powershell腳本?

[英]How to pass arguments to a powershell script from C# program?

我有一個腳本文件sample.ps1,它具有以下命令:

copy-item C:\source -destination C:\destination.

與其對源和目標的值進行硬編碼,我希望將其作為參數傳遞給腳本。

copy-item $source -destination $destination.

我想從一個獨立的客戶端調用此腳本,並將源和目標作為參數傳遞。 我有以下程序來執行腳本文件:

            string shellUri = "http://schemas.microsoft.com/powershell/Microsoft.PowerShell";
            string userName = "MachineName\\Administrator";
            string password = "Password";
            SecureString securePassword = new SecureString();

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

                runspace.Open();
        String file = "C:\\scripts\\Sample.ps1";
                Pipeline pipeline = runspace.CreatePipeline();

                pipeline.Commands.AddScript(System.IO.File.ReadAllText(file));
        }

我想通過C#程序將參數傳遞給腳本Sample.ps1。 那怎么可能?

我寧願使用Commands.Add方法添加一個將直接調用Sample.ps1腳本的Commands.Add 作為文件,而不是讀取文件並使用Commands.AddScript將其內容作為文本注入。

pipeline.Commands.Add( "C:\\dirWithNoSpaces\\scripts\\Sample.ps1 -param1 value1");

但請注意轉義。.我剛剛讀到,如果路徑中有空格,則必須用引號引起來:

pipeline.Commands.Add( "&\"C:\\dir with spaces\\scripts\\Sample.ps1\" -param1 value1");

但是,如果要保持現在的狀態,則可能會尋找一些在Pipeline或Runspace對象中添加“參數”的方法。 例如,我剛剛發現: Runspace.InitialSessionState-您向運行時環境注入了一些初始變量,因此您可以使用它將值傳遞給內聯腳本。 但是,這些值將已經是變量,而不是在ARGV中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM