Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PowerShell脚本问题_Powershell - Fatal编程技术网

PowerShell脚本问题

PowerShell脚本问题,powershell,Powershell,我们正在尝试在Windows 2012服务器系统上批量创建用户;该系统只允许我们验证ALM解决方案,它的寿命非常短,这意味着我们现在不关心安全性。 运行下面的脚本时,shell将报告 使用“0”参数调用“SetInfo”时出现异常:“指定的用户名无效。” 对于输入文件中的每一行。 但是,如果我们在循环中手动执行这些行,那么用户就被正确地创建了 # Work on the local system $Computer =[ADSI]"WinNT://$env:ComputerName,Comput

我们正在尝试在Windows 2012服务器系统上批量创建用户;该系统只允许我们验证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)
}

根据注释,您的输入文件的用户名(尾随空格)可能有错误

解决此问题的一种方法是对输入使用.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()
} 

如果它可以用手工输入,但不能用你的循环,我会怀疑这个输入文件。您是否确定该文件中的用户名是好的(没有尾随空格等)?您是否尝试过使用powershell activedirectory模块cmdlet?我不是ADSI专家,但查看文档时,您是否应该将
Put
方法与
SetInfo
一起使用,例如
$localUser.Put(“userPrincipalName”,“${name}@$domain”)$localUser.SetInfo()
或者您可能还需要放置
SAMAccountName
。@MdMoore313:服务器位于工作组中,而不是Windows域中;我们无法使用AD cmdlet。@mjolinor:您是对的。请创建问题的答案,以便我可以接受。出现此问题是因为文件中的每个名称后面都跟有大量空格。