Когда предоставлять CimOperationOptions методу CIM и как узнать, что предоставить?
Я использую инфраструктуру управления Windows (MI) для выполнения ряда задач, совершая вызовы API непосредственно из C#. Многие из операций CIM и ctors берут экземпляр CimOperationOptions
, Я нашел очень мало примеров кода, который предоставляет эти параметры (и не содержит документации), и не знаю, когда они должны быть использованы и что является действительным для предоставления.
Я должен был предоставить CimOperationOptions
при создании правила туннеля IPSec, но я знал это только потому, что New-NetIPsecRule
Командлет. Этого примера было недостаточно, чтобы в целом понять, для чего используются параметры, и какие допустимые значения следует предоставить. CimOperationOptions.SetCustomOption()
msgstr "установить пользовательский параметр сервера или поставщика CIM". Но я не могу найти ссылку на то, что эти варианты, или как их определить. Так что я не знаю, как определить, нужно ли мне передавать значения через CimOperationOptions
еще раз (если я не могу найти командлет для размотки).
Может кто-нибудь объяснить, что за параметры управления, и как узнать, какие значения можно безопасно предоставить?
Разъяснение по примеру:
Например, при создании туннеля IPSec (MSFT_NetConSecRule
), дополнительные связанные объекты создаются неявно (в соответствии с DSP02223, строка 1086), такие как MSFT_NetAddressFilter.
Чтобы установить конечные точки для правила (как на рисунке)
вы предоставляете пользовательские параметры операций, определяющие "LocalAddress" и "RemoteAddress" при создании экземпляра правила. Эти значения затем применяются к неявно созданному MSFT_NetAddressFilter
, установив свойства с тем же именем. Это основной C#:
var ipSecRule = new CimInstance("MSFT_NetConSecRule");
// Add instance properties to ipSecRule here
// ...
// Have to have options to set LocalAddress/RemoteAddress for MSFT_NetAddressFilter spawned when ipSecRule is created
var opts = new CimOperationOptions();
opts.SetCustomOption("LocalAddress", new string[] { "192.168.1.0/24" }, CimType.StringArray, false);
opts.SetCustomOption("RemoteAddress", new string[] { "10.10.1.115/24" }, CimType.StringArray, false);
var cimSession = CimSession.Create(computerName: null); // null means to use the local computer
cimSession.CreateInstance("root/standardcimv2", ipSecRule, opts);
Очевидно, что он сопоставляет ключи "LocalAddress" и "RemoteAddress" со свойствами на MSFT_NetAddressFilter
, Но что, если ключ существует на нескольких порожденных объектах? Есть ли синтаксис для объявления, который нужно установить? подобно opts.SetCustomOption("ObjectName::PropertyName")
или т.п? (Я догадался о некоторых из них, но не повезло.)
Я пробовал копаться в стандартах, командлетах, декомпилированном коде (Microsoft.Management.Infrastructure.CimCmdlets.dll, Microsoft.Management.Infrastrucutre.dll, Microsoft.Windows.Firewall.Commands.dll) и не понял этого.
Microsoft.Windows.Firewall.Commands.DAPolicyChange.ProcessRecord()
на самом деле использует CimOperationOptions
для вызова MSFT_NetConSecRule.SyncPolicyDelta()
Способ; но отслеживая это через код, который я закончил в Microsoft.Management.Infrastructure.Native.<Module>.MI_Session_Invoke
, в этот момент я был потерян.
tldr; У меня есть код, который работает, когда я предоставляю CimOperationOptions
но я не знаю что CimOperationOptions
на самом деле для / как они применяются. Так что я не знаю, когда они понадобятся мне в будущем.