>我正在尝试自动创建新的AD用户。下面是一段有问题的代码;
New-ADUser -GivenName "$firstname" `
-Surname $surname -DisplayName ($firstname + ' ' + $surname) `
-UserPrincipalName ($firstname + '.' + $surname + $email) -EmailAddress ($firstname + '.' + $surname + $email) -Department $department -HomePhone $phonenumber -AccountPassword $plainpassword -ChangePasswordAtLogon 1 -Enabled 1 -Fax "OMITTED" -HomeDirectory "OMITTED" + $firstname + "." + $surname "My Documents" -HomeDrive "M:" -Manager $manager -OtherAttributes @{'title'=$jobtitle}
当我输入$firstname为欧文时,出现以下错误;
New-ADUser : A positional parameter cannot be found that accepts argument 'Owen'.
At C:Usersryan.hargreavesadminDesktopNewUser.ps1:24 char:1
+ New-ADUser -GivenName $firstname `
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [New-ADUser], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.ActiveDirectory.Management.Commands.NewADUs
er
我可能错过了什么明显的东西?
给定的变量双引号这样:
$firstname = Read-Host 'Enter first name'
New-ADUser -GivenName "$firstname" ` #Script continues for other parameters
您的问题将是传递给参数的值之一中的空格。空格之前的子字符串用作参数的值,并且没有其他参数可以按位置定义剩余内容。
一个例子是-HomeDirectory John Owen + $firstname + "." + $surname "My Documents"
在此,HomeDirectory
的值将只John
,其余的将尝试使用 position 来填充下一个参数。
如果将参数值括在双引号中并依赖于变量插值而不是使用 +
运算符构建字符串,则更容易避免这些问题,因为整个值将始终传递给参数。
使用示例,它看起来像:-HomeDirectory "John Owen$firstname.$surnameMy Documents"
要将其应用于所有代码,如下所示:
New-ADUser -GivenName "$firstname" `
-Surname $surname -DisplayName "$firstname $surname" `
-UserPrincipalName "$firstname.$surname$email" `
-EmailAddress "$firstname.$surname$email"
-Department $department `
-HomePhone $phonenumber `
-AccountPassword $plainpassword `
-ChangePasswordAtLogon 1 `
-Enabled 1 `
-Fax "OMITTED" `
-HomeDirectory "OMITTED$firstname.$surnameMy Documents" `
-HomeDrive "M:" `
-Manager $manager `
-OtherAttributes @{'title'=$jobtitle}