某些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语句的情况下,如何使它看起来漂亮又有效?我什至需要字典吗?我在想这个吗?
答案 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中没有关联的组,则可能会引发错误。