title: ERROR: Could not load file or assembly 'Microsoft.Identity.Client | Powershell Azure Function
body: <p>I am currently working on a powershell script in Azure Function and keep being blocked by this error :</p>
  <pre><code>[2021-03-12T16:13:43.484Z] ERROR: Could not load file or assembly 'Microsoft.Identity.Client, Version=4.23.0.0, Culture=neutral, PublicKeyToken=0a613f4dd989e8ae'. Le fichier spécifié est introuvable.
  [2021-03-12T16:13:43.488Z] 
  [2021-03-12T16:13:43.489Z] Exception             : 
  [2021-03-12T16:13:43.490Z]     Type       : System.IO.FileNotFoundException
  [2021-03-12T16:13:43.492Z]     Message    : Could not load file or assembly 'Microsoft.Identity.Client, Version=4.23.0.0, Culture=neutral, PublicKeyToken=0a613f4dd989e8ae'. Le fichier spécifié est introuvable.
  [2021-03-12T16:13:43.546Z]     FileName   : Microsoft.Identity.Client, Version=4.23.0.0, Culture=neutral, PublicKeyToken=0a613f4dd989e8ae
  [2021-03-12T16:13:43.547Z]     TargetSite : 
  [2021-03-12T16:13:43.579Z]         Name          : IsTransientException
  [2021-03-12T16:13:43.589Z]         DeclaringType : Microsoft.Azure.Commands.Common.Authentication.Factories.AuthenticationFactory
  [2021-03-12T16:13:43.591Z]         MemberType    : Method
  [2021-03-12T16:13:43.596Z]         Module        : Microsoft.Azure.PowerShell.Authentication.dll
  [2021-03-12T16:13:43.604Z]     StackTrace : 
  [2021-03-12T16:13:43.611Z]    at Microsoft.Azure.Commands.Common.Authentication.Factories.AuthenticationFactory.IsTransientException(Exception e)
  [2021-03-12T16:13:43.612Z]    at Microsoft.Azure.Commands.Common.Authentication.Factories.AuthenticationFactory.Authenticate(IAzureAccount account, IAzureEnvironment environment, String tenant, SecureString password, String promptBehavior, Action`1 promptAction, IAzureTokenCache tokenCache, String resourceId)
  [2021-03-12T16:13:43.622Z]    at Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient.AcquireAccessToken(IAzureAccount account, IAzureEnvironment environment, String tenantId, SecureString password, String promptBehavior, Action`1 promptAction)
  [2021-03-12T16:13:43.624Z]    at Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient.ListAccountTenants(IAzureAccount account, IAzureEnvironment environment, SecureString password, String promptBehavior, Action`1 
  promptAction)
  [2021-03-12T16:13:43.627Z]    at Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient.Login(IAzureAccount account, IAzureEnvironment environment, String tenantId, String subscriptionId, String subscriptionName, SecureString password, Boolean skipValidation, Action`1 promptAction, String name, Boolean shouldPopulateContextList, Int32 maxContextPopulation)
  [2021-03-12T16:13:43.629Z]    at Microsoft.Azure.Commands.Profile.ConnectAzureRmAccountCommand.&lt;&gt;c__DisplayClass111_2.&lt;ExecuteCmdlet&gt;b__4()
  [2021-03-12T16:13:43.630Z]    at System.Threading.Tasks.Task`1.InnerInvoke()
  [2021-03-12T16:13:43.635Z]    at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
  [2021-03-12T16:13:43.636Z] --- End of stack trace from previous location where exception was thrown ---
  [2021-03-12T16:13:43.638Z]    at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task&amp; currentTaskSlot, Thread threadPoolThread)
  [2021-03-12T16:13:43.643Z] --- End of stack trace from previous location where exception was thrown ---
  [2021-03-12T16:13:43.644Z]    at Microsoft.Azure.Commands.Profile.ConnectAzureRmAccountCommand.&lt;&gt;c__DisplayClass111_0.&lt;ExecuteCmdlet&gt;b__1(AzureRmProfile localProfile, RMProfileClient profileClient, String name)
  [2021-03-12T16:13:43.647Z]    at Microsoft.Azure.Commands.Profile.ConnectAzureRmAccountCommand.&lt;&gt;c__DisplayClass118_0.&lt;SetContextWithOverwritePrompt&gt;b__0(AzureRmProfile prof, RMProfileClient client)
  [2021-03-12T16:13:43.650Z]    at Microsoft.Azure.Commands.Profile.Common.AzureContextModificationCmdlet.ModifyContext(Action`2 contextAction)
  [2021-03-12T16:13:43.651Z]    at Microsoft.Azure.Commands.Profile.ConnectAzureRmAccountCommand.SetContextWithOverwritePrompt(Action`3 setContextAction)
  [2021-03-12T16:13:43.652Z]    at Microsoft.Azure.Commands.Profile.ConnectAzureRmAccountCommand.ExecuteCmdlet()
  [2021-03-12T16:13:43.655Z]    at Microsoft.WindowsAzure.Commands.Utilities.Common.CmdletExtensions.&lt;&gt;c__3`1.&lt;ExecuteSynchronouslyOrAsJob&gt;b__3_0(T c)
  [2021-03-12T16:13:43.659Z]    at Microsoft.WindowsAzure.Commands.Utilities.Common.CmdletExtensions.ExecuteSynchronouslyOrAsJob[T](T cmdlet, Action`1 executor)
  [2021-03-12T16:13:43.663Z]    at Microsoft.WindowsAzure.Commands.Utilities.Common.CmdletExtensions.ExecuteSynchronouslyOrAsJob[T](T cmdlet)
  [2021-03-12T16:13:43.664Z]    at Microsoft.WindowsAzure.Commands.Utilities.Common.AzurePSCmdlet.ProcessRecord()
  [2021-03-12T16:13:43.669Z]     Source     : Microsoft.Azure.PowerShell.Authentication
  [2021-03-12T16:13:43.671Z]     HResult    : -2147024894
  [2021-03-12T16:13:43.671Z] CategoryInfo          : CloseError: (:) [Connect-AzAccount], FileNotFoundException
  [2021-03-12T16:13:43.672Z] FullyQualifiedErrorId : Microsoft.Azure.Commands.Profile.ConnectAzureRmAccountCommand
  [2021-03-12T16:13:43.676Z] InvocationInfo        : 
  [2021-03-12T16:13:43.677Z]     MyCommand        : Connect-AzAccount
  [2021-03-12T16:13:43.678Z]     ScriptLineNumber : 55
  [2021-03-12T16:13:43.679Z]     OffsetInLine     : 1
  [2021-03-12T16:13:43.679Z]     HistoryId        : 1
  [2021-03-12T16:13:43.680Z]     ScriptName       : C:\Users\nflachaire\CTCPA\GestionnaireStandard\azure-functions\afficherUtilisateurStandard\run.ps1
  [2021-03-12T16:13:43.681Z]     Line             : Connect-AzAccount -Credential $cred
  [2021-03-12T16:13:43.684Z] 
  [2021-03-12T16:13:43.687Z]     PositionMessage  : At C:\Users\nflachaire\CTCPA\GestionnaireStandard\azure-functions\afficherUtilisateurStandard\run.ps1:55 char:1
  [2021-03-12T16:13:43.688Z]                        + Connect-AzAccount -Credential $cred
  [2021-03-12T16:13:43.690Z]                        + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  [2021-03-12T16:13:43.690Z]     PSScriptRoot     : C:\Users\nflachaire\CTCPA\GestionnaireStandard\azure-functions\afficherUtilisateurStandard
  [2021-03-12T16:13:43.692Z]     PSCommandPath    : C:\Users\nflachaire\CTCPA\GestionnaireStandard\azure-functions\afficherUtilisateurStandard\run.ps1
  [2021-03-12T16:13:43.693Z]     InvocationName   : Connect-AzAccount
  [2021-03-12T16:13:43.694Z]     CommandOrigin    : Internal
  [2021-03-12T16:13:43.695Z] ScriptStackTrace      : at &lt;ScriptBlock&gt;, C:\Users\nflachaire\CTCPA\GestionnaireStandard\azure-functions\afficherUtilisateurStandard\run.ps1: line 55
  [2021-03-12T16:13:43.696Z] PipelineIterationInfo : 
  </code></pre>
  <p>My script:</p>
  <pre><code>using namespace System.Net
  
  # Input bindings are passed in via param block.
  param($Request, $TriggerMetadata)
  
  # Interact with query parameters or the body of the request.
  $data = $Request.Query.Data
  if (-not $name) {
      $name = $Request.Body.Data
  }
  
      
  $secpassword = ConvertTo-SecureString -String [password] -AsPlainText -Force
  $cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList [accountName] , $secpassword   
      
  #Connect-PnPOnline -Url $siteurl -Credentials $cred
  
  
  Connect-MicrosoftTeams -Credential $cred
  #$sfbSession = New-CsOnlineSession -Credential $cred
  #Import-PSSession $sfbSession
  
  $usersOfCallQueue = Get-CsCallQueue -Identity 5cf715ac-90df-4891-a080-7ba705bf63bb | Select-Object -Property users
  $firstUsersFromQueue = ($usersOfCallQueue.Users[0].Guid | Get-CsOnlineUser | Select-Object DisplayName).DisplayName
  
  Disconnect-MicrosoftTeams
  
  
  Install-Module -Name MSAL.PS 
  
  Connect-AzAccount -Credential $cred
  
  try {
      $storageAccount = Get-AzStorageAccount -ResourceGroupName [RessourceGroupName] -Name [containerName]
      $storageContext = $storageAccount.Context
      $cloudTable = (Get-AzStorageTable –Name [tableName] –Context $storageContext).CloudTable
  
      #Read the items for the sessionID
      $records = Get-AzTableRow -table $cloudTable -PartitionKey 1
      $body = $records
  }
  catch {
      $statusRequest = $false
      $errorMessageRequest = &quot;Failure connecting to table for state data, $_&quot;
  }
  
  
  try {
      Add-AzTableRow -table $cloudTable -partitionKey 1 -rowKey $returnData
  }
  catch {
      $statusRequest = $false
      $errorMessageRequest = &quot;Failure adding item to state table, $_&quot;
  }
  
  
  if ($statusRequest -eq $true) {
      $body = {
          callQueueUsers: firstUsersFromQueue,
          data: $data,
          errorMessageRequest: &quot;Success&quot;
      }
      $status = [HttpStatusCode]::OK
  }
  else {
      $body = {
          callQueueUsers: $firstUsersFromQueue,
          data: $data,
          errorMessageRequest: $errorMessageRequest
      }
      $status = [HttpStatusCode]::BadRequest
  }
  
  # Associate values to output bindings by calling 'Push-OutputBinding'.
  Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
      StatusCode = $status
      Body = $body
  })
  </code></pre>
  <p>There should be others error but I cannot debug my code until this error is resolved. My only question is about this missing package error.</p>
  <p>The first occurence of the error is at this line :</p>
  <pre><code>Connect-AzAccount -Credential $cred
  </code></pre>
  <p>My code from requirement.psd1 files</p>
  <pre><code>@{
      # For latest supported version, go to 'https://www.powershellgallery.com/packages/Az'.
      # To use the Az module in your function app, please uncomment the line below.
      'Az' = '5.*'
      'AzTable' = '2.*'
      'MicrosoftTeams' = '2.*'
      'SkypeToolPack' = '3.*'
      'MSAL.PS' = '4.2.1.3'
  }
  </code></pre>
  <p>As you can see, I import Microsoft.Identity (MSAL.PS) both way and still get this error. I don't understand. Where should I search for a solution ? I have no idea left.</p>