将用户添加到WMI控制并通过SDDL / powershell编辑配置

时间:2019-01-31 12:33:36

标签: powershell wmi wmic ps1

我正在尝试创建一个脚本,将用户添加到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)(在here中发现)

执行此操作时,将授予正确的权限,但我要添加的不是用户的SID,而是未知用户。
1.你们知道为什么脚本未按预期运行吗?
2.除了上面提到的脚本之外,您是否知道如何通过脚本在wmimgmt中添加用户并向其授予权限?

感谢和欢呼,
Uno

1 个答案:

答案 0 :(得分: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)

**对我有用-谢谢:) 正是我想要的。