2013-11-14 2 views
1

Мы пытаемся создать массовое создание пользователей в системе 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) 
} 
+2

Если он работает с ручной ввод, но не с вашим loop, я был бы подозрительным к этому входному файлу. Вы уверены, что имена пользователей в этом файле хороши (нет пробелов в пробелах и т. Д.)? – mjolinor

+1

Пробовали ли вы использовать модуль активированных powershell, командлет [new-aduser] (http://technet.microsoft.com/en-us/library/ee617253.aspx)? – MDMoore313

+2

Я не эксперт по ADSI, но, глядя на документы, вы должны использовать метод 'Put' с' SetInfo', например. '$ localUser.Put (" userPrincipalName "," $ {name} @ $ domain "); $ localUser.SetInfo() 'или, возможно, вам нужно также поставить' SAMAccountName'? –

ответ

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() 
} 
Смежные вопросы