我必须向活动目录中的用户添加多个组。
这是输入的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。
有人可以为我写脚本吗?
尽管在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“群组社交”