D365-PwdRst.ps1

function D365-PwdRst {
    param (
        [string]$Dynamics365ClientId,
        [string]$Dynamics365ClientSecret,
        [string]$Dynamics365ResourceUrl,
        [string]$Dynamics365AuthorityUrl,
        [string]$Dynamics365ApiEndpoint,
        [string]$UserEmail,
        [string]$NewPassword
    )

    # Authenticate with Dynamics 365 to get the Tenant ID
    $authContext = [Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext]::new($Dynamics365AuthorityUrl)
    $credential = [Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential]::new($Dynamics365ClientId, $Dynamics365ClientSecret)
    $authResult = $authContext.AcquireTokenAsync($Dynamics365ResourceUrl, $credential).Result

    $headers = @{
        "Authorization" = "Bearer $($authResult.AccessToken)"
    }

    # Query Dynamics 365 for Tenant ID (You may need to adjust this part based on your D365 setup)
    $dynamics365Data = Invoke-RestMethod -Uri $Dynamics365ApiEndpoint -Headers $headers

    $tenantId = $dynamics365Data.TenantId

    # Reset the AD password
    try {
        Set-ADAccountPassword -Identity $UserEmail -NewPassword (ConvertTo-SecureString -AsPlainText $NewPassword -Force)
        Write-Host "Password reset successful for $UserEmail"
    } catch {
        Write-Host "Error resetting password: $_"
    }
}

# Example usage:
# Reset-ADPasswordViaDynamics365 -Dynamics365ClientId "YourDynamics365ClientId" -Dynamics365ClientSecret "YourDynamics365ClientSecret" -Dynamics365ResourceUrl "https://yourdynamics365instance.crm.dynamics.com" -Dynamics365AuthorityUrl "https://login.microsoftonline.com/yourtenantid" -Dynamics365ApiEndpoint "https://yourdynamics365instance.crm.dynamics.com/api/data/v9.0/YourEntitySet" -UserEmail "user@example.com" -NewPassword "NewPassword123"