Windows 将用户匹配到Hashmap
有一些PowerShell的问题,我需要一些帮助,让我走上正确的道路 我们正在停用Okta服务器,因为它是垃圾,但它做了一些我们需要的事情,比如动态组管理 我还有其他脚本,其中我为GUI创建了一个有序字典,以补充我们的O365租户,该租户将位置与OU目录相匹配 我想做的是匹配我们指定用户目录中的所有用户,并根据这些目录将人员分配给这些组。我为要分配给它们的通讯组创建了另一个字典 这是我到目前为止得到的。我肯定我做得太过分了Windows 将用户匹配到Hashmap,windows,powershell,Windows,Powershell,有一些PowerShell的问题,我需要一些帮助,让我走上正确的道路 我们正在停用Okta服务器,因为它是垃圾,但它做了一些我们需要的事情,比如动态组管理 我还有其他脚本,其中我为GUI创建了一个有序字典,以补充我们的O365租户,该租户将位置与OU目录相匹配 我想做的是匹配我们指定用户目录中的所有用户,并根据这些目录将人员分配给这些组。我为要分配给它们的通讯组创建了另一个字典 这是我到目前为止得到的。我肯定我做得太过分了 $TargetDGs = [ordered]@{} $adg = Get
$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语句,我如何才能让它看起来漂亮有效呢?我甚至需要一本字典吗?我想得太多了吗?如果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没有关联的组,则可能会引发错误。如果存在这种情况,您如何将
$sites
关联到$TargetDGsDict
?DG的名称是否与$sites
中的键相同?如果是这样的话,用一点正则表达式就非常容易了。他们不是因为广告不喜欢这样。我的任务是重新创建DGs,这在其他方面很容易,但我们希望动态更新它们。目前的用户群称为洛杉矶用户、拉斯维加斯用户等,他们都是用户。我相信我会完全按照现在的样子重新命名新的TARGETDG。我有$sites作为一种获取用户的方式。我忍不住觉得我只是想得太多了。请停止使用scriptblocks作为-Filter
参数。它需要一个字符串,所以请使用一个,否则您可能会在代码中引入奇怪的错误。我刚才复制了OP的示例,但您是对的,它应该是一个字符串而不是脚本块。如果只希望启用用户返回,您会有什么建议?