gpt4 book ai didi

powershell - Get-ADUser 检查代理地址是否有冲突

转载 作者:行者123 更新时间:2023-12-03 09:01:02 25 4
gpt4 key购买 nike

目前我有一个创建用户帐户的脚本。

注意:并非所有用户都具有相同的 UPN (UserPrincipalName)

用户帐户的格式如下:<firstinit><lastname>

如果冲突,格式将更改为:<firstinit><middleinit><lastname>

最近我遇到了一个问题,用户的proxyAddress与现有用户冲突。这是一个问题,因为 AD 不会捕获它。

问题:

检查每个AD-User的代理地址如果不包含在过滤器中是非常耗时的。但是,当包含 proxyAddresses 时在过滤器中,结果不一致。我假设这是因为 proxyAddresses属性是一个数组。

不一致:

Import-Module ActiveDirectory
$FirstLast = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="553f273c31302715163d20363e1b3a27273c261e3c3939267b363a38" rel="noreferrer noopener nofollow">[email protected]</a>"

$conflictCheck = Get-ADUser -Properties mail, proxyAddresses -Filter "mail -eq '$FirstLast' -or UserPrincipalName -eq '$FirstLast' -or proxyAddresses -eq `"smtp:'$FirstLast'`"" | measure
if($conflictCheck.Count -gt 0)
{
Write-Host "New user conflicts with existing user" -ForegroundColor Red
}

我已经想出了一个可以解决我的问题的解决方案。不幸的是,这非常慢(预期):

Import-Module ActiveDirectory
function Test-NewADUser
{
Param(
[Parameter(Mandatory=$true)][string]$firstname,
[Parameter(Mandatory=$true)][string]$lastname,
[Parameter(Mandatory=$false)][string]$middle
)
[bool]$proxExsists = $false

$domain = '@chuckNorrisKills.com'
$FirstLast = $firstname.Substring(0,1)+$lastname+$domain
Get-ADUser -Filter * -Properties proxyAddresses | foreach {
#xpand the proxy address and iterate through it
foreach($address in $_.proxyAddresses)
{
#As you can see this goes through every user
Write-Host "Address: " $address -ForegroundColor Yellow
if($address -eq "smtp:$FirstLast")
{
Write-Host "Found Conflict" -ForegroundColor Red
$proxExsists = $true
}
}
}
}

Test-NewADUser -firstname jack -lastname Rider

问题:

  1. 有没有办法扩展proxyAddresses并检查-Filter中的冲突?
  2. 如果没有,我是否应该麻烦 Jobs,或者检查冲突的替代方法?

预先感谢您的帮助

最佳答案

您不需要扩展它,因为 proxyAddress 过滤器应该是可靠的。

所以,这应该非常简单:

function Validate-proxyAddress($email)
{

if (Get-ADUser -Filter "proxyAddresses -eq 'smtp:$email'")
{
return $true
}
elseif (Get-ADUser -Filter "mail -eq '$email'")
{
return $true
}
elseif (Get-ADUser -Filter "UserPrincipalName -eq '$email'")
{
return $true
}

return $false
}

或者你可以像你的代码一样将其全部加入一个,尚未测试它,所以如果你得到错误,用户不存在,应该可以继续...

此外,如果需要,您可以使用 -like 代替 -eq(在某些情况下缺少 smtp 前缀的情况):

"proxyAddresses -like '*$email*'"

关于powershell - Get-ADUser 检查代理地址是否有冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50338563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com