首页 文章

vbscript GPO权限 - 将组设置为拒绝“应用组策略”

提问于
浏览
1

背景(这些事实都是一成不变的,不能改变):

  • SettingA将应用于除TestGroup之外的所有用户

  • 所有用户都在同一个OU中

  • 没有组(我不能创建一个)包含"all users EXCEPT TestGroup"

  • 我需要使用vbscript来做到这一点

  • 使用Server 2003

因此,要应用SettingA,我需要设置具有权限的TestGPO(具有SettingA):

  • 具有读取和应用的经过身份验证的用户(默认权限)

  • TestGroup设置为拒绝"Apply Group Policy" .

我查看了Microsoft提供的SetGPOPermissions.wsf(此处可用 - https://gallery.technet.microsoft.com/group-policy-management-17a5f840),但这仅涵盖了基本权限(请注意,PermGPORead权限虽然没有"Apply Group Policy"权限,但所有用户都在"Authenticated Users"中,因此将获得应用GPO权限在这里,所以这并不等于拒绝)

我已经在这里为我的目的定制了脚本(但保留了相同的var名称等),并且它可以像脚本描述的那样工作,但我无法弄清楚如何使用自定义权限 . (https://books.google.co.uk/books?id=Ga1nLk_xqcUC&pg=PA430&dq=objGPOlist+item+1+getsecurityinfor&hl=en&sa=X&ved=0ahUKEwj67qq56-baAhUU3YMKHURTA1kQ6AEILTAA#v=onepage&q=objGPOlist%20item%201%20getsecurityinfor&f=false

当谈到以下行时,我可以看到我可以在最后将方法/属性从“PermGPOApply”更改为“PermGPOCustom”,但是我找不到可以放在这里的示例 .

set objGPMPerm = 
objGPM.CreatePermissions(strGroupAdd,objGPMConstants.PermGPOApply, False)

从脚本开始这一行:

setObjsecurityinfo = objGPOlist.item(1).GetSecurityInfo()

我添加了以下内容,改编自DumpGPOInfo.wsf(https://gallery.technet.microsoft.com/group-policy-management-17a5f840):

For each GPOPermission in objSecurityInfo
    wscript.echo "GPO trustee is: " & GPOPermission.Trustee.Trusteename
    wscript.echo "GPO permission is: " & GPOPermission.Permission
Next

从中我可以看到“自定义”权限显示为65795.但是,这并不确定特定的自定义权限,而是任何不属于“读取”或“编辑”括号的权限 - 因此,执行,执行,编辑和拒绝“应用组策略”将显示为65795,就像拒绝“应用组策略”一样 . 换句话说,它对我没用 .

我确实找到了如何在以下网站上设置权限的诱人参考,但后来无法从此链接中找到更多有用的信息 .

"To set Deny or Custom permissions on these objects, you still need to use Active Directory Service Interfaces—ADSI—tools such as IADsSecurityDescriptor or Microsoft's adssecurity.dll."(http://www.itprotoday.com/management-mobility/scripting-group-policy-permissions

总结一下:请有人建议如何使用vbscript设置GPO以拒绝指定组的“应用组策略” . 谢谢!

1 回答

  • 0

    无法找到使用Microsoft脚本中使用的GPMmgt.GPM COM对象的方法,因此使用DSA.exe计算权限名称和DSACL以设置权限(因为GPO是,或者当然是AD中的对象) . 我设置了读取权限,然后拒绝,我需要GPO的专有名称(DN) .

    objFSO = CreateObject("wscript.Shell")
    strCMDLineRead = "dsacls " & chr(34) & strGPO_DN & chr(34) & " /I:T /G " & strGroupAdd & ":GR"
    strCMDLineDeny = "dsacls " & chr(34) & strGPO_DN & chr(34) & " /I:T /D " & strGroupAdd & ":CA;" & chr(34) & "Apply Group Policy"  & chr(34)
    
    objShell.Run strCMLDLineRead,0, TRUE
    objShell.Run strCMLDLineDeny,0, TRUE
    

    不确定回答我自己的问题的礼仪 . 我不想只是关闭它,因为有人可能会遇到这个并发现它很有用 .

相关问题