PowerShell ParameterBindingException

我目前正在构建一个应用程序,以便从ASP.NET MVC网站自动执行一些Exchange 2010操作。

现在,当我尝试调用New-AddressList命令时,我遇到了ParameterBindingException。

我正在尝试创建以下调用(其工作原理):

new-AddressList -Name "7 AL" -RecipientContainer "myDomain.local/Customers/7" -IncludedRecipients 'AllRecipients' -Container '' -DisplayName "7 AL"

我是这样做的:

var NewAddressList = new Command("New-AddressList");
NewAddressList.Parameters.Add("Name", "7 AL");
NewAddressList.Parameters.Add("RecipientContainer", "myDomain.local/Customers/7");
NewAddressList.Parameters.Add("IncludedRecipients", "AllRecipients");
NewAddressList.Parameters.Add("Container", @"");
NewAddressList.Parameters.Add("DisplayName", "7 AL");
CommandsList.Add(NewAddressList);

该命令列表提供给我调用的管道,给我以下错误:

New-AddressList:输入对象不能绑定到该命令的任何参数,因为该命令不需要管道输入,或者输入及其属性不匹配任何采用流水线输入的参数。

  • CategoryInfo:InvalidArgument:(7:PSObject)[New-AddressList],ParameterBindingException
  • FullyQualifiedErrorId:InputObjectNotBound,Microsoft.Exchange.Management.SystemConfigurationTasks.NewAddressList
  • 任何可能导致这种情况的线索?

    用Trace-Command输出给出:

    PS C:Usersext_kefu> Trace-Command -Name parameterbinding -Expression {New-AddressList -Name "7 AL" -RecipientContainer "myDomain.local/Customers/7" -IncludedRecipients 'AllRecipients' -Container '' -DisplayName "7 AL"} -PSHost
    DEBUG: ParameterBinding Information: 0 : BIND NAMED cmd line args [New-AddressList]
    DEBUG: ParameterBinding Information: 0 :     BIND arg [7 AL] to parameter [Name]
    DEBUG: ParameterBinding Information: 0 :         COERCE arg to [System.String]
    DEBUG: ParameterBinding Information: 0 :             Parameter and arg types the same, no coercion is needed.
    DEBUG: ParameterBinding Information: 0 :         BIND arg [7 AL] to param [Name] SUCCESSFUL
    DEBUG: ParameterBinding Information: 0 :     BIND arg [myDomain.local/Customers/7] to parameter [RecipientContainer]
    DEBUG: ParameterBinding Information: 0 :         COERCE arg to [Microsoft.Exchange.Configuration.Tasks.OrganizationalUnitIdParameter]
    DEBUG: ParameterBinding Information: 0 :             Trying to convert argument value from System.String to Microsoft.Exchange.Configuration.Tasks.OrganizationalUnitIdParameter
    DEBUG: ParameterBinding Information: 0 :             CONVERT arg type to param type using LanguagePrimitives.ConvertTo
    DEBUG: ParameterBinding Information: 0 :             CONVERT SUCCESSFUL using LanguagePrimitives.ConvertTo: [myDomain.local/Customers/7]
    DEBUG: ParameterBinding Information: 0 :         BIND arg [myDomain.local/Customers/7] to param [RecipientContainer] SUCCESSFUL
    DEBUG: ParameterBinding Information: 0 :     BIND arg [AllRecipients] to parameter [IncludedRecipients]
    DEBUG: ParameterBinding Information: 0 :         COERCE arg to [System.Nullable[Microsoft.Exchange.Data.Directory.Recipient.WellKnownRecipientType]]
    DEBUG: ParameterBinding Information: 0 :             Trying to convert argument value from System.String to System.Nullable[Microsoft.Exchange.Data.Directory.Recipient.WellKnownRecipientType]
    DEBUG: ParameterBinding Information: 0 :             CONVERT arg type to param type using LanguagePrimitives.ConvertTo
    DEBUG: ParameterBinding Information: 0 :             CONVERT SUCCESSFUL using LanguagePrimitives.ConvertTo: [AllRecipients]
    DEBUG: ParameterBinding Information: 0 :         BIND arg [AllRecipients] to param [IncludedRecipients] SUCCESSFUL
    DEBUG: ParameterBinding Information: 0 :     BIND arg [] to parameter [Container]
    DEBUG: ParameterBinding Information: 0 :         COERCE arg to [Microsoft.Exchange.Configuration.Tasks.AddressListIdParameter]
    DEBUG: ParameterBinding Information: 0 :             Trying to convert argument value from System.String to Microsoft.Exchange.Configuration.Tasks.AddressListIdParameter
    DEBUG: ParameterBinding Information: 0 :             CONVERT arg type to param type using LanguagePrimitives.ConvertTo
    DEBUG: ParameterBinding Information: 0 :             CONVERT SUCCESSFUL using LanguagePrimitives.ConvertTo: []
    DEBUG: ParameterBinding Information: 0 :         BIND arg [] to param [Container] SUCCESSFUL
    DEBUG: ParameterBinding Information: 0 :     BIND arg [7 AL] to parameter [DisplayName]
    DEBUG: ParameterBinding Information: 0 :         COERCE arg to [System.String]
    DEBUG: ParameterBinding Information: 0 :             Parameter and arg types the same, no coercion is needed.
    DEBUG: ParameterBinding Information: 0 :         BIND arg [7 AL] to param [DisplayName] SUCCESSFUL
    DEBUG: ParameterBinding Information: 0 : BIND POSITIONAL cmd line args [New-AddressList]
    DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [New-AddressList]
    DEBUG: ParameterBinding Information: 0 : CALLING BeginProcessing
    DEBUG: ParameterBinding Information: 0 : CALLING EndProcessing
    
    Name                      DisplayName               RecipientFilter
    ----                      -----------               ---------------
    7 AL                      7 AL                      Alias -ne $null
    

    我发现每个命令都必须单独调用,因为它们不相关。 这个问题源于我对Powershell管道概念的误解。


    你为什么要将命令声明为var ? 我的意思是:

    Command NewAddressList = new Command("New-AddressList");
    

    然后,尝试添加命令作为CommandParameter对象(如此处所示):

    CommandParameter NameParam = new CommandParameter("Name","7 AL");
    NewAddressList.Parameters.Add(NameParam);
    

    最后,为什么你不直接使用Powershell类?


    编辑:跟踪后的进一步猜测

    Parameters.Add的重载版本使用的Parameters.Add是一个键(字符串)和一个值(对象)。 可能c#没有做同样的好工作powershell不会:/。 尝试将值作为所需类型的对象传递。 例如, included-recipient参数需要Microsoft.Exchange.Data.Directory.Recipient.WellKnownRecipientType

    尝试施放。

    例:

    Microsoft.Exchange.Data.Directory.Recipient.WellKnownRecipientType allrecips = (Microsoft.Exchange.Data.Directory.Recipient.WellKnownRecipientType) "AllRecipients";
    NewAddressList.Parameters.Add("IncludedRecipients", allrecips);
    

    或者(我知道这可能很愚蠢):

    NewAddressList.Parameters.Add("IncludedRecipients", "[Microsoft.Exchange.Data.Directory.Recipient.WellKnownRecipientType] AllRecipients");
    
    链接地址: http://www.djcxy.com/p/6461.html

    上一篇: PowerShell ParameterBindingException

    下一篇: Does JSON syntax allow duplicate values?