我在 powershell 脚本中遇到了一个极其奇怪的问题。
我正在使用一个函数来替换德语“元音变音”,如“ä”到“ae”等,以将用户名转换为不使用这些元音变音。
然后我将名字和姓氏保存在不同的变量中,例如:
$Vorname = "Jan Oliver"
$Nachname = "Schröder"
之后,我对这些变量应用 Replace-Umlaute 函数,例如:
$VORNAME_OHNE = Replace-Umlaute $VORNAME.Replace(' ','-')
$NACHNAME_OHNE = Replace-Umlaute $NACHNAME.Replace(' ','-')
要将“Jan Oliver”等双打名称转换为可用作电子邮件地址的字符串,我还用破折号替换名称中的任何空格。
现在是我完全不知道的部分:
-UserPrincipalName ($VORNAME_OHNE + "." + $NACHNAME_OHNE + "@fgs.de")
这会将名称转换为:“[email protected]”
鉴于
-EmailAddress ($VORNAME_OHNE + "." + $NACHNAME_OHNE + "@fgs.de)
会将名称转换为“[email protected]”,从而删除我在电子邮件地址字段中特别想要的破折号。
有人知道我做错了什么吗?任何帮助或提示将不胜感激。
我尝试使用以下变量:
$MAILADD = ($VORNAME_OHNE + "." + $NACHNAME_OHNE + "@fgs.de")
-EmailAddress ($MAILADD.ToString())
无济于事。
我还隔离了脚本的特定部分。
function Replace-Umlaute ([string]$s) {
$UmlautObject = New-Object PSObject | Add-Member -MemberType NoteProperty -Name Name -Value $s -PassThru
# hash tables are by default case insensitive
# we have to create a new hash table object for case sensitivity
$characterMap = New-Object system.collections.hashtable
$characterMap.ä = "ae"
$characterMap.ö = "oe"
$characterMap.ü = "ue"
$characterMap.ß = "ss"
$characterMap.Ä = "Ae"
$characterMap.Ü = "Ue"
$characterMap.Ö = "Oe"
foreach ($property in 'Name') {
foreach ($key in $characterMap.Keys) {
$UmlautObject.$property = $UmlautObject.$property -creplace $key,$characterMap[$key]
}
}
$UmlautObject.Name
}
$VORNAME = "Jan Oliver"
$NACHNAME = "Schröder"
$VORNAME_OHNE = Replace-Umlaute $VORNAME.Replace(' ','-')
$NACHNAME_OHNE = Replace-Umlaute $NACHNAME.Replace(' ','-')
$MAILADD = ($VORNAME_OHNE + "." + $NACHNAME_OHNE + "@fgs.de")
Write-host $MAILADD.ToString()
这将正确地显示“[email protected]”
它在 New-ADUser 上下文中的 -EmailAddress 字段中不起作用。