Powershell 管理.自动化参数绑定异常

问题描述 投票:0回答:1

我尝试在代码中运行此命令,并使用 AddArgument 命令来实现

Select PrimarySMTPAddress
,但在代码中我收到一条错误消息。

错误

System.Management.Automation.ParameterBindingException: 'A positional parameter cannot be found that accepts argument 'Select PrimarySMTPAddress'.'

PowerShell 工作

Get-DistributionGroupMember -Identity emailaddress -ResultSize Unlimited | Select PrimarySMTPAddress

c# 代码

powerShell.AddCommand("get-distributiongroupmember");
powerShell.AddParameter("Identity", distributionGroup.Name);
powerShell.AddArgument("Select PrimarySMTPAddress");
c# powershell office365 azure-automation
1个回答
1
投票

基本上你缺少

.AddCommand("Select-Object")
(注意:
Select
Select-Object
的别名),那么你可以将它链接到
AddArgument("PrimarySMTPAddress")
并且它应该可以正常工作。我无权访问
Get-DistributionGroupMember
,但使用内置 cmdlet 和与您类似的语句:

Get-ChildItem -Filter *.ps1 -File -Recurse |
    Select-Object FullName

看起来像这样:

public static Collection<PSObject> Invoke()
{
    using PowerShell ps = PowerShell.Create()
        .AddCommand("Get-ChildItem")
        .AddParameters(new Dictionary<string, object>()
        {
            { "Filter", "*.ps1" },
            { "File", true },
            { "Recurse", true }
        })
        .AddCommand("Select-Object")
        .AddArgument("FullName");

    return ps.Invoke();
}

您可能会发现使用

.AddParameters
绑定参数更容易,如上面所示。


您的用例的声明可能如下所示:

public static Collection<PSObject> Invoke()
{
    using PowerShell ps = PowerShell.Create()
        .AddCommand("Get-DistributionGroupMember")
        .AddParameters(new Dictionary<string, object>()
        {
            { "Identity", "emailAddress" },
            { "ResultSize", "Unlimited" }
        })
        .AddCommand("Select-Object")
        .AddArgument("PrimarySMTPAddress");

    return ps.Invoke();
}

如果您想选择多个房产,您可以这样做:

        .AddCommand("Select-Object")
        .AddArgument(new string[] { "PrimarySMTPAddress", "OtherProp", .. });
© www.soinside.com 2019 - 2024. All rights reserved.