使用单行powershell命令将多个用户添加到多个OU

时间:2019-04-09 20:29:07

标签: powershell

我是PowerShell的新手,我有一个.csv文件,其中包含100个不同的用户,其名称分别为Name,Surname,Section,具体取决于必须在该特定OU中创建用户的部分。例如:Joe,Heart,Accounts-执行命令I时,必须在帐户组织单位中创建用户。

最大的挑战是,我仅需使用1行命令即可在各自的OU中创建100个用户。我尝试了多个命令,并观看了许多视频,但似乎没有任何效果。我正在使用Windows Server 2012。

当前,我正在尝试使用此命令

Import-Csv C:\Users\Administrator\Desktop\HomeList.csv  
       | ForEach-Object { Set-ADOrganizationalUnit -Identity $_.Section -Member $_.Name } 

我得到了错误

  

找不到与参数名称“成员”匹配的参数

1 个答案:

答案 0 :(得分:0)

由于这是学校的练习,所以我认为给您一个可工作的代码来简单地复制/粘贴并不是一件好事。 不过,我可以给您提示要看的地方。

您说的CSV文件具有以下字段:NameSurnameSection,其中

  • “名称”似乎是用户的名字
  • “ SurName”是用户的姓氏
  • “部分”是OU的(显示)名称

必须将CSV中的每个用户移动到指定的OU,并且为此ActiveDirectory模块具有cmdlet Move-ADObject,因此您可以使用Foreach-Object {...}遍历数据。 >

这里有几个问题要处理。

第一个是Move-ADObject cmdlet带有一个-Identity参数,该参数可以是DistinghuishedName或GUID。您还可以通过管道将ADUser对象发送给它。
在CSV中,您具有用户的名字(AD属性GivenName)和用户的名字(属性SurName),因此您需要从AD获取用户 object 首先是为了能够使用Move-ADObject。

为此,使用-FilterGet-ADUser-LDAPFilter参数在互联网上可以找到几个答案。

第二个问题是Move-ADObject需要以{strong> DistinghuishedName 形式的-TargetPath参数,并且由于您的CSV文件仅包含目标OU的(Display)Name ,您也需要先获得它。 相应的cmdlet是Get-ADOrganizationalUnit,您可以在其中使用-Filter参数,例如:-Filter "Name -eq '$($_.Section)'"

注意:您也可以使用Get-ADObject并过滤“ ObjectClass -eq'organizationalunit'”作为Get-ADOrganizationalUnit的替代项,但这有点困难。

一旦拥有两个AD对象,就都设置为使用Move-ADObject cmdlet将用户移动到目标OU,但是在尝试使用该命令时始终将-WhatIf开关添加到命令中码。只有对控制台中显示的结果感到满意时,才可以关闭该开关。

尝试将所有这些内容放在一行中。将其写出来并在代码中添加注释。如果一切正常,您可能希望通过使用Group-Object

从CSV整理数据来加快处理速度

希望这会有所帮助