使用Hashtable和ScriptBlock作为C#参数的PowerShell

时间:2015-07-21 09:12:04

标签: c# .net powershell hashtable scriptblock

我正在尝试向Exchange-Server执行一些远程PowerShell命令。 现在我在参数中执行ScriptBlocks时遇到问题。

我的C#代码如下:

    List<object> parameters = new List<object>()
    {
        "DisplayName","Guid","ManagedBy",
        new Hashtable()
        {
            {"Name","NameRename"},
            {"Expression","Name"}
        }
    };


    powershell.AddCommand("Get-DistributionGroup");
    powershell.AddParameter("ResultSize", "unlimited");
    powershell.AddCommand("Select-Object");
    powershell.AddParameter("Property", parameters);
    powershell.AddParameter("ExpandProperty", "ManagedBy");

    parameters = new List<object>()
    {
        "DisplayName","Guid","NameRename",new Hashtable()
        {
            {"Name","ManagedByGuid"},
            {"Expression",ScriptBlock.Create("($_.ManagedBy).ObjectGuid -join ','")}
        }
    };

    powershell.AddCommand("Select-Object");
    powershell.AddParameter("Property", parameters);

    Collection<PSObject> result = powershell.Invoke();

我知道有一些东西缺失(runpace open f.e.)但是这段代码应该只是一个例子,因为我的实际代码动态工作,所以你看不到真正的命令。有什么......我的结果显示我为“ManagedByGuid”列的null。第一个参数中的重命名仅在表达式中根本没有脚本时才有效(一旦我将表达式设置为ScriptBlock.Create("$_.Name"),它也会传递空值)。 所以似乎powershell没有执行scriptblock而只是在没有脚本编写的情况下仅仅在普通的情况下评估字符串...

当我而不是分离命令时,将一个完成的脚本作为字符串传递给powershell,它的工作正常....例如:

powershell.AddScript("Get-DistributionGroup -ResultSize unlimited | Select-Object -Property Alias,Guid,DisplayName,WhenChanged,WhenCreated,@{name=\"NameRename0\";expression={$_.Name}},ManagedBy -expand ManagedBy  |Select-Object Alias,Guid,DisplayName,WhenCreated,WhenChanged,NameRename0,@{Name=\"ObjectGuid\";expression={ ($_.ManagedBy).ObjectGuid -join ',' }} -unique");

我也可以使用这种方法,但首先我不想重做我的所有代码,其次,scripblock也应该有用吗?

有没有人知道为什么这不起作用...... ??

0 个答案:

没有答案