每周创建新用户时,我都会执行我整理的这个 powershell 脚本。它已经运行了 10 个月,但从上周开始出现这个奇怪的错误:
Invoke-Command : Cannot bind parameter 'Name' to the target. Exception setting "Name": "The property value is invalid.
The value can't contain leading or trailing whitespace."
At C:\Users\sarah.sanderson\AppData\Local\Temp\3\tmp_e30b6ca9-683a-430b-a22e-af2ff6d9ddc1_oam3omxv.1wu\tmp_e30b6ca9-683
a-430b-a22e-af2ff6d9ddc1_oam3omxv.1wu.psm1:27952 char:29
+ $scriptCmd = { & <<<< $script:InvokeCommand `
+ CategoryInfo : WriteError: (:) [New-Mailbox], ParameterBindingException
+ FullyQualifiedErrorId : ParameterBindingFailed,Microsoft.Exchange.Management.RecipientTasks.NewMailbox
>
我的脚本如下:
$cred = Get-Credential Contoso\
$session = New-PSSession -ConfigurationName Microsoft.Exchange - ConnectionUri http://Contoso-mbx/powershell -Credential $cred
Import-PSSession $session
Import-Module activedirectory
$Users = Import-Csv "C:\PSScripts\Create\users.csv" -header("lastname","firstame","program","password")
foreach ($User in $Users)
{
$OU = "OU=Users,DC=Contoso,DC=local"
$Password = $User.password
$Detailedname = $User.Lastname + "," + " " + $User.firstname
$UserFirstname = $User.Firstname
$UserLastname = $User.LastName
$SAM = $UserFirstname + "." + $UserLastname
New-Mailbox -UserPrincipalName [email protected] -OrganizationalUnit $OU -Database "Mailbox Database 2" -Name $Detailedname -Password (ConvertTo-SecureString "Welcome1$" -AsPlainText -Force) -FirstName $UserFirstName -LastName $UserLastName -DisplayName $DetailedName -ResetPasswordOnNextLogon $true
}
根据错误信息,该错误与我们的 Exchange 服务器有关,该服务器是运行 Exchange 2010 的 Server 2008 R2,但在过去 6 个月内没有对其进行任何更改。我不知道应该在哪里查找以解决此错误。如能得到任何帮助,我将不胜感激。
第 27950-58 行的代码片段:
$clientSideParameters = Get-PSImplicitRemotingClientSideParameters $PSBoundParameters $True $scriptCmd = { & $script:InvokeCommand @clientSideParameters
-HideComputerName
-Session (Get-PSImplicitRemotingSession -CommandName 'New-Mailbox')-Arg ('New-Mailbox', $PSBoundParameters, $positionalArguments)
-Script { param($name, $boundParams, $unboundParams) & $name @boundParams @unboundParams }`
答案1
Powershell 脚本故障排除
该脚本显然不喜欢您的 CSV 输入,或者它在您的脚本中的组合方式。
请Import-CSV
从初始化的 PowerShell 会话手动运行该行:
$Users = Import-Csv "C:\PSScripts\Create\users.csv" -header("lastname","firstame","program","password")
由此,您可以查询导入数组中的各个元素:$users[1].firstname
,,$users[2].program
等等。
我还建议测试你的$DetailedName
逻辑以确保该实体正确组合在一起。
Exchange 版本
您确定您的 Exchange 环境中没有任何变化吗?Exchange 2010 和 Exchange 2013 之间的行为 -Name
参数发生了变化。New-Mailbox
Technet Ex 2010 Technet Ex 2013+
在 Exchange 2010 中:
Name 参数指定用户的名称。这是在 Active Directory 用户和计算机中显示的名称。这也是在“用户信息”选项卡上的“收件人属性”中显示的用户名。
在 Exchange 2013 中:
Name 参数指定邮箱的唯一名称。最大长度为 64 个字符。如果值包含空格,请用引号 (") 将值括起来。
您的环境似乎在 Exchange 2013 意义上运行,-Name
对空格的容忍度不高。
编辑
这可能会让人感到困惑,但我们还是来看一看。
通过,我可以获得所需的参数write-host
的输出。-Name
New-Mailbox
> $displayname = $lastname + ',' + ' ' + $firstname
> Write-Host $displayname
Doe, John
> Write-Host """$displayname"""
"Doe,John"
结果:三个双引号 ( "
x3 ) 用于封装价值$displayname 用双引号引起来。
我不知道的是,New-Mailbox
在获取此输入时,是否会正确解析它并从名称中去除结果引号。
一些东西没有工作是'
"
'
(没有空格)封装变量$displayname
。这导致" Doe,John"
带有前导空格。(???)
答案2
状态更新 - 在检查服务器的最近更改时,我一直专注于 Exchange 服务器,因为问题似乎就是从那里产生的。但是,当我查看主域控制器上的 Windows 更新时,它在 11/1 进行了大量安全更新,大约是在脚本损坏的时间。为了验证我的理论,即是其中一个更新导致了问题,我去了我们的另一个没有最近更新的 DC,脚本执行得非常好。我将对主 DC 上的更新进行一些回滚,以尝试找出哪个更新导致了问题,并在找出是哪个更新时发布。