Невозможно запустить Get-CASMailbox в Powershell, используя условие -filter с переменной конвейера - PullRequest
1 голос
/ 25 июля 2011

У меня проблемы с синтаксисом командлета Exchange Get-CASMailbox.

Я работаю в среде 2007 года и проверил в PowerGUI 2.4, 3.0 и PS ISE 2.0.

Пример кода для демонстрационных целей:

[String[]] $MailServerList = @('IP-0A207B07')

$MailServerList | %{            
Get-CASMailbox -ResultSize:10 -Filter {ServerName -eq $_}   
}

В этом примере есть только один почтовый сервер. Во время вызова Get-CASMailbox оператор конвейера $ _ имеет IP-0A207B07, а $ _. GetType () подтверждает, что это строка. Если эта строка запускается, я получаю следующую ошибку:


Get-CASMailbox: Невозможно привязать параметр «Filter» к цели. Параметр исключения «Фильтр»: «Невозможно привести объект типа« System.Management.Automa ». ion.PSObject 'для ввода' System.String '. " В C: \ Users \ erawlins \ Desktop \ MailboxFilterBug.ps1: 7 char: 38 + Get-CASMailbox -ResultSize: 10 -Filter <<<< {ServerName -eq $ _} + CategoryInfo: WriteError: (:) [Get-CASMailbox], ParameterBindingException + FullyQualifiedErrorId: ParameterBindingFailed, Microsoft.Exchange.Management.RecipientTasks.GetCASMailbox </p>


Я действительно смущен этим. Я пробовал каждый синтаксис, который мог найти, и в каждом случае попытка использовать $ _ выдает одну и ту же ошибку. Если я просто использую любую другую переменную, такую ​​как $ test = $ _, и подставляю ее в запросе, она работает нормально.

Думая, что могут быть некоторые проблемы с использованием оператора конвейера (может быть, когда Get-CASMailbox начнет выполнять что-то еще в $ _), я также попытался использовать свойство объекта (которое является частью исходного кода). Следующие две строки были добавлены перед вызовом get-casmailbox

$ServerInfo = "" | Select-Object Name
$ServerInfo.Name = $_.ToString()

Get-CASMailbox -ResultSize: 10 -Filter {ServerName -eq $ ServerInfo.Name}

Сбой также, то же сообщение об ошибке. Так что я действительно растерялся, почему взяв $ _ или $ ServerInfo.Name и присвоив его $ test, затем использование $ test работает нормально, но первые два метода выдают ошибку. Мне кажется, что каждый из них должен работать, поскольку они все строки. Какая разница?

Ответы [ 2 ]

3 голосов
/ 25 июля 2011

Попробуйте это:

$MailServerList | Foreach-Object { Get-CASMailbox -Filter "ServerName -eq  '$_'" }
1 голос
/ 25 июля 2011

Вы передаете блок скриптов параметру фильтра и ссылаетесь на автоматическую переменную ($ ). К тому времени, когда скрипт-блок будет оценен, он может быть внутри другого кода, определяющего $ . Всегда будьте осторожны при использовании автоматических переменных с вложенными областями действия.

...