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

本文关键字:Powershell 创建 变量 | 更新日期: 2023-09-27 18:36:18

尝试在 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、函数、脚本文件或可操作程序的名称。检查 名称的拼写,或者如果包含路径,请验证 路径正确,请重试。

我尝试将变量添加为"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 行或更少的代码。

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

这段代码非常适合我。你是舒尔,那个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命令。