2016-09-10 3 views
0

このスクリプトにはいくつか変更があります。 UserIDは、通常、ユーザのファーストネームとそれに続くファーストネームです。 私がする必要があるのは、プロキシアドレス& SAMAccountName属性を作成する前に、各ユーザー名に関連付けられているものと比較することです。 だから、ジャススパロウと言うと、jsparrowが既に使用されていて、スクリプトがjasparrow(firstnameとfirstnameの第一文字)として試して、jasparrowを使うとjacsparrowなどになります。私は重複したユーザー名を避けたい。 2「名字」の最初の2文字、「姓」の最初の2文字を使用する「楽しい」パスワードを作成する方がよいと判断しました。最終的に、ユーザーは「Ja1009Sp」のようなパスワードを取得します。csvファイルを使用した重複した大量のADUserの作成を避ける

Firstname,LastName,Department,Manager,MobilePhone 
Jack,Sparrow,IT,jsmith,1 88 635 5254-0551 
John Smith,Sparrow,Finance,jsmith,188 635 5254-0554 

スクリプト:

Import-Module ActiveDirectory 
$UserList = Import-CSV -Path C:\Temp\CreateUsers.csv 
$targetOU='OU=usersOU,DC=My,DC=Domain,DC=org' 
$upnDomain='sec.local' 

foreach($Person in $UserList){ 
    [email protected]{ 
      GivenName=$Person.Firstname 
      Surname=$Person.LastName 
      Department=$Person.Department 
      AccountPassword=ConvertTo-SecureString -String $Person.Password -AsPlainText -force 
      ChangePasswordAtLogon=$false 
     Enabled=$true 
      DisplayName="$($Person.Firstname) $($Person.Lastname)" 
     Manager=$Person.Manager 
     MobilePhone=$Person.MobilePhone 
      Name="$($Person.Firstname) $($Person.Lastname)" 
      SamAccountName="$($Person.Firstname+$Person.LastName.Substring(0,1))" 
      UserPrincipalName="$($Person.FirstName+$Person.LastName.Substring(0,1))@$upnDomain" 
     Company="Contoso" 
    } 

    New-ADUser @useritems -Path $targetOU 
} 
+0

だけFYI、スクリプトはこの実際に私は認識して、ユーザ名 –

+0

感謝の男として「ジャック」ではなく、「JSparrow」を生成します。あなたは私の質問に答えがありますか? – Arbelac

+0

「JackSparrow」を含むすべてが使用されている場合はどうなりますか? –

答えて

0

このような何かを試してみてください..私はAD利用できるATMを持っていません。 Get-ADUser - 既存のアカウントを探すために使用されたクエリをテストして、チューニングが必要な場合があります。

foreach ($Person in $UserList) { 

    #Reset counters 
    $i = 1 
    $n = 1 

    do { 
     if($i -le $person.Firstname.Length) { 
      $user = "$($Person.Firstname.Substring(0,$i)+$Person.LastName)" 
      $i++ 
     } else { 
      #All combinations in use, adding number 
      $user = "$($Person.Firstname.Substring(0,1)+$Person.LastName+$n)" 
      $n++ 
     } 
    } while ((Get-ADUser -Filter "(samAccountName -eq '$user') -or (proxyaddresses -like '$user*')")) 

    #Result username 
    #$user 

    #$useritems = @{ 
     #..... 
     #SamAccountName=$user 
     #UserPrincipalName="[email protected]$upnDomain" 
     #.... 
    #} 


} 

すべての組み合わせがjacksparrow含めて使用されている場合、それはjsparrow1を試みる++、それは無料の電話番号を見つけるまで。

パスワードを使用して生成することができます。

$Password = "{0}{1}{2}" -f $Person.Firstname.Substring(0,2), (Get-Date).ToString("ddMM"), $Person.Lastname.Substring(0,2) 
+0

ありがとう、あまりにも多くの人BTWどこパスワード変数を使用する意味ですか?ユーザーの項目内またはその前または後whileループ? – Arbelac

+0

'$ password'はハッシュテーブルの現在の' $ person.password'を置き換える必要があります。 'convertto-securestring'の入力として使用する –

+0

もう一度男に感謝します。私はそれをテストします – Arbelac

関連する問題