Powershell Set-ADUser 尽管变量相同,但以不同的方式填充 UPN 和 EmailAddress

问题描述 投票:0回答:0

我在 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 字段中不起作用。

powershell active-directory
© www.soinside.com 2019 - 2024. All rights reserved.