Utilizing Thread Jobs for Updating Multiple Records in Dynamics 365 using PowerShell Script.

$conn = Get-CrmConnection -InteractiveMode
$conn.BypassPluginExecution = $true

PowerShell Script

Connection IsReady = True.

Connection IsReady

After establishing the connection, verify the results of the contact before proceeding with any updates.

Establishing the connection

Here, we are retrieving all the Contact Records and Updating First and Last Name Attributes using Thread Job.

Sample Code

# Update Related Account

$relatedContactFetchXml = @"
<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
  <entity name="contact">
    <attribute name="fullname" />
    <attribute name="telephone1" />
    <attribute name="contactid" />
    <order attribute="fullname" descending="false" />
  </entity>
</fetch>
"@

$counter = [pscustomobject] @{ Value = 0 }
$groupSize = 100

$relatedContactFetchXml = (Get-CrmRecordsByFetch -conn $conn -Fetch $relatedContactFetchXml -AllRows).CrmRecords;

$relatedContactFetchXml | Group-Object -Property {  [math]::Floor($counter.Value++ / $groupSize) } |

Foreach {
    Start-ThreadJob -ArgumentList @($conn, $_.Group) {
        param($conn, $group)
        $stripNonDigits = [regex]::new("[^\d]")
        $executeReq = [Microsoft.Xrm.Sdk.Messages.ExecuteMultipleRequest]::new()
        $executeSettings = [Microsoft.Xrm.Sdk.ExecuteMultipleSettings]::new()
        $executeSettings.ContinueOnError = $true
        $executeSettings.ReturnResponses = $false
        $executeReq.Requests = [Microsoft.Xrm.Sdk.OrganizationRequestCollection]::new()
        $executeReq.Settings = $executeSettings
        foreach($record in $group) {
            $updateEntity = [Microsoft.Xrm.Sdk.Entity]::new("contact", "$($record.ReturnProperty_Id)")
            $updateEntity.Attributes.Add("approvedforconnectandshare", $true)
            $updateEntity.Attributes.Add("approvedforwebsite", $true)
            $updateReq = [Microsoft.Xrm.Sdk.Messages.UpdateRequest]::new()
            $updateReq.Target = $updateEntity
            $executeReq.Requests.Add($updateReq)
        }
        Write-Host "`n------------------------`nExecuting Batch`n------------------------`n"
        $null = $conn.Execute($executeReq)
    }
}

Code

After Execution of the Sample Code.

The results are shown below.

 Execution