我有一个PowerShell脚本,它使用Usrid
值填充EMP$ID
自定义属性。 $ID
是一个连续的数字,通常存储在一个文本文件中,并在设置ID后连续写入并将其设置为一个。首先,我使用Get-ADUser
所有没有ID的用户,然后将ID设置为Usrid
属性。
我的问题是:我想检查ID或值是否存在。
$ID++
脚本中的if
部分如下所示:
# I'm calling the content or the last ID
$lastid = Get-Content "C:\startid.txt"
# Convert the content into a decimal string
$Usrid = [System.Decimal]::Parse($lastid)
# Find out all userProxyFull Object without an ID
Get-ADObject -Filter {(objectClass -eq "userProxyFull") -and (-not(Userid -like "*"))} -Searchbase "DC=MY,DC=SEARCHBASE" -Searchscope subtree -Server myIP |
ForEach-Object {
# Then the problem part here, see description above
if ({Usrid -eq "EMP$ID"}) {
$ID++
Set-ADObject $_ -Partition "DC=my,DC=partition" -Add @{Usrid="EMP$ID"}
} else {
Set-ADObject $_ -Partition "DC=my,DC=partition" -Add @{Usrid="EMP$ID"}
}
}
但脚本没有检查。或者,我如何检查最高ID并将最高ID设置为Usrid
属性?
答案 0 :(得分:1)
假设Usrid
需要是唯一的,您需要将输入值与现有属性值进行比较。
$existing = @{}
Get-ADUser -LDAPFilter '(UserId=*)' -Property Usrid | ForEach-Object {
$existing[$_.Usrid] = $true
}
while ($existing.ContainsKey("EMP$ID") {
$ID++
}
此时您有一个$ID
,其中没有现有帐户的Usrid
属性值为EMP$ID
。然后,您可以继续为所有尚未拥有值的帐户对象分配属性,同时在每次分配后递增$ID
:
Get-ADObject ... | ForEach {
Set-ADObject $_ -Partition "DC=my,DC=partition" -Add @{Usrid="EMP$ID"}
$ID++
}
但请注意,上述假设您的编号没有间隙(即您没有属性值的情况......,EMP25
,EMP26
, EMP28
,......)。如果该假设不适用,最好通过获取已分配的最高ID并将该值递增1来确定下一个可用ID:
$ID = Get-ADUser -LDAPFilter '(Userid=*)' -Property Usrid |
ForEach-Object { [int]($_.Usrid -replace '^EMP') } |
Sort-Object |
Select-Object -Last 1
$ID++