2013-10-04 103 views
8

我正在使用Primal Forms社區版來創建GUI,以便爲我們的祕書創建新的學生創建過程。在較低級別的學校,學生使用他們的生日作爲他們的密碼,以便他們很容易記住。無法將字符串轉換爲安全字符串以便在New-ADUser中使用

我有一個文本輸入框被標記爲「生日」字段。我所要做的就是採取該字段並將其用於New-ADUser中的-AccountPassword。但是,無論我嘗試什麼,嘗試使用腳本創建新用戶時總會遇到此錯誤。

New-ADUser : Cannot bind parameter 'AccountPassword'. Cannot convert the "System.Security.SecureString" value of type 
"System.String" to type "System.Security.SecureString". 
At C:\Users\pomeroyt\Google Drive\Work\Scripts\Powershell\student_creation_gui.ps1:377 char:12 
+ New-ADUser @User 
+   ~~~~~ 
    + CategoryInfo   : InvalidArgument: (:) [New-ADUser], ParameterBindingException 
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.ActiveDirectory.Management.Commands.NewADUser 

我正在使用的代碼如下所示。

$password = $dob.text | ConvertTo-SecureString -AsPlainText -Force 
$user = @{ 
    Description = "Student" 
    UserPrincipalName = "[email protected]" 
    Name = "$lname.text, $fname.text" 
    SamAccountName = "$username" 
    Surname = "$lname.text" 
    GivenName = "$fname.text" 
    EmailAddress = "$email" 
    HomeDrive = H: 
    HomeDirectory = "\\$server\Students\$yog\$username" 
    ScriptPath = "$script" 
    ChangePasswordAtLogon = 0 
    CannotChangePassword = 1 
    PasswordNeverExpires = 1 
    AccountPassword = "$password" 
    Enabled = 1 
    Path = "OU=$yog,OU=$group,OU=STUDENTS,DC=domain,DC=local" 
    } 
New-ADUser @User 

我真的在這裏損失,因爲我看到的一切說,我在做什麼應該工作

編輯 -

解決方案下面沒有解決問題的密碼。但是,我沒有意識到我實際上看到了我的代碼的其他問題。

我打開-verbose查看發生了什麼,發現名稱字段輸出不正確。當爲Name輸入「$ lname,$ fname」時,出於某種原因導致完全輸出$ lname。我創建了一個名爲$ name的新字符串,並將其設置爲= $ lname.text +「,」+ $ fname.text。

Now Name = $ name,命令按預期觸發。

+0

我對您的Excel問題的答案給你,但你刪除它之前,我可以將它張貼。 –

回答

9

變化

AccountPassword = "$password" 

AccountPassword = $password 

如果你周圍有可變的報價,它會被當作一個普通字符串,而不是安全字符串。證明:

$plainText = "Plain text" 
$secureString = ConvertTo-SecureString $plainText -AsPlainText -Force 
$quotedSecureString = "$secureString" 
$plainText.GetType() 
$secureString.GetType() 
$quotedSecureString.GetType() 

結果

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  True  String         System.Object 
True  False SecureString        System.Object 
True  True  String         System.Object 
+0

當我這樣做時,我最終發生了這個錯誤: '新ADUser:該屬性的值不在可接受的值範圍內 在C:\ Users \ **** \ Google Drive \ Work \ Scripts \ Powershell \ student_creation_gui.ps1:377 char:1 + New-ADUser @User + ~~~~~~~~~~~~~~~~~~~~~~(CN = System.Windo。 ..afford,DC = local:String)[New-ADUser],ADException + FullyQualifiedErrorId:ActiveDirectoryServer:8322,Microsoft.ActiveDirectory.Management.Commands.NewADUser' – ParadoxCTRL