为每个PowerShell脚本设置ID

时间:2017-11-21 08:28:17

标签: powershell active-directory

我有一个PowerShell脚本,它使用Usrid值填充EMP$ID自定义属性。 $ID是一个连续的数字,通常存储在一个文本文件中,并在设置ID后连续写入并将其设置为一个。首先,我使用Get-ADUser所有没有ID的用户,然后将ID设置为Usrid属性。

我的问题是:我想检查ID或值是否存在。

  • 如果ID存在→$ID++
  • else→从File设置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属性?

1 个答案:

答案 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++
}

但请注意,上述假设您的编号没有间隙(即您没有属性值的情况......,EMP25EMP26EMP28,......)。如果该假设不适用,最好通过获取已分配的最高ID并将该值递增1来确定下一个可用ID:

$ID = Get-ADUser -LDAPFilter '(Userid=*)' -Property Usrid |
      ForEach-Object { [int]($_.Usrid -replace '^EMP') } |
      Sort-Object |
      Select-Object -Last 1
$ID++