基于 $variable.name 匹配安全组名称

问题描述

好的,我正在尝试在特定 OU 下自动创建安全组。关键是群组成员资格,所以基本上If member of group A -> create group B.

所以我用“所有经理”组的名称属性填充变量。然后我想遍历这些 $names 并使用 {Name -like 'Reports to $name'}

检查另一个组的存在

循环部分让我失望,这就是我所拥有的:

import-module activedirectory

$ou = "ou=Stuff,ou=Resources,ou=Groups,ou=Org,dc=domain,dc=net"


$creds = "domain.net\user"
$server = "<domain controller>"



$managers = get-adGroupMember -server $server -Credential $creds -identity "All Managers" | select name
$name = $managers.name

    $ReportsTo = Get-adgroup -server $server -credential $creds -searchbase $ou -filter "Name -like 'Reports to *'" | where {$_.name -replace 'Reports to ' -in $name} | select name
$Reports = $reportsto.name
$reports

    
     
ForEach ($manager in $managers){
    
    If ($ReportsTo -NotContains $name)
    #{$name}
    {New-ADGroup -name "Reports to "$name -groupscope Global -path $ou}

} 

我知道这很丑陋,但就像我说的我不知道如何处理循环,它们对我来说仍然是新的。

解决方法

您可以执行以下操作:

$ou = 'ou=Stuff,ou=Resources,ou=Groups,ou=Org,dc=domain,dc=net'
$creds = "domain.net\user"
$server = "<domain controller>"

# Get Manager names only
$managers = Get-ADGroupMember -Server $server -Credential $creds -Identity 'All Managers' |
    Select-Object -ExpandProperty Name

# Get Group names that are in the format Reports to Manager Name
$ReportsTo = Get-ADGroup -Server $server -Credential $creds -SearchBase $ou -Filter "Name -like 'Reports to *'" |
    where {$_.Name -replace 'Reports to ' -in $managers} |
        Select-Object -ExpandProperty Name

# Find manager names that don't have a Reports to group
Compare-Object $managers ($ReportsTo -replace 'Reports to ') -PassThru | Foreach-Object {
    # Pipe found manager names into New-ADGroup command's -Name parameter
    New-ADGroup -Name "Reports to $_" -GroupScope Global -Path $ou -Server $server -Credential $creds
}

Compare-Object 默认仅列出差异。