如何通过 C# 在 powershell 中传递一个应该为 $null 的参数

How do I pass a parameter that should be $null in powershell via C#

Exchange 管理要求您将 $null 作为参数传递以从邮箱中删除转发:

设置邮箱-ForwardingAddress $null -DeliverToMailboxAndForward $false

这个(恕我直言)翻译成:

command = new PSCommand().AddCommand("Set-Mailbox");
          command.AddParameter("Identity",task.TargetUser);
          command.AddParameter("FowardingAddress", null);
          command.AddParameter("DeliverToMailboxAndForward", false);
ps.Commands=command;
var results = ps.Invoke();

不幸的是,Invoke 在 "ForwardingAddress" 设置上阻塞:找不到与参数名称 'FowardingAddress'.

匹配的参数

如何传递以 $null 结尾的参数?

如果该参数是字符串类型,那么您应该能够传递这个值:

System.Management.Automation.Language.NullString.Value

或包括

using System.Management.Automation.Language;

之后

command.AddParameter("ForwardingAddress",NullString.Value);

另一种选择是通过 AddScript 方法使用 $null

var script = String.Format("Set-Mailbox -Identity {0} -ForwardingAddress $null -DeliverToMailboxAndForward $false", task.TargetUser);
new PSCommand().AddScript(script);

通过 null 应该没问题。如 this question 所示,C# 的空值映射到 $null.

假设您显示的代码是直接从您的解决方案复制粘贴的,我猜问题是您将值传递给参数 "FowardingAddress",而不是 "ForwardingAddress"(注意缺少的 'r')。一个简单的错字,而不是类型不匹配。 :)