我尝试在代码中运行此命令,并使用 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");
基本上你缺少
.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", .. });