当我每周创build新用户时,我执行我放在一起的这个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 2010的服务器2008 R2)有关,但是在过去的6个月中并没有做出任何修改。 我不知道我应该在哪里解决这个错误。 任何帮助将不胜感激。
27950-58行的代码片段:
$ clientSideParameters = Get-PSImplicitRemotingClientSideParameters $ PSBoundParameters $ True $ scriptCmd = {&$ script:InvokeCommand @clientSideParameters
-HideComputerName-Session(Get-PSImplicitRemotingSession -CommandName'New-Mailbox')-Arg-Arg ('New-Mailbox', $PSBoundParameters, $positionalArguments)参数-Arg ('New-Mailbox', $PSBoundParameters, $positionalArguments)-Script {param($ name,$ boundParams,$ unboundParams)&$ name @boundParams @unboundParams}`
脚本显然不喜欢你的CSVinput,或者它的方式放在脚本中。
请从初始化的PowerShell会话手动运行Import-CSV行:
$Users = Import-Csv "C:\PSScripts\Create\users.csv" -header("lastname","firstame","program","password")
从这里,你可以查询导入数组的单个元素: $users[1].firstname , $users[2].program等
我也会build议testing你的$DetailedName逻辑来确保这个实体放在一起。
您确定Exchange环境中没有任何更改吗? New-Mailbox的-Name参数在Exchange 2010和Exchange 2013之间的行为中已更改。Technet Ex 2010 Technet Ex 2013+
在Exchange 2010中:
Name参数指定用户的名字。 这是在Active Directory用户和计算机中出现的名称。 这也是“用户信息”选项卡上的“收件人属性”中显示的用户名称。
在Exchange 2013中:
Name参数指定邮箱的唯一名称。 最大长度是64个字符。 如果该值包含空格,请将该值用引号(“)括起来。
看起来你的环境在Exchange 2013的意义上-Name ,在这里-Name不像空间那么宽容。
这会变得令人困惑,但在这里。
使用write-host ,我可以得到您在New-Mailbox的-Name参数所需的输出。
> $displayname = $lastname + ',' + ' ' + $firstname > Write-Host $displayname Doe, John > Write-Host """$displayname""" "Doe,John"
结果:三双引号( " x3”)用于将$ displayname的值封装在双引号中。
我不知道的是, New-Mailbox是否会正确parsing这个input,并在得到这个input的时候将结果的引号从名字上去掉。
一些不起作用的是' " (不含空格)来封装variables$displayname导致" Doe,John"的前导空格(???)
状态更新 – 在检查服务器的最近更改时,我一直专注于交换服务器,因为这是问题似乎源于的地方。 但是,当我查看主域控制器上的Windows更新时,它在11/1上执行了大量的安全更新,这是脚本破坏的时间。 为了testing我的理论,认为这是导致问题的更新之一,我去了其他一个没有最近更新的DC,脚本执行得非常好。 我将在主要数据中心的更新上做一些回滚,试图找出导致问题的更新,并在发现哪一个更新时发布。