PowerShell脚本问题

时间:2013-11-14 12:15:02

标签: powershell

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

# 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)
}

1 个答案:

答案 0 :(得分: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()
} 
相关问题