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

Как изменить отображаемое имя для большого количества общих почтовых ящиков? проблема акцентуации

Мне нужно переименовать большую часть общих почтовых ящиков в новый формат, скрипт готов и работает, но когда скрипт запускается, имена, содержащие акцентуация не обновляются должным образом, и отображается вопросительный знак там, где должно существовать ударение.

----------------------------------------- входной файл:

name,NewName
BMS-cipatubarao,"CIPA Tubarão"
BEL-liberacaeodelimbo-amd,"Liberação AMD"

----------------------------------------- Скрипт:

$sharedChange = Import-Csv .\"SHAREDchange.csv"
$sharedChange | foreach{
  $sharedName = $_.name
  $sharedNewName = $_.newname
  try {
  # Change the DisplayName on Services Domain
      set-user $sharedname -displayname $sharedNewName
      "$(get-date -f MM/dd/yyyy-HH:mm:ss), $sharednewname, modified on, $sharedname`n" | out-file '.\SharedSuccess.txt' -append
  }   catch {
      "$(get-date -f MM/dd/yyyy-HH:mm:ss), $sharednewname, NOT modified on, $sharedname`n" | out-file '.\SharedFailed.txt' -append
  }
}

-----------------------------------------выходной файл:

09/04/2017-17:47:12, CIPA Tubar�o, modified on, cipatubarao
09/04/2017-17:47:14, Libera��o AMD, modified on, liberacaeo-amd

Что я должен делать? Я уже пробовал использовать команду прямо в своей оболочке, используя set-mailbox liberacaeo-amd -displayname "Liberação AMD" и это работает, но поскольку у меня есть пакет общих почтовых ящиков для выполнения этого изменения, это совершенно исключено.

Сначала вам действительно следует прекратить использование таких специальных символов, поскольку вы видели, что это будет проблемой, когда дело доходит до сценариев ... поэтому, когда вы начинаете реализовывать новую схему имен, убедитесь, что это устранит такие уродливые специальные символы.

1.) Убедитесь, что ваш формат ввода имеет правильную кодировку (например, UTF-8 с спецификацией)

2.) Можете попробовать их сконвертировать:

   function ConvertTo-Encoding ([string]$From, [string]$To){
        Begin{
            $encFrom = [System.Text.Encoding]::GetEncoding($from)
            $encTo = [System.Text.Encoding]::GetEncoding($to)
        }
        Process{
            $bytes = $encTo.GetBytes($_)
            $bytes = [System.Text.Encoding]::Convert($encFrom, $encTo, $bytes)
            $encTo.GetString($bytes)
        }
    }

    [System.Text.Encoding]::Default.Codepage

    $Title = "Liberação Tubarão" | ConvertTo-Encoding "UTF-8" "windows-1251"
    Write-Host $Title
    $Title = $Title.Replace(("Liberação" | ConvertTo-Encoding "UTF-8" "windows-1251"), "")
    Write-Host $Title

3.) Вы можете попробовать установить кодировку UTF8 сначала через (подробнее Вот):

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

Powershell 3.0 и выше:

$PSDefaultParameterValues['*:Encoding'] = 'utf8'

Спасибо за поддержку. Я провел несколько тестов и обнаружил, что во время импорта имена ошибались, поэтому я сохранил входной файл как .csv UNICODE UTF-8. Сделал еще раз тесты и теперь все нормально. Не знал об этом, но сейчас это исправлено.

Спасибо!

больше информации: http://blogs.catapultsystems.com/thernandez/archive/2015/09/20/how-to-export-and-import-foreign-characters-with-powershell/