如何在C#中使用Powershell创建变量

时间:2012-06-06 03:46:32

标签: c# powershell

尝试在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行代码或更少。

2 个答案:

答案 0 :(得分:0)

这段代码非常适合我。你确定,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();
            }

答案 1 :(得分:0)

查看New-Variable命令行开关。