将用户匹配到Hashmap

时间:2018-07-19 00:11:12

标签: windows powershell

某些PowerShell出现问题,我需要一些帮助,以正确的方式解决问题。

我们即将淘汰Okta服务器,因为它很垃圾,但是它做了一些我们需要的事情,例如动态组管理。

我还有其他脚本,在其中为我创建的GUI编写了有序词典,以补充我们的O365租户,以将位置与OU目录匹配。

我想要做的是匹配我们指定用户目录中的所有用户,然后根据这些用户分配这些用户。我已经为要分配给它们的通讯组创建了另一个字典。

这是我到目前为止所得到的。我确定我做的太过头了。

$TargetDGs = [ordered]@{}
$adg = Get-ADGroup -SearchBase "OU=Automagic Populating,OU=Groups"  -Filter *
$adg | % { $TargetDGs.add($_.Name, $_.DistinguishedName) }

$users = Get-ADUser -Filter {(Enabled -eq $true)} 

$sites = [ordered]@{
    'Amsterdam'             = "OU=Users,OU=Amsterdam,OU=Europe,OU=Sites,DC=MYDOMAIN";
    'Atlanta'               = "OU=Users,OU=Atlanta,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'Boston'                = "OU=Users,OU=Boston,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'Charlotte'             = "OU=Users,OU=CharlotteOU=US - East,OU=Sites,DC=MYDOMAIN";
    'Chicago'               = "OU=Users,OU=Chicago,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'Dallas'                = "OU=Users,OU=Dallas,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'Denver'                = "OU=Users,OU=Denver,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'Detroit'               = "OU=Users,OU=Detroit,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'Frankfurt'             = "OU=Users,OU=Frankfurt,OU=Europe,OU=Sites,DC=MYDOMAIN";
    'Houston'               = "OU=Users,OU=Houston,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'Las Vegas'             = "OU=Users,OU=Las Vegas,OU=US - West,OU=Sites,DC=MYDOMAIN"
    'London'                = "OU=Users,OU=London,OU=Europe,OU=Sites,DC=MYDOMAIN";
    'Los Angeles'           = "OU=Users,OU=Los Angeles,OU=US - West,OU=Sites,OU=MYDOMAIN";
    'Miami'                 = "OU=Users,OU=Miami,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'Montreal'              = "OU=Users,OU=Montreal,OU=Canada,OU=Sites,DC=MYDOMAIN";
    'Nashville'             = "OU=Users,OU=Nashville,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'New Jersey'            = "OU=Users,OU=New Jersey,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'New Orleans'           = "OU=Users,OU=New Orleans,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'New York'              = "OU=Users,OU=New York,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'Orange County'         = "OU=Users,OU=Orange County,OU=US - West,OU=Sites,DC=MYDOMAIN";
    'Orlando'               = "OU=Users,OU=Orlando,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'Philadelphia'          = "OU=Users,OU=Philadelphia,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'Phoenix'               = "OU=Users,OU=Phoenix,OU=US - West,OU=Sites,DC=MYDOMAIN";
    'San Antonio'           = "OU=Users,OU=San Santonio,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'San Diego'             = "OU=Users,OU=San Diego,OU=US - West,OU=Sites,DC=MYDOMAIN";
    'San Francisco'         = "OU=Users,OU=San Francisco,OU=US - West,OU=Sites,DC=MYDOMAIN";
    'Seattle'               = "OU=Users,OU=Seattle,OU=US - West,OU=Sites,DC=MYDOMAIN";
    'Toronto'               = "OU=Users,OU=Toronto,OU=Canada,OU=Sites,DC=MYDOMAIN";
    'Vancouver'             = "OU=Users,OU=Vancouver,OU=Canada,OU=Sites,DC=MYDOMAIN";
    'Washington DC'         = "OU=Users,OU=Washington DC,OU=US - East,OU=Sites,DC=MYDOMAIN";
}

所以我要实现的逻辑是

$TargetDGsDict
$User
$SitesDict

If ($user.DistinguishedName -like $SitesDict.Value){
AD-ADGroupMember -Identity $TargetDGsDict.Value -Member $User
}

那么,在不编写35条if语句的情况下,如何使它看起来漂亮又有效?我什至需要字典吗?我在想这个吗?

1 个答案:

答案 0 :(得分:0)

如果DG都是以用户OU的父OU命名的,那么我认为这是基于您的示例代码的情况,

$TargetDGs = [ordered]@{}
$adg = Get-ADGroup -SearchBase "OU=Automagic Populating,OU=Groups"  -Filter *
$adg | % { $TargetDGs.add($_.Name, $_.DistinguishedName) }

$users = Get-ADUser -Filter {(Enabled -eq $true)} 

$Users|?{$_.DistinguishedName -match 'OU=Users,OU=([^,]+),'}|%{
    Add-ADGroupMember -Identity $TargetDGsDict[$Matches[1]] -Member $_
}

这将查找用户OU中与组名称匹配的部分,并引用您已经为其创建哈希表的组。如果用户所在的OU中没有关联的组,则可能会引发错误。