Я занимался этой проблемой около двух недель, и, к сожалению, у вас есть два варианта, в зависимости от необходимой вам глубины контроля:
1) Прямые манипуляции с WMI. Неудобно, что на самом деле это дает МЕНЬШЕ контроля, чем вариант № 2 (что я и делаю сам). Все это делается с помощью класса Win32_NetworkAdapterConfiguration. Вот ссылка на вопрос, который я задал по этому поводу, и мой ответ на него спустя некоторое время после исследования:
Методы программного изменения правил ipsec с помощью C #?
Это предоставляет меньше функциональности, потому что через IPsec для адаптеров можно управлять только тремя вещами: TCP-порты, UDP-порты, IP-протоколы. (Вы не можете работать с несколькими политиками, разными масками подсетей и т. Д.)
2) Обернуть netsh ipsec, чтобы сделать всю вашу грязную работу. Это правильный путь, поскольку в PowerShell (который можно вызывать с помощью класса PowerShell в System.Management.Automation) в настоящее время отсутствует командлет для внесения изменений IPSec.
Есть ли в PowerShell 2 командлет для обработки изменений ipsec?
Обертывание netsh ipsec через конвейер powershell, вызываемый через System.Management.Automation.PowerShell - это то, что я в итоге сделал.
Используйте либо System.Diagnostics.Process для порождения и управления оболочкой, либо используйте класс PowerShell, как упомянуто выше. Либо должен получить работу.
Примечание
Если в какой-то момент вы переключитесь на 2008, обратите внимание, что netsh ipsec устарел, и убедитесь, что вместо него используется netsh advfirewall.
Удачи!