PowerShell脚本工作10个月,突然停止工作

当我每周创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}`

PowerShell脚本故障排除

脚本显然不喜欢你的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,脚本执行得非常好。 我将在主要数据中心的更新上做一些回滚,试图找出导致问题的更新,并在发现哪一个更新时发布。