Como alterar o nome de exibição de uma grande quantidade de caixas de correio compartilhadas? questão de acentuação

2

Tenho que renomear uma grande quantidade de caixas de correio compartilhadas para um novo formato, o script está pronto e funciona, mas quando o script é executado, os nomes que contêm acentuação não estão sendo atualizados corretamente e um ponto de interrogação é mostrado onde a acentuação deve existir.

-----------------------------------------input file:

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

-----------------------------------------Script:

$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
  }
}

-----------------------------------------output file:

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

O que devo fazer? Eu já tentei usar o comando diretamente no meu shell usando %código% e funciona, mas como tenho um lote de caixas de correio compartilhadas para executar essa alteração, isso está completamente fora de questão.

    
por Guilherme Lima 04.09.2017 / 23:02

2 respostas

2

A princípio, você deve parar de usar esses caracteres especiais, já que viu que será um problema quando se trata de scripting ... então, quando você começar a implementar um novo esquema de nomes, certifique-se de que isso irá eliminar tais feios. caracteres especiais.

1. Verifique se o formato de entrada tem a codificação correta (por exemplo, UTF-8 com BOM)

2.) Você pode tentar convertê-los:

   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.) Você pode tentar definir a codificação para UTF8 no começo via (mais infos aqui ):

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

Powershell 3.0 e superior:

$PSDefaultParameterValues['*:Encoding'] = 'utf8'
    
por 05.09.2017 / 00:16
1

obrigado pelo apoio. Fiz alguns testes e descobri que durante a importação os nomes estavam errados, por isso, salvei o arquivo de entrada como .csv UNICODE UTF-8. Fiz os testes novamente e está tudo bem agora. Não sabia disso, mas está consertado agora.

Obrigado!

mais informações: link

    
por 05.09.2017 / 13:34