Предотвращение лишних пробелов в конвейере PowerShell

Я пытаюсь заархивировать почтовые ящики (которые больше не нужны) из локальной среды Exchange 2010 в файлы PST в каталоге на удаленном сервере. Моя проблема в том, что я не могу понять правильный синтаксис в PowerShell, чтобы несколько автоматизировать этот процесс. Самое близкое к этому, что я подошёл к работе, — это замена одинарных кавычек пробелами в моей команде PowerShell.

Итак, я пытаюсь запустить следующее (в качестве примера) из PS на одном из наших серверов Exchange 2010:

Get-Mailbox test.user | Where {$_.OrganizationalUnit -eq "domain.com/Users/TEMP"} | ForEach {New-MailboxExportRequest -Mailbox $_.Alias -FilePath '\\server\share\PSTdir\'$_.Alias'.pst'}

test.user используется в примере только как тестовый почтовый ящик, пока я не разработаю синтаксис PowerShell, необходимый для его работы. Как только синтаксис заработает, я удалю отдельный почтовый ящик test.user и позволю PS отправлять все почтовые ящики через канал.

Когда я использую пример, я могу проверить статус запроса на перемещение с помощью Get-MailboxExportRequest. Когда я проверяю статус, я вижу, что путь к файлу не содержит правильно отформатированной информации о пути к файлу. Из примера вот какая часть команды форматируется как в PS:

New-MailboxExportRequest -Mailbox test.user -FilePath \\server\share\PSTdir\ test.user .pst

Обратите внимание, что теперь в «PSTdir\ test.user» есть пробел, а также пробел перед .pst в «test.user .pst». Я пробовал использовать одинарные и двойные кавычки, менял расположение кавычек, использовал escape-символ и т. д., но не смог понять, чего мне не хватает. Кажется, что одинарная кавычка в примере заменена пробельным символом (который мне нужно удалить). Команда должна выглядеть примерно так (без пробелов в пути к файлу):

New-MailboxExportRequest -Mailbox test.user -FilePath \\server\share\PSTdir\test.user.pst

В: Как передать переменную $_.Alias через канал PS, чтобы имя в пути к файлу не содержало пробелов .


person SOSidb    schedule 16.10.2014    source источник
comment
Вы пробовали использовать trim? Например. '$_.Alias'.trim()   -  person David    schedule 16.10.2014
comment
Спасибо - к сожалению, я получаю те же результаты, лишние пробелы   -  person SOSidb    schedule 16.10.2014
comment
Что произойдет, если вы используете оператор добавления? '\\server\share\PSTdir\' + $_.Alias + '.pst'   -  person David    schedule 16.10.2014
comment
Каков результат этого [int[]]([char[]]($_.Alias))? Интересно, пробелы - это что-то другое   -  person Matt    schedule 16.10.2014
comment
Спасибо, Дэвид - попробовал, но добавление добавило к выводу только символ добавления (+).   -  person SOSidb    schedule 16.10.2014


Ответы (1)


Я предполагаю, что '\\server\share\PSTdir\'$_.Alias'.pst' оценивает не так, как вы хотите. Попробуйте это: "\\server\share\PSTdir\'$($_.Alias.Trim())'.pst"

Вы должны быть в состоянии использовать это, если разбить его на большее количество, чтобы его было легче читать:

Get-Mailbox -Identity test.user -OrganizationalUnit 'domain.com/Users/TEMP' | ForEach-Object {
    $Alias = $_.Alias.Trim(); 
    New-MailboxExportRequest -Mailbox $Alias -FilePath "\\server\share\PSTdir\'$Alias'.pst";
}

Если вы все еще видите пробелы, возможно, первый символ не является пробелом. Если первый результат [int[]][char[]]$($_.Alias) не равен 32, то первый символ не является пробелом.

person Bacon Bits    schedule 16.10.2014
comment
Да, это помогло. Я использовал "\\server\share\PSTdir\'$($_.Alias.Trim())'.pst", и результат был таким, как хотелось бы. КЛАССНО!! Спасибо!! - person SOSidb; 16.10.2014