2017-11-21 5 views
0

Usridカスタム属性をEMP$ID値で埋め込むPowerShellスクリプトがあります。 $IDは、通常、テキストファイルに格納され、IDを設定してそれを1つ上に設定した後に連続して書き込まれる連続番号です。まず、Get-ADUserのIDを持たないすべてのユーザーを取得し、そのIDを属性に設定します。PowerShellスクリプトごとにIDを設定する

私の問題は次のとおりです。IDまたは値が存在するかどうかを確認したい。

# 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++
  • 他→セットIDが存在し、それがファイルに記述する場合には、再び

スクリプト内if部分はこのようになりますスクリプトはチェックしません。または、最も高いIDを確認し、最も高いIDをUsrid属性に設定するにはどうすればよいですか?

+0

'{USRID -eq「EMP $ ID」}' - > '$ _。Usrid -eq" EMP $ ID "。さらに役立つようにするには、コード、処理しているオブジェクト、および属性変更の仕方をより詳細に記述する必要があります。 '$ ID'の値が3で属性が' EMP13'、 'EMP1'、' EMP3'、 'EMP03'の場合はどうなりますか? –

+0

私のコードを更新しました。 – Duezceli

+0

それは私の質問に答えません。 'Usrid'が空の時に何をしたいですか? 'Usrid'がより高いIDを持つ値を持つとき、あなたは何をしたいですか?下位ID?それは手つかずのままにしておくべきですか?すべてのオブジェクトは操作後に同じ 'Usrid'値を持つべきですか? –

答えて

1

Usridが一意である必要があるとすると、既存の属性値と入力値を比較する必要があります。

$existing = @{} 
Get-ADUser -LDAPFilter '(UserId=*)' -Property Usrid | ForEach-Object { 
    $existing[$_.Usrid] = $true 
} 

while ($existing.ContainsKey("EMP$ID") { 
    $ID++ 
} 

は、この時点では、既存のアカウントのいずれも値 EMP$IDUsrid属性を持っていない $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++ 
+0

私はそれを試します、ありがとうございます。 – Duezceli

関連する問題