Мы пытаемся создать массовое создание пользователей в системе Windows 2012 Server; система предназначена только для того, чтобы позволить нам проверять решение ALM, и это будет крайне непродолжительным, а это значит, что мы сейчас не заботимся о безопасности. При запуске сценария ниже сообщаются сообщения оболочки . Вызов «SetInfo» с исключением «0»: «Указанное имя пользователя недействительно». для каждой строки входного файла. Однако, если мы вручную выполним строки внутри цикла, пользователь будет правильно создан.Проблема с сценарием PowerShell
# 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)
}
Если он работает с ручной ввод, но не с вашим loop, я был бы подозрительным к этому входному файлу. Вы уверены, что имена пользователей в этом файле хороши (нет пробелов в пробелах и т. Д.)? – mjolinor
Пробовали ли вы использовать модуль активированных powershell, командлет [new-aduser] (http://technet.microsoft.com/en-us/library/ee617253.aspx)? – MDMoore313
Я не эксперт по ADSI, но, глядя на документы, вы должны использовать метод 'Put' с' SetInfo', например. '$ localUser.Put (" userPrincipalName "," $ {name} @ $ domain "); $ localUser.SetInfo() 'или, возможно, вам нужно также поставить' SAMAccountName'? –