用于将Active Directory用户添加到组的Powershell脚本

时间:2019-01-16 20:46:38

标签: windows powershell scripting active-directory

在这里,使用此脚本的人有点咸。

Import-Module ActiveDirectory

$list = Import-csv "\\ca23fs1\IT\Scripts\Active Directory\New-Hire\Account Setup\Users-Groups.csv"
    ForEach ($item in $list) {
            $users = $item.Username
            $groups = $item.Group
        Add-ADPrincipalGroupMembership -Identity $users -MemberOf $groups -Whatif |
        Set-ADUser $users -HomeDirectory "Path" -Homedrive H -WhatIf
        }

运行$list时,我从CSV文件中获取了输出,但是运行$users$groups时却没有任何显示,因此我认为我的语法中缺少了一些从CSV的“用户名”和“组”标头中获取数据,并将其传递给循环。

这是我的CSV格式:

CSV

这是错误:

Error

任何帮助将不胜感激。

*编辑

以为可能是CSV,所以我是这样从txt文件制作的:

Username,Group
User1,group1
,group2
,group3
,group4
,group5

仍然没有用:(

我认为可能是因为我使用的是空白列。尝试为用户和组尝试单独的CSV文件。

2 个答案:

答案 0 :(得分:0)

$ item未填充。您声明$ users = $ item.username,但此时$ item为null。

尝试一下:

$list = Import-csv "PATH"

ForEach ($item in $list) {
$users = $item.Username
$groups = $item.Group


Add-ADPrincipalGroupMembership -Identity $users -MemberOf $groups -Whatif |
Set-ADUser $users -HomeDirectory "Path" -Homedrive H -WhatIf
}

这基本上是说:对于列表中的每个项目,请使用.username和.group语法填充users和groups变量。然后,运行添加和设置命令。 请记住,这是一个循环,对$ list中的每个$ item运行一次。

测试代码:

$list = Import-csv "PATH"

ForEach ($item in $list) {
$user = $item.Username
$group = $item.Group
Write-Host "$user is in $group"
}

答案 1 :(得分:0)

该错误来自未为用户指定有效的Identity值,甚至可能未指定有效的MemberOf值。

根据the docs,两个参数都希望使用DistinguishedNameObjectGUIDSIDSamAccountName。 默认情况下,除非您使用-PassThru参数,否则此cmdlet不会生成任何输出。

就您而言,我认为您正在尝试使用SamAccountName,这应该可以正常工作。 但是,这里的问题似乎是您使用的CSV文件。

将Excel保存为CSV文件时,可能会期望结果是一个逗号分隔值文件,正如CSV的名称一样。
不幸的是,Excel使用当前的系统区域设置来确定要使用的分隔符。例如,在我的荷兰语计算机上,它将使用分号;作为分隔符。

如果不进行检查,则不带参数Import-Csv的{​​{1}} cmdlet将采用逗号。 因此,从Excel导出后,请使用记事本或任何其他文本编辑器打开csv文件,以查看创建的内容和实际使用的分隔符。 您也可以通过使用-Delimiter cmdlet上的-UseCulture开关来解决该问题,但这仅在您从Excel导出并在同一台计算机(或至少一台计算机)上导入PowerShell时才有意义。使用相同的文化)

您应该拥有的是有效的CSV文件,如下所示:

Import-Csv

由于您手动创建的CSV的"UserName","Group" "user1","group1" "user2","group1" "user3","group1" 列具有空值,因此出现错误也就不足为奇了。

然后,对代码进行一些其他更改,即可使用:

UserName

希望有帮助