2016-12-19 12 views
0

Попробуйте предоставить право доступа на системном компьютере с помощью wmi с помощью sddl, но получите ошибку недопустимого параметра. Это моя функция:wmi SetSecurityDescriptor

function GrantSysRoot 
{ 
    Param (
     [string]$strcomputer 
    ) 
    $sec = Get-WmiObject -Class Win32_LogicalFileSecuritySetting -Filter "Path='C:\\Windows'" -ComputerName $strcomputer 
    $converter = New-Object System.Management.ManagementClass Win32_SecurityDescriptorHelper 
    $sddl = $converter.Win32SDToSDDL($sec.GetSecurityDescriptor().Descriptor) 
    $newSDDL = $sddl.SDDL += "(" + $SRSDDL + ")" 
    $Win32descriptor = $converter.SDDLToWin32SD($newSDDL) 
    $result = $sec.SetSecurityDescriptor($Win32descriptor) 

    if ($result.ReturnValue -eq 0) { 
     LogWrite "Success SystemRoot setting rights" 
    } 
    else { 
     LogWrite "An error occured with SystemRoot rights settings" 
    } 
} 

Метод SetSecurityDescriptor возвращается ошибка Недопустимый параметр. Есть идеи?

+0

Что такое '$ SRSDDL'? Он упоминается только один раз в вашем коде и никогда не определен ... – n01d

+0

$ SRSDDL определяется как простой sddl like (A ;; 0x1200a9 ;;; $ sid). – altynos

+0

Пожалуйста, разместите его в своем примере кода в том же месте, что и в вашем скрипте. – n01d

ответ

0

Решено, мы должны использовать свойство "дескриптор"

$result = $sec.SetSecurityDescriptor($Win32descriptor.Descriptor) 
0

Я думаю, вы сделали небольшую опечатку. В вашем коде я не вижу ничего определенного с помощью $ SRSDDL, но вы добавляете данные и сохраняете их в $ newSDDL. Не могли бы вы еще раз подтвердить это.

function GrantSysRoot 
{ 
Param (
[string]$strcomputer 
) 
$sec = Get-WmiObject -Class Win32_LogicalFileSecuritySetting -Filter "Path='C:\\Windows'" -ComputerName $strcomputer 
$converter = new-object system.management.ManagementClass Win32_SecurityDescriptorHelper 
$sddl = $converter.Win32SDToSDDL($sec.GetSecurityDescriptor().Descriptor) 
$newSDDL = $sddl.SDDL += "(" + $SDDL + ")" 
$Win32descriptor = $converter.SDDLToWin32SD($newSDDL) 
$result = $sec.SetSecurityDescriptor($Win32descriptor) 
if ($result.ReturnValue -eq 0){LogWrite "Success SystemRoot setting rights" 
    } else {LogWrite "An error occured with SystemRoot rights settings"} 
+0

$ SRSDDL определяется как «A ;; 0x1200a9 ;;; $ sid» – altynos

+0

Хорошо. Так вы можете поделиться образцом вывода $ sddl также после выбора win32SDToSDDL –

+0

ReturnValue: 0 SDDL: O: S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464G: S-1-5-80 -956008885-3418522649-1831 038044-1853292631-2271478464D: PAI (A ;; FA ;;; S-1-5-80-956008885-3418522649-1831038044-1853292631-227147 8464) (A; CIIO; GA ;; ; S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464) (A ;; 0x1301bf ;;; SY) ( A; OICIIO; GA ;;; SY) (A ;; 0x1301bf ;;; BA) (A; OICIIO; GA ;;; BA) (A ;; 0x1200a9 ;; BU) (A; OICIIO; GXGR ;;; BU) (A; OICIIO ; GA ;;; CO) ' – altynos