簡體   English   中英

如何在C#中使用Powershell創建變量

[英]How to create variables using Powershell in C#

嘗試在C#中的powershell中執行以下操作

$certThumbrint = "someLocationToACert"
$cert = get-item $certThumbrint

Get-RoleInstanceCount -ServiceName "someServiceName" -DeploymentSlot "someSlot" -RoleName "someRole" -SubscriptionId "someId" -Certificate $cert

這在PowerShell comandline中逐個運行時非常有效。 但我無法通過代碼弄清楚如何做到這一點。 到目前為止,我已經這樣做了。

Pipeline pipeline = runspace.CreatePipeline();

pipeline.Commands.Add("$certThumbrint = \"someLocationToACert\"");
pipeline.Commands.Add(@"$cert = get-item $certThumbrint");

Command instanceCount = new Command("Get-RoleInstanceCount");
instanceCount.Parameters.Add(new CommandParameter("ServiceName", "someServiceName"));
....
instanceCount.Parameters.Add(new CommandParameter("Certificate", "$cert"));

然后我得到以下異常:

“術語'$ certThumbrint =”someLocation“'不被識別為cmdlet,函數,腳本文件或可操作程序的名稱。檢查名稱的拼寫,或者如果包含路徑,請驗證路徑是否正確然后再試一次。

我試圖將varibles添加為“AddScrips”,我也使用過

SessionStateVariableEntry var2 = new SessionStateVariableEntry("cert", "get-item $certThumbrint", "Initial session state MyVar1 test");
initialSessionState.Variables.Add(var2);

在創建運行空間之前。 什么都行不通。 還將所有代碼添加到字符串中並嘗試將其作為腳本運行。

我實際上無法做到這一點,感覺這是一個非常簡單的事情,必須能做...謝謝。

編輯:還嘗試了以下內容:

        const string getInstanceCountScript = "$certThumbrint = \"somecert\" \n " + 
                                              "$cert = get-item $certThumbrint \n " +
                                              "Get-RoleInstanceCount -ServiceName someservicename" +
                                                                     ...
                                                                   " -Certificate $cert";

pipeline.Commands.AddScript(getInstanceCountScript);

它運行但返回一個空字符串。 如果我將相同的代碼放入我用“Add()”調用的ps1文件中,它會運行並為我提供正確的輸出。 但我真的不想在我的項目中加載ps1文件只需3行代碼或更少。

這段代碼非常適合我。 你是否真的,PS1文件包含完全相同的代碼?

 static void Main(string[] args)
            {


                using (Runspace rs = RunspaceFactory.CreateRunspace())
                {

                    rs.Open();
                    var pipeline = rs.CreatePipeline();
                    pipeline.Commands.AddScript("$certThumbrint = \"c:\\1.txt\"\n" +
                                                "$cert = get-item $certThumbrint\n" +
                                                "Get-Content $cert");

                    foreach (var s in pipeline.Invoke())
                    {
                        Console.WriteLine(s);

                    }

                }
                Console.ReadLine();
            }

看一下New-Variable命令行開關。

暫無
暫無

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

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