You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC/C#调用Exchange远程PowerShell无法删除SMTP中继条目求助

问题原因

通过C#调用Exchange远程PowerShell会话时,Get-ReceiveConnector返回的RemoteIPRanges属性是反序列化后的只读集合,并非本地PowerShell加载Exchange管理模块时的原生可修改集合类型,因此直接使用-=运算符不会触发集合元素移除逻辑。而本地直接运行PowerShell时加载了原生Exchange类型,支持-=运算符操作,所以可以正常删除。

解决方案

推荐使用过滤构造新集合的方式实现IP删除,兼容性最高,修改后的代码如下:

powershell.AddScript(@"$connector = Get-ReceiveConnector 'Mail-01\Client FrontEnd Relay for Printer and Clients' ");
// 过滤排除目标IP,构造新的IP范围集合
powershell.AddScript(@"$newIpRanges = $connector.RemoteIPRanges | Where-Object { $_ -ne '" + entry + "' }");
powershell.AddScript(@"Set-ReceiveConnector 'Mail-01\Client FrontEnd Relay for Printer and Clients' -RemoteIPRanges $newIpRanges");
powershell.Invoke();

如果需要操作可变集合,也可以转成List类型后执行删除:

powershell.AddScript(@"$connector = Get-ReceiveConnector 'Mail-01\Client FrontEnd Relay for Printer and Clients' ");
powershell.AddScript(@"$ipList = [System.Collections.Generic.List[object]]::new($connector.RemoteIPRanges)");
powershell.AddScript(@"$ipList.Remove('" + entry + "')");
powershell.AddScript(@"Set-ReceiveConnector 'Mail-01\Client FrontEnd Relay for Printer and Clients' -RemoteIPRanges $ipList");
powershell.Invoke();

注意事项

  • 确保传入的entry格式和RemoteIPRanges中存储的IP格式完全一致,单IP、IP段、CIDR格式不匹配会导致过滤无法命中。
  • 可在调用Set-ReceiveConnector前增加校验逻辑,确认过滤后的集合符合预期,避免误删所有IP条目。

内容的提问来源于stack exchange,提问作者Reactor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 21:24:07