将powershell变量传递给PS脚本中的C#代码

我阅读了很多关于将vars从C#传递到powershell脚本的内容,但我却反过来说。

这里我有这个代码在我的powershell脚本中创建一个Type:

Add-Type @' public class Node { public string Type; public string VM_Name; public string VM_IP; public string Hostname; } '@ $vm1 = New-Object Node $vm2 = New-Object Node $vm3 = New-Object Node $vm4 = New-Object Node 

在这段代码之后我有C#代码:

 $sourceCode = @' public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void InitializeComponent() { } } '@ 

我怎样才能在上面的C#代码中访问$ vm1,2,3,4?

您可以通过C#类中的方法将变量传递给类型,该方法将接受变量作为参数,例如:

 $form = new-object Form1 $form.SetVariables($vm1, $vm2, $vm3, $vm4) 

我推荐这种方法。

另一种选择(较重且未经测试)是尝试从C#代码访问当前的运行空间,例如:

 var defRunspace = System.Management.Automation.Runspaces.Runspace.DefaultRunspace; var pipeline = defRunspace.CreateNestedPipeline(); pipeline.Commands.AddScript("$vm1,$vm2,$vm3,$vm4"); var results = pipeline.Invoke(); var vm1 = results[0]; var vm2 = results[1]; ... 

我没有尝试使用C#代码(仅限PowerShell内部),所以我不能100%肯定它会起作用。