1

我们正在尝试在 Windows 2012 Server 系统上批量创建用户;该系统仅用于让我们验证 ALM 解决方案,而且它的寿命极短,这意味着我们现在不关心安全性。运行下面的脚本时,shell 报告异常调用“SetInfo”,参数为“0”:“指定的用户名无效。” 对于输入文件中的每一行。但是,如果我们手动执行循环内的行,则可以正确创建用户。

# Work on the local system
$Computer =[ADSI]"WinNT://$env:ComputerName,Computer"
$UsersFilePath = "C:\users\Administrator\Downloads\ActiveUsers.txt"
$Group=[ADSI]"WinNT://WORKGROUP/./Developers,Group"

Get-Content $UsersFilePath | % {

$_ # Debug only line, remove it when done
$LocalUser=$Computer.Create("User", $_ )
$LocalUser.SetPassword( $_ )
$LocalUser # Debug only line, remove it when done
$LocalUser.SetInfo()
} 

我们应该如何编写循环?

[这是答案,正如 mjolinor 所建议的那样;主要变化是从文件中读取的名称的修剪]

# Work on the local system
$Computer =[ADSI]"WinNT://$env:ComputerName,Computer"
$UsersFilePath = "C:\users\Administrator\Downloads\ActiveUsers1.txt"
$Group=[ADSI]"WinNT://WORKGROUP/./Developers,Group"

Get-Content $UsersFilePath | % {

$_ # Debug only line, remove it when done
$UserName = $_.Trim()
$LocalUser=$Computer.Create("User", $UserName)
$LocalUser.SetPassword( $UserName )
#$LocalUser.put("userPrincipalName", "${name}@svr-tfs2013" )
$LocalUser # Debug only line, remove it when done
$LocalUser.SetInfo()
$Group.Add($LocalUser.path)
}
4

1 回答 1

2

根据评论,您的输入文件似乎在用户名中有错误(尾随空格)。

解决此问题的一种方法是在输入上使用 .trim() 来删除文件中可能存在的任何前导或尾随空格:

# Work on the local system
$Computer =[ADSI]"WinNT://$env:ComputerName,Computer"
$UsersFilePath = "C:\users\Administrator\Downloads\ActiveUsers.txt"
$Group=[ADSI]"WinNT://WORKGROUP/./Developers,Group"

Get-Content $UsersFilePath | % {

$_ # Debug only line, remove it when done
$LocalUser=$Computer.Create("User", $_.trim() )
$LocalUser.SetPassword( $_.trim() )
$LocalUser # Debug only line, remove it when done
$LocalUser.SetInfo()
} 
于 2013-11-14T15:11:24.077 回答