我必须将大量共享邮箱重命名为新格式,脚本已准备就绪并可以运行,但当脚本运行时,包含强调没有得到正确更新,在应该强调的地方出现了一个问号。
- - - - - - - - - - - - - - - - - - - - -输入文件:
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
我该怎么办?我已经尝试直接在 shell 上使用该命令,
set-mailbox liberacaeo-amd -displayname "Liberação AMD"
而且可以正常工作,但由于我有一批共享邮箱来执行此更改,所以这完全不可能。
答案1
首先,您确实应该停止使用这些特殊字符,因为您已经看到,在编写脚本时这会成为一个问题……因此,当您开始实施新的名称模式时,请确保这将消除这些丑陋的特殊字符。
1.) 确保您的输入格式具有正确的编码(例如带有 BOM 的 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'
答案2
感谢支持。我做了一些测试,发现导入过程中名称出现错误,因此,我将输入文件保存为 .csv UNICODE UTF-8。再次进行测试,现在一切都正常。我不知道这件事,但现在已经修复了。
谢谢!
答案3
我用它一次更改了几个共享邮箱。
创建一个如下所示的“c:\users.csv”,其中左栏中的“ident”下包含您想要更改的共享邮箱的电子邮件地址,右栏中的“displayname”下包含您想要的新显示名称。
ident,displayname
[email protected],New Display Name1
[email protected],New Display Name2
[email protected],New Display Name3
然后,如果您安装了 Exchange 模块并且已登录会话,则可以将其复制并粘贴到 PowerShell 中。
Import-Csv C:\users.csv|ForEach{Set-Mailbox -Identity $_.ident -DisplayName $_.displayname}