首页 > 解决方案 > Powershell - 将字符串中的非英文字母替换为英文字母

问题描述

我正在Powershell中编写一个新脚本,我想问一下是否有人知道将字符串中的所有“非英语”字母替换为英文字母的方法或函数。其原因在于 New-ADUser 功能,其中 AD 只接受 SamAccountName 和 UserPrincipalName 的英文字母。

字符串的示例是

$Name= "TRẦN NGÔ ỬNG HẠNH"

亚洲、欧洲等地区都会有各种非英文字母的名称,因此使用简单的 If-Then Replace 是不够的。

if ($Name= -like "*Ầ*")
{
$Name = $Name.replace('Ầ','A')
}

标签: powershell

解决方案


嗨 Daniel Björk 和 vonPryz,

谢谢,你们都回复了,我找到了一个解决方案,我会从建议的链接中找到。我还阅读了有关人名的文章,在这种情况下,用户仍然可以使用他们的原始名称作为显示名称,但由于 Microsoft 很难在 AD 中使用“英文”字符以外的字符,因此我们需要转换他们的名字。

解决方案(这将适用于迄今为止测试的亚洲名称)对于斯堪的纳维亚语,我们仍然必须添加一个 .replace。

function Remove-Diacritics {
param ([String]$src = [String]::Empty)
  $normalized = $src.Normalize( [Text.NormalizationForm]::FormD )
  ($normalized -replace '\p{M}', '')
}

$Name = Remove-Diacritics ("TRẦN NGÔ ỬNG HẠNH")


If ($Name -match "[a-z]"){
Write-host "$Name - OK"
}Else{
Write-host "$Name - Send back"
}

推荐阅读