Когда я создаю новых пользователей каждую неделю, я выполняю эти сценарии 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 $SAM@contoso.org -OrganizationalUnit $OU -Database "Mailbox Database 2" -Name $Detailedname -Password (ConvertTo-SecureString "Welcome1$" -AsPlainText -Force) -FirstName $UserFirstName -LastName $UserLastName -DisplayName $DetailedName -ResetPasswordOnNextLogon $true
}
Согласно ошибке, это как-то связано с нашим сервером обмена, которым является Server 2008 R2 с Exchange 2010, но за последние 6 месяцев в него не вносилось никаких изменений. Я не могу понять, где мне даже искать, чтобы распутать эту ошибку. Любая помощь будет принята с благодарностью.
Фрагмент из строк 27950-58:
$ clientSideParameters = Get-PSImplicitRemotingClientSideParameters $ PSBoundParameters $ True $ scriptCmd = {& $ script: InvokeCommand @clientSideParameters
-HideComputerName
-Сессия (Get-PSImplicitRemotingSession -CommandName 'New-Mailbox')-Arg ('New-Mailbox', $PSBoundParameters, $positionalArguments)
-Script {param ($ name, $ boundParams, $ unboundParams) & $ name @boundParams @unboundParams} `
Обновление статуса. Проверяя последние изменения на серверах, я концентрировался на сервере обмена, потому что именно здесь, казалось, возникла проблема. Однако, когда я посмотрел на обновления Windows на основном контроллере домена, он сделал большое количество обновлений безопасности 11 января, примерно в то время, когда скрипт сломался. Чтобы проверить свою теорию о том, что проблема была вызвана одним из обновлений, я пошел к одному из наших других DC, на котором не было последних обновлений, и скрипт выполнил отлично. Я собираюсь сделать несколько откатов обновлений на основном контроллере домена, чтобы попытаться определить, какое обновление вызывает проблемы, и опубликую, когда узнаю, какое именно.
Сценарию явно не нравится ваш ввод 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 ничего не изменилось? В -Name
параметр New-Mailbox
изменилось поведение между Exchange 2010 и Exchange 2013. 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"
с ведущим пространством. (???)