目前我有一个创建用户帐户的脚本。
注意:并非所有用户都拥有相同的UPN(UserPrincipalName)
用户帐户采用以下格式:<firstinit><lastname>
。
如果出现这种情况,则格式将更改为:<firstinit><middleinit><lastname>
最近,我遇到了用户proxyAddress
与现有用户冲突的问题。这是一个问题,因为AD不会抓住这个。
问题:
如果未包含在过滤器中,则检查每个AD-User
的代理地址非常耗时。但是,在过滤器中包含proxyAddresses
时,结果会不一致。我假设这是因为proxyAddresses
属性是一个数组。
不一致:
Import-Module ActiveDirectory
$FirstLast = "jrider@ChuckNorrisKills.com"
$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
问题(S):
proxyAddresses
并检查-Filter
中的冲突? 提前感谢您的任何帮助
答案 0 :(得分:2)
您无需展开它,因为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*'"