添加计算机到 OU 的 安全属性中,并赋予权限


PowerShell交流中心分类: Powershell基础添加计算机到 OU 的 安全属性中,并赋予权限
0
Net asked 5 年 ago

如何使用 Powershell 将指定的 “计算机 或者 用户” 添加到指定 Organizational units(OU)的安全属性中,并赋予相应的权限
如下图,我需要将 Cluster01 的计算机添加到 SQL Server OU 的安全属性中,然后赋予完全的控制权限


附上我的解决发方法

# 定义登入活动目录(DC)控制器 #######################################################################################################
$DirectoryController = "DC01"                                                                   # 定义:Domain controller 活动目录控制器的名称或者IP地址
$Password = "Admin@123"                                                                         # 定义:登入 “活动目录控制器” 的密码
$DFN = [System.Net.DNS]::GetHostByName('') | ForEach-Object {($_.HostName -split "[.]")[-2]}    # 定义:DnsForestName 域名的名称
$DomainManageUser = "$DFN\Administrator"                                                        # 定义:Domain controller 活动目录控制器的管理员
##############################################################################################################################

$DomainUserPassword = "$Password" | ConvertTo-SecureString -asPlainText -Force                              # 定义:Domain controller 活动目录控制器的管理员的密码
$UserPassword = New-Object System.Management.Automation.PSCredential($DomainManageUser,$DomainUserPassword) # 定义:Powershell 远程登入验证凭据
$PSSession = New-PSSession -ComputerName $DirectoryController -Credential $UserPassword                     # 定义:会话变量。创建 Powershell 的持久回话连接

# 1.设置活动目录中组织单位的访问规则
Invoke-Command -Session $PSSession -ScriptBlock {   # 调用命令,指定会话变量
    Import-Module ActiveDirectory                   # 导入 Domain controller 活动目录模块
    cd AD:                                          # 进入 活动目录 目录
    if ( $? -eq $true ){
        $DN = (Get-ADComputer -Identity "SQL01").DistinguishedName.Remove(0,9)  # 定义:指定SQL01计算机的 DistinguishedName (专有OU(路径))名称,并删除 CN 中的9个字符
        $SID = (Get-ADComputer -Filter 'name -like "*Cluster*"').SID            # 定义:获取计算机名称包含 “Cluster” 的计算机的 SID
        $Acl = Get-Acl -Path "AD:$DN"                                           # 定义:获取获取 $DN  的ACL
        $Ace = New-Object DirectoryServices.ActiveDirectoryAccessRule $sid,     # 定义:新建对象,活动目录访问规则,并将 Access 访问规则设置为 “完全控制”
            'GenericAll', 'Allow', '00000000-0000-0000-0000-000000000000', 'All', '00000000-0000-0000-0000-000000000000'
        $Acl.SetAccessRuleProtection($true, $true)
        $Acl.AddAccessRule($Ace)
        Set-Acl -Path "AD:$DN" -AclObject $Acl
    }
}

# 2. 获取指定 OU 设置后的,访问规则并重定向回本地的指定路径
# 再次引用,获取将制定计算机添加到指定的 OU 单元中的 Access 规则中,然后将获取的结果重定向到本机计算机的指定路径中
Invoke-Command -Session $PSSession -ScriptBlock {
    (Get-Acl -Path "AD:$DN").access | ft -AutoSize IdentityReference,ActiveDirectoryRights,InheritanceType,ObjectTypeInheritedObjectType,ObjectFlags,AccessControlType,IsInherited,InheritanceFlags,PropagationFlags
}  > "C:\DN.Access.log"
1 Answers
0
Chenry answered 5 年 ago

手上暂时没有Windows电脑,这个可以参考:

$path = "AD:\CN=Tester1,OU=Ou1,OU=OU2,OU=OU3,DC=Contoso,DC=com"
$acl = Get-Acl -Path $path
$ace = New-Object Security.AccessControl.ActiveDirectoryAccessRule('DOMAIN\Computername','FullControl')
$acl.AddAccessRule($ace)
Set-Acl -Path $path -AclObject $acl
Net replied 5 年 ago

嗯差不多,不过我是远程处理的

Net replied 5 年 ago

# 定义登入活动目录(DC)控制器 #######################################################################################################
$DirectoryController = “DC01” # 定义:Domain controller 活动目录控制器的名称或者IP地址
$Password = “Admin@123″ # 定义:登入 “活动目录控制器” 的密码
$DFN = [System.Net.DNS]::GetHostByName(”) | ForEach-Object {($_.HostName -split “[.]”)[-2]} # 定义:DnsForestName 域名的名称
$DomainManageUser = “$DFN\Administrator” # 定义:Domain controller 活动目录控制器的管理员
##############################################################################################################################

$DomainUserPassword = “$Password” | ConvertTo-SecureString -asPlainText -Force # 定义:Domain controller 活动目录控制器的管理员的密码
$UserPassword = New-Object System.Management.Automation.PSCredential($DomainManageUser,$DomainUserPassword) # 定义:Powershell 远程登入验证凭据
$PSSession = New-PSSession -ComputerName $DirectoryController -Credential $UserPassword # 定义:会话变量。创建 Powershell 的持久回话连接

# 1.设置活动目录中组织单位的访问规则
Invoke-Command -Session $PSSession -ScriptBlock { # 调用命令,指定会话变量
Import-Module ActiveDirectory # 导入 Domain controller 活动目录模块
cd AD: # 进入 活动目录 目录
if ( $? -eq $true ){
$DN = (Get-ADComputer -Identity “SQL01”).DistinguishedName.Remove(0,9) # 定义:指定SQL01计算机的 DistinguishedName (专有OU(路径))名称,并删除 CN 中的9个字符
$SID = (Get-ADComputer -Filter ‘name -like “*Cluster*”‘).SID # 定义:获取计算机名称包含 “Cluster” 的计算机的 SID
$Acl = Get-Acl -Path “AD:$DN” # 定义:获取获取 $DN 的ACL
$Ace = New-Object DirectoryServices.ActiveDirectoryAccessRule $sid, # 定义:新建对象,活动目录访问规则,并将 Access 访问规则设置为 “完全控制”
‘GenericAll’, ‘Allow’, ‘00000000-0000-0000-0000-000000000000’, ‘All’, ‘00000000-0000-0000-0000-000000000000’
$Acl.SetAccessRuleProtection($true, $true)
$Acl.AddAccessRule($Ace)
Set-Acl -Path “AD:$DN” -AclObject $Acl
}
}

# 2. 获取指定 OU 设置后的,访问规则并重定向回本地的指定路径
# 再次引用,获取将制定计算机添加到指定的 OU 单元中的 Access 规则中,然后将获取的结果重定向到本机计算机的指定路径中
Invoke-Command -Session $PSSession -ScriptBlock {
(Get-Acl -Path “AD:$DN”).access | ft -AutoSize IdentityReference,ActiveDirectoryRights,InheritanceType,ObjectTypeInheritedObjectType,ObjectFlags,AccessControlType,IsInherited,InheritanceFlags,PropagationFlags
} > “C:\DN.Access.log”