单个哈希中的Powershell多个表达式(C#)

时间:2017-07-24 20:58:03

标签: c# powershell dns hashtable

我正在尝试检索一些DNS记录数据,并希望找回主机名及其IPv4地址。在做了一些研究后,我发现为了获得IPv4地址,我需要做一个计算表达式:

ps.AddParameter("Property",              
        new Hashtable
        {
            {"Name", "RecordData"},
            {"Expression", ScriptBlock.Create("$_.RecordData.IPv4Address")}
        });

我也可以通过直截了当地获取主机名:

ps.AddParameter("Property", "HostName");

或类似于计算的表达式:

ps.AddParameter("Property",
    new Hashtable
    {
        {"Name", "HostName"},
        {"Expression", ScriptBlock.Create("$_.hostname,")},
    });

我的问题是我不能为我的生活弄清楚如何同时结合这两者。我非常希望不要单独执行Select-Object命令,这样我就可以确保Hostname和IP引用相同的DNS记录。

此外,我尝试连续执行这些操作并收到错误:

Cannot bind parameter because parameter 'Property' is specified more than once. To provide multiple values to parameters that can accept multiple values, use the array syntax. For example, "-parameter value1,value2,value3"

1 个答案:

答案 0 :(得分:3)

连续完成它们相当于做

... |Select-Object -Property {Name="RecordData";Expression={$_.RecordData.IPv4Address)} -Property {Name="HostName";Expression={$_.HostName}}

这就是你看到错误的原因。

您需要提供一个哈希表数组作为参数参数值:

ps.AddParameter("Property", new object[] {
    new Hashtable
    {
        {"Name", "RecordData"},
        {"Expression", ScriptBlock.Create("$_.RecordData.IPv4Address")}
    },
    new Hashtable
    {
        {"Name", "HostName"},
        {"Expression", ScriptBlock.Create("$_.HostName")}
    }

});