我在一个k-12区工作,我一直在写一个脚本,把放学后的学生加入到不同的广告安全组织中,这样我就可以将访问卡的访问专门应用到他们以后的日程中(目前所有的学生都有一个标准的时间,我们只是为了放学后的东西而不上锁)。
我们的学生放学后的活动被列入我们的SIS和Azure的名册,可以把所有的这些名册,并应用于用户。我们的访问控制管理器只与AD同步,而不是azure,所以我已经创建了AD安全组,这个脚本试图将azure组同步到安全组。我对powershell相当陌生,所以虽然我确实让它工作了,但我的脚本很长,而且花了很长时间才弄清楚。我在找关于如何缩短它的参考资料
$VB = Get-AzureADGroupMember -ObjectId zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz #volleybally
$SOB = Get-AzureADGroupMember -ObjectId zzzzzzzzzzzzzzzzzzzzzzzzzzzz #Boys Soccer
$SOG = Get-AzureADGroupMember -ObjectId xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx5 #Girls Soccer
$BG = Get-AzureADGroupMember -ObjectId 7xxxxxxxxxxxxxxxxxxxxxxxxxxx #Boys Golf
$GG = Get-AzureADGroupMember -ObjectId xxxxxxxxxxxxxxxxxxxxxxxxxxxxx1c #Girls Golf
$CC = Get-AzureADGroupMember -ObjectId zzzzzzzzzzzzzzzzzzzzzzzzzzzzz #Cross Country
$FCL = Get-AzureADGroupMember -ObjectId xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx #Fall Cheerleading
$SDD = Get-AzureADGroupMember -ObjectId xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx #Speech Drama & Debate
#initiate SG Groups
$SGCC = Get-ADGroup -Identity sample group 1
$SGFC = Get-ADGroup -Identity sample group 2
$SGFB = Get-ADGroup -Identity sample group 3
$SGGO = Get-ADGroup -Identity sample group 4
$SGSO = Get-ADGroup -Identity sample group 5
$SGVB = Get-ADGroup -Identity sample group 6
# convert azure values to AD and add to AD groups
$FB= Foreach($ad in $FB) {
Get-ADUser ($ad.UserPrincipalName.Split('@')[0])
}
$VB = Foreach($ad in $VB) {
Get-ADUser ($ad.UserPrincipalName.Split('@')[0])
# your text
}
$SOB = Foreach($ad in $SOB) {
Get-ADUser ($ad.UserPrincipalName.Split('@')[0])
}
$SOG = Foreach($ad in $SOG) {
Get-ADUser ($ad.UserPrincipalName.Split('@')[0])
}
$BG = Foreach($ad in $BG) {
Get-ADUser ($ad.UserPrincipalName.Split('@')[0])
}
$GG = Foreach($ad in $GG) {
Get-ADUser ($ad.UserPrincipalName.Split('@')[0])
}
$CC = Foreach($ad in $CC) {
Get-ADUser ($ad.UserPrincipalName.Split('@')[0])
}
$FCL = Foreach($ad in $FCL) {
Get-ADUser ($ad.UserPrincipalName.Split('@')[0])
}
$SDD = Foreach($ad in $SDD) {
Get-ADUser ($ad.UserPrincipalName.Split('@')[0])
}
#### add AD Members to SG
Add-AdGroupMember -Identity $SGFB -Members $FB
# Looking to simplify, To be continued
我已经写了很长的路了。很好奇是否有人对如何做得更好有想法。就像我说的,我是个菜鸟。
发布于 2022-11-03 15:18:11
我认为您可以通过使用哈希表 ($map
)简化任务,其中键是每个Azure组的GUID,值是每个AD组,其中需要添加Az组成员。
例如:
$map = @{
'xxxxxxxxxxxx' = 'group 1', 'group 5', 'group 8' # Football
'zzzzzzzzzzzz' = 'group 2' # Volleyball
'yyyyyyyyyyyy' = 'group 3', 'group 4' # Boys Soccer
# and so on here
}
foreach($pair in $map.GetEnumerator()) {
# I think you could use `DisplayName` instead of `UserPrincipalName` here
# and don't have a need to parse the UPNs
$azMembers = (Get-AzureADGroupMember -ObjectId $pair.Key).DisplayName
foreach($adGroup in $pair.Value) {
Add-ADGroupMember -Identity $adGroup -Members $azMembers.DisplayName
}
}
正如内联注释中所述,我认为使用.DisplayName
就足够了,因为-Members
采用以下值之一:
但是,考虑到这种情况可能不是这样,而且不起作用,那么解析用户的UserPrincipalName
而不是使用.Split('@')[0]
的一种更简单、更安全的方法是使用班级,因此使用它的代码如下所示:
# here goes the `$map` too!
foreach($pair in $map.GetEnumerator()) {
$azMembers = [mailaddress[]] (Get-AzureADGroupMember -ObjectId $pair.Key).UserPrincipalName
foreach($adGroup in $pair.Value) {
Add-ADGroupMember -Identity $adGroup -Members $azMembers.User
}
}
https://stackoverflow.com/questions/74310371
复制