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

标签 c# powershell

我读了很多关于将变量从 C# 传递到 powershell 脚本的文章,但我对相反的方式很感兴趣。

这里我有这段代码可以在我的 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()
    {
    }
}

'@

我如何才能在上面的 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% 确定它会起作用。

关于c# - 将 powershell 变量传递给 PS 脚本中的 C# 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22383635/

相关文章:

c# - 新的 C# 5.0 'async' 和 'await' 关键字是否使用多核?

c# - 如何强制 Entity Framework 映射 `internal` 导航属性?

c# - Entity Framework 从字符串中获取特定列

sql - PowerShell - 格式化 SQL 输出并将其写入 CSV

powershell - 在PowerShell中解析数​​千个小文件的最快方法

c# - 对运算符重载感到困惑

c# - 将 DataGrid 导出到文本文件

powershell - 从哈希表数组的键创建数组

azure - 用于从 Azure 文件共享还原 Azure SQL 数据库的 PowerShell 脚本

powershell - New-PSSession 在本地不起作用