向多个组添加ADPrincipalGroupMembership

问题描述 投票:0回答:1

我必须向活动目录中的用户添加多个组。

这是输入的CSV:

command;login;MemberOF;group1;group2;group3;group4;group5;group6;group7;group8;group9;group10;group11;group12;group13;group14;group15;group16
Add-ADPrincipalGroupMembership -Identity;username.1;MemberOf;0;0;group test;0;0;0;0;0;0;group photo;0;group video;0;0;0;0
Add-ADPrincipalGroupMembership -Identity;username.2;MemberOf;0;0;0;0;0;0;0;0;group left;group photo;0;group video;0;0;0;group social
Add-ADPrincipalGroupMembership -Identity;username.3;MemberOf;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;group social
etc...
etc...

我想在输出中使用的命令是这样的:

Add-ADPrincipalGroupMembership -Identity username.1 MemberOf group test,group photo,group video
Add-ADPrincipalGroupMembership -Identity username.2 MemberOf group left,group photo,group video,group social
Add-ADPrincipalGroupMembership -Identity username.3 MemberOf group social

脚本应该忽略“ 0”,并连接组名以获得有效的命令。

我尝试了Internet上资助的maaaaaany脚本,但这些都不适合我的csv。

有人可以为我写脚本吗?

powershell csv active-directory multiple
1个回答
0
投票

尽管在CSV内包含包含参数名称的cmdlet有点奇怪,但可以这样做:

$csv = Import-Csv -Path '<Path\to\the\input\csv\file>' -Delimiter ';' 
foreach ($item in $csv) {
   # get an array of group names where the value is not '0'
   # quote the names because of the spaces in there!
   # join the array with commas
   $groups = ($item.PsObject.Properties | 
             Where-Object { $_.Name -like "group*" -and $_.Value -ne '0' } | 
             ForEach-Object { '"{0}"' -f $_.Value}) -join ','
   # combine it to a single output string
   '{0} {1} -{2} {3}' -f $item.command, $item.login, $item.MemberOF, $groups
}

输出到控制台:

Add-ADPrincipalGroupMembership-身份username.1 -MemberOf“小组测试”,“小组照片”,“小组视频”Add-ADPrincipalGroupMembership-身份username.2 -MemberOf“左组”,“合影”,“视频”,“社交”Add-ADPrincipalGroupMembership-身份username.3 -MemberOf“群组社交”
© www.soinside.com 2019 - 2024. All rights reserved.