2013-11-14 150 views
1

我們正在嘗試在Windows 2012 Server系統上批量創建用戶;該系統只是爲了讓我們驗證一個ALM解決方案,並且它將會非常短暫,這意味着我們現在並不在乎安全性。 運行下面的腳本時,shell報告 調用帶有「0」參數的「SetInfo」的異常:「指定的用戶名無效。」 爲輸入文件中的每一行。 但是,如果我們手動執行循環內部的行,則會正確創建用戶。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

如果採用手動輸入工作,但不是你的循環,我會懷疑那個輸入文件。你確定該文件中的用戶名是好的(沒有尾隨空白等)? – mjolinor

+1

您是否嘗試過使用PowerShell活動目錄模塊[new-aduser](http://technet.microsoft.com/zh-cn/library/ee617253.aspx)cmdlet? – MDMoore313

+2

我不是ADSI的專家,但看着文檔,你是否應該用'Set'的'Put'方法,例如'$ 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() 
}