PowerShell:删除部分显示名称

PowerShell: Remove a portion of displayname

我需要在 Azure AD 中删除部分来宾用户的显示名称。

显示名称:公司 - 名字姓氏公司 - 需要删除)

来宾帐户没有填写 'Firstname' 和 'Lastname' 属性。我有一个脚本 运行 可以向显示名称添加内容:

#Guest CompanyNames
$Companies = @('Company1','Company2')

#Get guest users with UPN like: company.extension#EXT#@domain.onmicrosoft.com
Foreach ($Company in $Companies){
    $Users = Get-AzureADUser -All $true | Where-Object {($_.UserPrincipalName -like "*$Company.*") -and ($_.DisplayName -notlike "*($Company)")}

    foreach ($User in $Users){
        $DisplayName = $User.DisplayName + " " + "($Company)"
        Set-AzureADUser -ObjectId $User.ObjectId -Displayname $DisplayName
    }
    
}

我找不到任何东西来调整这种脚本以从显示名称中删除 'Company -'。希望有人能帮帮我,谢谢!

要执行与您发布的代码相反的操作,即删除以显示名称开头的公司名称,您可以使用:

$Companies = 'Company1','Company2'
# join the company names with regex 'OR' ('|')
$regexCompanies = '^({0})\s*-\s*' -f (($Companies | ForEach-Object { [regex]::Escape($_) }) -join '|')

# find users that have a DisplayName starting with one of the company names
$Users = Get-AzureADUser -All $true | Where-Object {$_.DisplayName -match $regexCompanies}
foreach ($User in $Users) {
    # split the displayname in two parts, take the last part and trim it
    $DisplayName = ($User.DisplayName -split '\s*-\s*', 2)[-1].Trim()
    Set-AzureADUser -ObjectId $User.ObjectId -Displayname $DisplayName
}

顺便说一句。在你的 foreach ($User in $Users) 循环中,你应该使用 $User,而不是 $Users..