none
Смена владельца ветви реестра @ powershell RRS feed

  • Вопрос

  • Добрый день всем!

    Помогите разобраться со сменой владельца на ветвь реестра вместе с её содержимым:

    if ((test-path HKCR:) -eq $False) {
    New-PSDrive -name HKCR -PSProvider registry -root HKLM:\SOFTWARE\Classes}
    $reg_path = 'HKCR:\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}'
    $user = New-Object System.Security.Principal.NTAccount(‘dom\max’)
    $user = [System.Security.Principal.NTAccount]”dom\max”

    $acl = Get-Acl -Path $reg_path
    $acl.SetOwner($user)
    $acl.Path
    $acl.Owner
    $ACL | Set-Acl $reg_path

    New-ItemProperty -Path $reg_path -Name LocalizedString -PropertyType ExpandString -Value '%ComputerName% : %UserDomain%\%UserName%' -Force

    Что не так?

    ЗЫ:Нашел способ с использованием PowerShell Community Extensions 1.1.1, но хотелось бы запускать политиками на всех компах домена


    • Изменено JabBaton 15 ноября 2013 г. 6:53
    15 ноября 2013 г. 6:27

Ответы

Все ответы

  • $hklm = "2147483650"
    $key = "SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}"
    
    $reg = [wmiclass]"\\.\root\default:stdregprov"
    $reg.psbase.Scope.Options.EnablePrivileges = $true
    
    
    $user = "Administrator"
    $SD = ([WMIClass] "Win32_SecurityDescriptor").CreateInstance()
    $ace = ([WMIClass] "Win32_ace").CreateInstance()
    $Trustee = ([WMIClass] "Win32_Trustee").CreateInstance()
    $SID = (new-object security.principal.ntaccount $user).translate([security.principal.securityidentifier])
    [byte[]] $SIDArray = ,0 * $SID.BinaryLength
    $SID.GetBinaryForm($SIDArray,0)
    $Trustee.Name = $user
    $Trustee.SID = $SIDArray
    
    $SD.Owner = $Trustee
    $SD.ControlFlags = "0x8000"
    $reg.SetSecurityDescriptor($hklm,$key,$sd)

    • Помечено в качестве ответа JabBaton 15 ноября 2013 г. 6:56
    15 ноября 2013 г. 6:52
    Отвечающий
  • Kazun, добрый день. Я понимаю что опыт, но где о них почитать???
    • Изменено JabBaton 15 ноября 2013 г. 7:13
    15 ноября 2013 г. 6:54
  • Kazun, добрый день. Откуда вы это берете? Я понимаю что опыт, но такого рода команды...где о них почитать???
    В библиотеки разработчика Microsoft - http://msdn.microsoft.com/en-us/library/ms123401
    15 ноября 2013 г. 6:56
    Отвечающий
  • Мне бы еще в элементы разрешений добавить Administrators и SYSTEM права FULL.

    Я так понимаю делается это все через $ace = ([WMIClass] "Win32_ace").CreateInstance(), добавляю

    $ace.AccessMask = 2032127
    $ace.AceFlags = 3
    $ace.AceType = 0
    $ace.Trustee = $trustee

    $sd.ControlFlags = 4
    $sd.DACL = $ace
    $sd.group = $trustee


    но я так понимаю чтото делаю не так


    • Изменено JabBaton 15 ноября 2013 г. 10:03
    15 ноября 2013 г. 10:02
    • Помечено в качестве ответа JabBaton 15 ноября 2013 г. 12:27
    15 ноября 2013 г. 11:02
    Отвечающий
  • $hklm = "2147483650"
    $key = "SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}"

    $reg = [wmiclass]"\\.\root\default:stdregprov"
    $olddacl = $reg.GetSecurityDescriptor($hklm,$key).Descriptor.DACL


    $user = "СИСТЕМА"
    $SD = ([WMIClass] "Win32_SecurityDescriptor").CreateInstance()
    $ace = ([WMIClass] "Win32_ace").CreateInstance()
    $Trustee = ([WMIClass] "Win32_Trustee").CreateInstance()
    $SID = (new-object security.principal.ntaccount $user).translate([security.principal.securityidentifier])
    [byte[]] $SIDArray = ,0 * $SID.BinaryLength
    $SID.GetBinaryForm($SIDArray,0)
    $Trustee.Name = $user
    $Trustee.SID = $SIDArray
    $ace.AccessMask = [System.Security.AccessControl.RegistryRights]::FullControl
    $ace.AceFlags = "0x3"
    $ace.AceType = 0
    $ace.Trustee = $trustee

    $SD.DACL = $olddACL
    $SD.DACL += @($ace.psobject.baseobject)
    $SD.ControlFlags = "0x4"
    $reg.SetSecurityDescriptor($hklm,$key,$sd)

    Ничего не происходит. В чем проблема? (win8.1)

    Владелец, соответственно, Administrator
    • Изменено JabBaton 15 ноября 2013 г. 12:08
    15 ноября 2013 г. 12:02
  • Проверил работает(с учетом того, что запускается от пользователя у которого есть права на изменение разрешений, т.е. сначала меняем owner) 
    15 ноября 2013 г. 12:09
    Отвечающий
  • Есть вариант что на PS4 не работает? После выполнения выше описанного без изменений

    • Изменено JabBaton 15 ноября 2013 г. 12:21
    15 ноября 2013 г. 12:18
  • Есть вариант что на PS4 не работает?

    Я тестировал на Windows 8.1(PowerShell 4.0 установлен по умолчанию)

    Вывод:

    1) $env:UserName

    2) get-acl "HKLM:\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}"

    3) $reg.SetSecurityDescriptor($hklm,$key,$sd)

    15 ноября 2013 г. 12:22
    Отвечающий
  • Все работает! Спасибо.

    Цеплял на владельца Administrator домена. А она отключена) $user = "./system"

    15 ноября 2013 г. 12:27