将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%确定它会起作用。