Добавить пользователя в WMI Control и редактировать конфиги через SDDL / powershell

Я пытаюсь создать скрипт, добавляющий пользователя в root и все подпространства и дающий ему разрешение на

Execute Methods, Enable Account, Remote Enable and Read Security

через скрипт, как вы бы сделали это в wmimgmt вручную.
Я попытался экспортировать настройки wmimgmt:
$SidHelper = New-Object System.Management.ManagementClass Win32_SecurityDescriptorHelper $SdList = @($null) $(Get-WMIObject -Namespace "root" -Class __SystemSecurity).PsBase.InvokeMethod("GetSD",$SdList) [System.Management.Automation.PSSerializer]::Serialize($SdList) | Set-Content sdlist.txt
и импортировать их обратно с:
$SdList = [System.Management.Automation.PSSerializer]::Deserialize($(Get-Content sdlist.txt)) $SidHelper = New-Object System.Management.ManagementClass Win32_SecurityDescriptorHelper $RootSecurity = $(Get-WMIObject -Namespace "root" -Class __SystemSecurity) $RootSecurity.PsBase.InvokeMethod("SetSd",$SdList) (как найдено здесь)

При этом предоставляются правильные разрешения, но вместо SID пользователя, который я хочу добавить, это говорит неизвестный пользователь.
1. Ребята, вы знаете, почему скрипт не работает так, как хотелось бы?
2. Есть ли у вас идеи, как добавить пользователя и дать ему разрешения в wmimgmt через скрипт, кроме скрипта, упомянутого выше?

Спасибо и ура,
Организация Объединенных Наций

0 ответов

Я думаю, это потому, что меняется базовый тип. ** ПЕРЕД ЭКСПОРТОМ **

$sdlist.getType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

** После десерализации **

$sdlist2.getType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     ArrayList                                System.Object

** Попробуйте ввести его обратно с помощью [System.Array] ниже **

$SdList = [System.Array] [System.Management.Automation.PSSerializer]::Deserialize($(Get-Content sdlist.txt))
$SidHelper = New-Object System.Management.ManagementClass Win32_SecurityDescriptorHelper
$RootSecurity = $(Get-WMIObject -Namespace "root" -Class __SystemSecurity)
$RootSecurity.PsBase.InvokeMethod("SetSd",$SdList)

** РАБОТАЕТ ДЛЯ МЕНЯ - спасибо:) Именно то, что я искал.

Другие вопросы по тегам