AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 734452
Accepted
curropar
curropar
Asked: 2015-11-07 04:59:04 +0800 CST2015-11-07 04:59:04 +0800 CST 2015-11-07 04:59:04 +0800 CST

使用 Powershell 拒绝 GPO 权限时出错

  • 772

我试图找到一种方法为几个 GPO(大约 50 个)中的某个组设置“应用策略”为“拒绝”,所以当我在一个(显然)使用以下脚本放弃了博客:

$strGroup = "my group" 
$strGPO = "my GPO"

$GroupObject = Get-ADGroup $strGroup 
$GroupSid = new-object System.Security.Principal.SecurityIdentifier $GroupObject.SID 
$GPOObject = Get-GPO $strGPO

$GPOPath = $GPOObject.path 
$GPOADObject = [ADSI]"LDAP://$GPOPath" 
$GPOObjSec = $GPOADObject.psbase.ObjectSecurity 
$GPOACLList = $GPOObjSec.GetAccessRules($true,$true,[System.Security.Principal.SecurityIdentifier])

$extRight = [system.guid]"edacfd8f-ffb3-11d1-b41d-00a0c968f939" 
$ace1 = new-object System.DirectoryServices.ActiveDirectoryAccessRule $GroupSid,"ReadProperty, GenericExecute","Deny","None" 
$ace2 = new-object System.DirectoryServices.ActiveDirectoryAccessRule $GroupSid,"ExtendedRight","Deny",$extRight,"All" 
$GPOADObject.psbase.get_objectSecurity().AddAccessRule($ace1) 
$GPOADObject.psbase.get_objectSecurity().AddAccessRule($ace2) 
$GPOADObject.psbase.CommitChanges()

$GPOGPTstr = "\\"+$GPOObject.DomainName+"\SYSVOL\"+$GPOObject.DomainName+"\Policies\{"+$GPOObject.Id+"}" 
$acl = Get-ACL $GPOGPTstr

$acl.SetAccessRuleProtection($True, $False) 
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule($strGroup,"ReadAndExecute", "ContainerInherit, ObjectInherit", "None", "Deny") 
$acl.AddAccessRule($rule) 
Set-Acl $GPOGPTstr $acl

我已经添加了一个foreach循环,以从文本文件中获取我的组。它可以工作,除了第 14 行:

$ace1 = new-object System.DirectoryServices.ActiveDirectoryAccessRule $GroupSid,"ReadProperty, GenericExecute","Deny","None" 

这会引发以下错误:

new-object : Multiple ambiguous overloads found for "ActiveDirectoryAccessRule" and the argument count: "4".
At .\denyApplyGPOtoGroup.ps1:16 char:10
+     $ace1 = new-object System.DirectoryServices.ActiveDirectoryAccessRule $GroupSid ...
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [New-Object], MethodException
    + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand

当然,第 16 行失败,$ace1就像$null. 尽管如此,脚本还是有效的:基本上,权限被正确地应用到 GPC,而不是 GPT,这对代码和抛出的错误是有意义的。所以当我去 GPMC,点击 GPO,我收到一条消息说:

“SYSVOL 文件夹中此 GPO 的权限与 Active Directory 中的权限不一致。建议这些权限保持一致。要将 SYSVOL 中的权限更改为 Active Directory 中的权限,请单击“确定”。”

单击“确定”可修复混乱,但仍在寻找解决此变通办法的方法……有什么想法吗?

group-policy
  • 1 1 个回答
  • 1955 Views

1 个回答

  • Voted
  1. Best Answer
    Rolf Lobker
    2016-01-12T07:00:40+08:002016-01-12T07:00:40+08:00

    删除 $ace1 并删除这些行;

    $GPOGPTstr = "\\"+$GPOObject.DomainName+"\SYSVOL\"+$GPOObject.DomainName+"\Policies\{"+$GPOObject.Id+"}" 
    $acl = Get-ACL $GPOGPTstr
    
    $acl.SetAccessRuleProtection($True, $False) 
    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($strGroup,"ReadAndExecute", "ContainerInherit, ObjectInherit", "None", "Deny") 
    $acl.AddAccessRule($rule) 
    Set-Acl $GPOGPTstr $acl
    

    您只需要添加拒绝应用权限即可。因此,您无需更改 Sysvol 策略文件夹上的 ACL,也不想删除读取权限。

    $ace1 删除读取策略权限。

    最终代码是这样的:

    $strGroup = "Domain Admins" 
    $strGPO = "RES Workspace Manager Shell"
    
    $GroupObject = Get-ADGroup $strGroup 
    $GroupSid = new-object System.Security.Principal.SecurityIdentifier $GroupObject.SID 
    $GPOObject = Get-GPO $strGPO
    
    $GPOPath = $GPOObject.path 
    $GPOADObject = [ADSI]"LDAP://$GPOPath" 
    $GPOObjSec = $GPOADObject.psbase.ObjectSecurity 
    $GPOACLList = $GPOObjSec.GetAccessRules($true,$true,[System.Security.Principal.SecurityIdentifier])
    
    $extRight = [system.guid]"edacfd8f-ffb3-11d1-b41d-00a0c968f939" 
    
    $ace = new-object System.DirectoryServices.ActiveDirectoryAccessRule $GroupSid,"ExtendedRight","Deny",$extRight,"All" 
    
    $GPOADObject.psbase.get_objectSecurity().AddAccessRule($ace) 
    $GPOADObject.psbase.CommitChanges()
    
    • 2

相关问题

  • 如何删除本地管理员权限?

  • Windows 中的安装权限管理

  • 如何通过 GPO 授予漫游用户帐户在 Windows Server 2003 上的安装权限?

  • 如何在 Windows 2003 的 ou 级别应用策略

  • 什么是 ADM 模板?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve