在这里,使用此脚本的人有点咸。
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,所以我是这样从txt文件制作的:
Username,Group
User1,group1
,group2
,group3
,group4
,group5
仍然没有用:(
我认为可能是因为我使用的是空白列。尝试为用户和组尝试单独的CSV文件。
答案 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,两个参数都希望使用DistinguishedName
,ObjectGUID
,SID
或SamAccountName
。
默认情况下,除非您使用-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
希望有帮助