2017-11-02 18 views
0

次のようなPowerShellスクリプトがあります。基本的には、Azure Active Directoryに新しいユーザーを追加してから、そのユーザーをデータベースに追加しようとしています。新しいAzure Active Directoryユーザーをすぐにデータベースに追加できません

# Create some variables 
$TemporaryPassword = "Password123" 
$DisplayName = "xxxxxxxxx" 
$MailNickName = "xxxxxxxx" 
$PrincipalName = "xxxxxxxxxxxxxxxxxxxxxxx" 

# Create a password profile which the New-AzureADUser cmdlet needs 
$PasswordProfile = New-Object -TypeName Microsoft.Open.AzureAD.Model.PasswordProfile 
$PasswordProfile.Password = $TemporaryPassword 

#Add the user to AAD 
New-AzureADUser -AccountEnabled $True -DisplayName $DisplayName -PasswordProfile $PasswordProfile -MailNickName $MailNickName -UserPrincipalName $PrincipalName 

# If the user was added successfully, add him/her to our database. 
$Status = Get-AzureADUser -Filter "UserPrincipalName eq '$PrincipalName'" 
if ($Status) 
{ 
    Invoke-Expression "&'C:\AzureFileShare\MEDsys\Powershell Scripts\AddDatabaseUser.ps1' -ServerName medsys-dev -DatabaseName Phoenix -UserName $PrincipalName" 
} 

このスクリプトは、私はすぐに(AddDatabaseUser.ps1スクリプトが何をするかである)データベースにユーザーを追加することはできませんよということを除いて、正常実行されています。ユーザーがAADに存在しないというエラーが表示されます。しかし、もう5〜15秒待って、その特定の行をもう一度実行するだけで、それは動作します。

ユーザーがAADに正常に追加されても、Azureでユーザーをデータベースに追加するには、何らかの遅延が必要であるようです。なぜ誰が知っていますか?

注:AddDatabaseUser.ps1スクリプトにこれを追加しなかったのは、問題があるとは思わないが、ユーザーがAADに追加された後に十分に長くしたい場合は常に追加されるからです。

答えて

1

ここで直面している問題は、大規模なグローバルクラウドアイデンティティシステムにデータを複製するという課題だけです。新しいユーザーを作成すると、その変更が異なるクラスターおよび地域にあるディレクトリーのすべてのコピーにわたって反映されるまで少し時間がかかります。 Get-AzureADUserを作成した場合、変更内容を取得したクラスタまたは地域と同じ結果になることはないため、結果が動作するまでに10秒かかることがあります。

ここでの解決策は、New-AzureADUserコールの出力を使用してデータベースにデータを入力し、Get-AzureAdUserを回避することです。

あなたはこのような呼び出しにする場合:

PS C:\Users\shtabriz> $result = New-AzureADUser -AccountEnabled $true -UserPrincipalName "[email protected]"-DisplayName "new name" -PasswordProfile $PasswordProfile -MailNickName "newname" 

、その後$resultの値を確認します

PS C:\Users\shtabriz> Get-AzureADUser -ObjectId 49ebc6d5-835b-447c-bed0-3281f63cf7c2 | fl 


