Primal Forms Community Editionを使用して、秘書向けの新しい学生作成プロセスを合理化するGUIを作成しています。下位レベルの学校では、生徒は自分の誕生日をパスワードとして使用するため、覚えやすくなっています。
「誕生日」フィールドとラベル付けされたテキスト入力ボックスがあります。私がやろうとしているのは、そのフィールドを取得して、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フィールドが正しく出力されていないことを発見しました。 Name =に「$ lname、$ fname」を入力すると、何らかの理由で$ lnameの完全な出力が発生しました。 $ nameという新しい文字列を作成し、= $ lname.text + "、" + $ fname.textに設定します。
これでName = $ nameになり、コマンドが期待どおりに起動します。
変化する
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