C#调用PowerShell遇ParameterBindingException错误求助
C#调用PowerShell执行分发组成员查询时参数绑定错误
报错信息
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");
修复方案
错误原因是AddArgument("Select PrimarySMTPAddress")把整段字符串当成了Get-DistributionGroupMember的位置参数,但该命令并不接受这个参数。要实现PowerShell中的管道操作(|),在C#的PowerShell SDK里需要用AddCommand添加后续命令,而非AddArgument:
// 添加主命令并设置参数 powerShell.AddCommand("get-distributiongroupmember"); powerShell.AddParameter("Identity", distributionGroup.Name); powerShell.AddParameter("ResultSize", "Unlimited"); // 补上原PowerShell命令中的ResultSize参数 // 添加管道后的Select-Object命令 powerShell.AddCommand("select-object"); powerShell.AddArgument("PrimarySMTPAddress");
说明:
AddCommand用于添加管道分隔的每一个命令,对应PowerShell中的管道逻辑- 原PowerShell命令里的
-ResultSize Unlimited必须补充到C#代码中,否则查询结果数量会受默认限制 Select PrimarySMTPAddress本质是调用Select-Object命令并传入PrimarySMTPAddress作为参数,因此需要单独添加该命令并传递参数
内容的提问来源于stack exchange,提问作者Jefferson
相关产品推荐
相关产品推荐

