编辑

编辑

每周创建新用户时,我都会执行我整理的这个 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-MailboxTechnet Ex 2010 Technet Ex 2013+

在 Exchange 2010 中:

Name 参数指定用户的名称。这是在 Active Directory 用户和计算机中显示的名称。这也是在“用户信息”选项卡上的“收件人属性”中显示的用户名。

在 Exchange 2013 中:

Name 参数指定邮箱的唯一名称。最大长度为 64 个字符。如果值包含空格,请用引号 (") 将值括起来。

您的环境似乎在 Exchange 2013 意义上运行,-Name对空格的容忍度不高。

编辑

这可能会让人感到困惑,但我们还是来看一看。

通过,我可以获得所需的参数write-host的输出。-NameNew-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 上的更新进行一些回滚,以尝试找出哪个更新导致了问题,并在找出是哪个更新时发布。

相关内容