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

问题描述:

我读了很多关于将来自C#的增值变量传递给powershell脚本的问题,但我相反。将PowerShell变量传递给PS脚本中的C#代码

在这里,我有这样的代码在我的PowerShell脚本来创建类型:

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() 
    { 
    } 
} 

'@ 

我怎么可能能够访问$ VM1, 2,3,4在上面的C#代码中?

你可以或者通过在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%确定它会起作用。