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

Mar*_*aev 4 c# powershell

我阅读了很多关于将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
Run Code Online (Sandbox Code Playgroud)

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

$sourceCode = @'


public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void InitializeComponent()
    {
    }
}

'@
Run Code Online (Sandbox Code Playgroud)

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

Kei*_*ill 6

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

$form = new-object Form1
$form.SetVariables($vm1, $vm2, $vm3, $vm4)
Run Code Online (Sandbox Code Playgroud)

我推荐这种方法.

另一种选择(较重且未经测试)是尝试从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];
...
Run Code Online (Sandbox Code Playgroud)

我没有尝试过C#代码(仅来自PowerShell内部),所以我不能100%确定它会起作用.