【问题标题】:Add-ADPrincipalGroupMembership to multiple groups [closed]将 ADPrincipalGroupMembership 添加到多个组 [关闭]
【发布时间】:2020-06-15 16:04:08
【问题描述】:

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

这是输入的 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”并连接组名以获得有效命令。

我尝试了互联网上资助的 maaaaaany 脚本,但这些脚本都不适用于我的 csv。

有人可以帮我写剧本吗?

【问题讨论】:

    标签: powershell csv active-directory


    【解决方案1】:

    虽然在 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 -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"

    【讨论】:

    • 如何执行命令而不是显示在输出控制台中?
    • @gern 抱歉,我现在正在使用移动设备。看看Invoke-Expression,但也请阅读该页面上的注意事项。
    【解决方案2】:

    谢谢你 Theo,vi 告诉你完整的解决方案:

      $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
        $command = '{0} {1} -{2} {3}' -f $item.command, $item.login, $item.MemberOF, $groups
      Invoke-Expression $command
    }
    

    这对我帮助很大,谢谢!

    【讨论】:

    • 很高兴能提供帮助并 +1 显示包含Invoke-Expression 的代码
    猜你喜欢
    • 1970-01-01
    • 2019-10-18
    • 2021-12-10
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多