ExtensionProperty    : {[odata.metadata, https://graph.windows.net/4a4d599f-e69d-4cd8-a9e1-9882ea340fb5/$metadata#directoryObjects/Microsoft.DirectoryServices.User/@Element], [odata.type, Microsoft.DirectoryServices.User], [employeeId, ], 
           [onPremisesDistinguishedName, ]...} 
DeletionTimestamp    : 
ObjectId      : 49ebc6d5-835b-447c-bed0-3281f63cf7c2 
ObjectType      : User 
AccountEnabled     : True 
AssignedLicenses    : {} 
AssignedPlans     : {} 
City       : 
CompanyName     : 
Country      : 
CreationType     : 
Department      : 
DirSyncEnabled     : 
DisplayName     : new name 
FacsimileTelephoneNumber  : 
GivenName      : 
IsCompromised     : 
ImmutableId     : 
JobTitle      : 
LastDirSyncTime    : 
Mail       : 
MailNickName     : newname 
Mobile       : 
OnPremisesSecurityIdentifier : 
OtherMails      : {} 
PasswordPolicies    : 
PasswordProfile    : class PasswordProfile { 
            Password: 
            ForceChangePasswordNextLogin: True 
            EnforceChangePasswordPolicy: False 
           } 

PhysicalDeliveryOfficeName  : 
PostalCode      : 
PreferredLanguage    : 
ProvisionedPlans    : {} 
ProvisioningErrors    : {} 
ProxyAddresses     : {} 
RefreshTokensValidFromDateTime : 11/2/2017 8:39:28 PM 
ShowInAddressList    : 
SignInNames     : {} 
SipProxyAddress    : 
State       : 
StreetAddress     : 
Surname      : 
TelephoneNumber    : 
UsageLocation     : 
UserPrincipalName    : [email protected] 
UserType      : Member 

PS C:\Users\shtabriz> $result |fl 


ExtensionProperty    : {[odata.metadata, https://graph.windows.net/4a4d599f-e69d-4cd8-a9e1-9882ea340fb5/$meta 
           data#directoryObjects/Microsoft.DirectoryServices.User/@Element], [odata.type, 
           Microsoft.DirectoryServices.User], [employeeId, ], [onPremisesDistinguishedName, ]...} 
DeletionTimestamp    : 
ObjectId      : 49ebc6d5-835b-447c-bed0-3281f63cf7c2 
ObjectType      : User 
AccountEnabled     : True 
AssignedLicenses    : {} 
AssignedPlans     : {} 
City       : 
CompanyName     : 
Country      : 
CreationType     : 
Department      : 
DirSyncEnabled     : 
DisplayName     : new name 
FacsimileTelephoneNumber  : 
GivenName      : 
IsCompromised     : 
ImmutableId     : 
JobTitle      : 
LastDirSyncTime    : 
Mail       : 
MailNickName     : newname 
Mobile       : 
OnPremisesSecurityIdentifier : 
OtherMails      : {} 
PasswordPolicies    : 
PasswordProfile    : class PasswordProfile { 
            Password: 
            ForceChangePasswordNextLogin: True 
            EnforceChangePasswordPolicy: False 
           } 

PhysicalDeliveryOfficeName  : 
PostalCode      : 
PreferredLanguage    : 
ProvisionedPlans    : {} 
ProvisioningErrors    : {} 
ProxyAddresses     : {} 
RefreshTokensValidFromDateTime : 11/2/2017 8:39:28 PM 
ShowInAddressList    : 
SignInNames     : {} 
SipProxyAddress    : 
State       : 
StreetAddress     : 
Surname      : 
TelephoneNumber    : 
UsageLocation     : 
UserPrincipalName    : [email protected] 
UserType      : Member 

をこれはGet-AzureAdUserとまったく同じ結果になります

これがあなたの問題を解決するかどうか教えてください。

+0

ありがとうShawn。私は今問題を理解しています。しかし、私はあなたの解決策を理解していません。あなたは、私がNew-AzureAdUser呼び出しの結果を調べるべきだと言った。正確に私が探しているのは、新しいユーザーがすべてのクラスターと地域に移住したことを示していますか? –

+0

コールが成功したことを確認し、必要な詳細があれば、返されたユーザーオブジェクトを使用することができます。私の解決策は、get user APIを呼び出す必要がないと言うだけです。あなたが確かに冗長であることを伝えるデータとして、 –

+0

Okです。私は今あなたが何を意味するかを見ます。しかし、New-AzureADUserが作成されたユーザーに関する情報を返すにもかかわらず、これが惑星全体にデータを複製するのにかかる時間のためにユーザーをデータベースに追加することはできないからです。正しい? –

関連する問題