Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Enhance your career with this limited time 50% discount on Fabric and Power BI exams. Ends August 31st. Request your voucher.

Reply
kustbilla
Frequent Visitor

500 Internal Server Error encountered when importing PBIX file using PowerShell script

I created below PowerShell script to import PBIX file to workspace:

 

$LF = "`r`n"
$boundary = "----------abcdefghijklmn"
$uri = "https://api.powerbi.cn/v1.0/collections/stanley-test/workspaces/10b69fc3-46fa-464b-9483-41b77b426bb8..."
$CODEPAGE = "iso-8859-1"

$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", "AppKey <accesskey>
$FileContent = [System.IO.File]::ReadAllBytes("D:\temp\RetailAnalysisSamplePBIX.pbix");
$enc = [System.Text.Encoding]::GetEncoding($CODEPAGE)
$fileEnc = $enc.GetString($FileContent)

$body = ("--$boundary$LF",
            "Content-Disposition: form-data; name=`"filename`"; filename=`"RetailAnalysisSamplePBIX.pbix`"$LF",
            "Content-Type: application/octet–stream$LF",
            $fileEnc,
            $LF,
            "--$boundary--",
            $LF) -join $LF;

Invoke-RestMethod -ContentType "multipart/form-data" -Method POST -Uri $uri -Body $body -Headers $headers

 

But when I ran this script it failed with the error "HTTP/1.1 500 Internal Server Error", I'm sure the URL/access key/pbix file path are right but it doesn't work.

 

Can someone help to figure it out? Any answer is greatly appreciated.

 

P.S. PowerShell response:

Invoke-RestMethod : {"Message":""}
At C:\Users\weihuan\Desktop\stanleytest.ps1:20 char:1
+ Invoke-RestMethod -ContentType "multipart/form-data" -Method POST -Ur ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (Method: POST, R...rt/form-data
}:HttpRequestMessage) [Invoke-RestMethod], HttpResponseException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

2 REPLIES 2
Eric_Zhang
Microsoft Employee
Microsoft Employee

@kustbilla

I know how to call the import api to upload a pbix file in C#, however I don't have much expertise on PowerShell. Please reference below C# code and modify the powershell script accordingly

 

using System;
using System.Net;
using System.IO;  

namespace PBIGettingStarted
{
    class Program
    {
        //Access key for app token
        private static string accessKey = "myaccesskey";

        //Power BI app token values
        private static string workspaceCollectionName = "myworkspace";
        private static string workspaceId = "myworkspaceid";

        private static string pbixFileName = "AdventureWorksdddd.pbix";

        static void Main(string[] args)
        {
            //Imports uri
            var uri = String.Format
                ("https://api.powerbi.com/v1.0/collections/{0}/workspaces/{1}/imports?datasetDisplayName=SampleImport",
                workspaceCollectionName, workspaceId);

            //PBIX file to import
            DirectoryInfo di = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory);
            string fileName = @"C:\test\mytest.pbix";
 
            //Create web request
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);

            //Import Request format:
            // Header:
            //  Content - Type: multipart / form - data; ----------BOUNDARY
            //  Authorization: AppToken

            // Body:
            //  ----------BOUNDARY
            //  Content - Disposition: form - data; filename = "{pbix file}.pbix"
            //  Content - Type: application / octet – stream

            //Define POST
            request.Method = "POST";
            request.UseDefaultCredentials = true;

            //Header
            // Boundary
            string boundary = "----------BOUNDARY";
            byte[] boundaryBytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");

            // Content - Type
            request.ContentType = "multipart/form-data; boundary=" + boundary;

            // Authorization - Use AppToken jwt for Authorization header
            request.Headers.Add("Authorization", String.Format("AppKey {0}", accessKey));

            //Body
            string bodyTemplate = "Content-Disposition: form-data; filename=\"{0}\"\r\nContent-Type: application / octet - stream\r\n\r\n";
            string body = string.Format(bodyTemplate, fileName);
            byte[] bodyBytes = System.Text.Encoding.UTF8.GetBytes(body);

            //Get request stream 
            using (Stream rs = request.GetRequestStream())
            {
                rs.Write(boundaryBytes, 0, boundaryBytes.Length);
                rs.Write(bodyBytes, 0, bodyBytes.Length);

                using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
                {
                    byte[] buffer = new byte[4096];
                    int bytesRead = 0;
                    while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
                    {
                        rs.Write(buffer, 0, bytesRead);
                    }
                }

                byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
                rs.Write(trailer, 0, trailer.Length);
            }

            //Get response
            using (HttpWebResponse response = request.GetResponse() as System.Net.HttpWebResponse)
            {
                //If Import succeeds, StatusCode = Accepted 
                var responseStatusCode = response.StatusCode.ToString();
            }
        }
    }
     

    }

@Eric_Zhang

Thanks Eric for your kind helpSmiley Happy

Helpful resources

Announcements
July 2025 community update carousel

Fabric Community Update - July 2025

Find out what's new and trending in the Fabric community.

July PBI25 Carousel

Power BI Monthly Update - July 2025

Check out the July 2025 Power BI update to learn about new features.