Назад | Перейти на главную страницу

Скрипты Powershell работают 10 месяцев, вдруг перестают работать

Когда я создаю новых пользователей каждую неделю, я выполняю эти сценарии 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, на котором не было последних обновлений, и скрипт выполнил отлично. Я собираюсь сделать несколько откатов обновлений на основном контроллере домена, чтобы попытаться определить, какое обновление вызывает проблемы, и опубликую, когда узнаю, какое именно.

Устранение неполадок сценария 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 ничего не изменилось? В -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" с ведущим пространством. (???)