【问题标题】:vbscript GPO permissions - set group to deny "Apply Group Policy"vbscript GPO 权限 - 将组设置为拒绝“应用组策略”
【发布时间】:2018-10-12 11:45:27
【问题描述】:

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

  • SettingA 将应用于除 TestGroup 之外的所有用户
  • 所有用户都在同一个 OU 中
  • 没有包含“除 TestGroup 之外的所有用户”的组(我无法创建)
  • 我需要使用 vbscript 执行此操作
  • 使用 Server 2003

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

  • 经过身份验证的用户具有读取和应用权限(默认权限)
  • TestGroup 设置为拒绝“应用组策略”。

我查看了 Microsoft 提供的 SetGPOPermissions.wsf(可在此处获得 - https://gallery.technet.microsoft.com/group-policy-management-17a5f840),但这仅涵盖基本权限(请注意,PermGPORead 权限,虽然它没有“应用组策略”权限,但所有用户都在"Authenticated Users" 所以会从这里获得 Apply 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,就像拒绝“应用组策略”一样。换句话说,它对我没有用。

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

“要对这些对象设置拒绝或自定义权限,您仍然需要使用 Active Directory 服务接口 - ADSI - 工具,例如 IADsSecurityDescriptor 或 Microsoft 的 adssecurity.dll。” (http://www.itprotoday.com/management-mobility/scripting-group-policy-permissions)

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

【问题讨论】:

    标签: vbscript permissions gpo


    【解决方案1】:

    找不到使用 Microsoft 脚本中使用的 GPMmgt.GPM COM 对象的方法,因此使用 DSA.exe 来计算权限的名称并使用 DSACL 来设置权限(因为 GPO 是或者当然是一个对象在广告中)。我设置读取权限,然后拒绝,我需要 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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-18
      • 1970-01-01
      • 2017-12-04
      • 2022-07-06
      • 1970-01-01
      • 2022-01-01
      • 2015-07-03
      相关资源
      最近更新 更多