SSRSDeploymentTool · v4.0 · 2026

SSRS Deployment
Tool

Deploy .rdl, .rds, .rsds files. Power BI Report Server. Migration.

PowerShell 5.1 WinForms GUI SSRS REST API v2.0 Windows Auth

Uwe Janke · Senior IT Specialist · SQL Server & PowerShell Automation

SSRSDeploymentTool v4.0.0
Deploy
Migration
Server URL http://ssrs-server/Reports Connect
[x] .rdl [x] .rds [x] .rsds [x] .pbix
Report1.rdl .rdl UPDATED
Dashboard.pbix .pbix CREATED
DataSource.rds .rds UPDATED
Target folder /Finance/Controlling
► Deploy

Overview

What Is This Tool?

Deploys SSRS reports (.rdl, .rds, .rsds) from local files to SSRS or PBIRS servers via the REST API. A WinForms GUI - no command-line knowledge required.

Feature v3.x v3 v4.0.0 NEW
File types .rdl / .rds / .rsds .rdl / .rds / .rsds / .pbix
Power BI deploy no yes - PBIRS multipart POST
Server detection manual PBIRS auto-detection via API
Migration no SSRS → PBIRS (new tab)
GUI 1 tab 2 tabs: Deploy + Migration
Code size 1,012 lines 1,526 lines
Extended, not rewritten - all v3 functions remain unchanged.

File Types

Supported Formats

📄

.rdl

Report Definition Language. Paginated reports. SSRS and PBIRS.

🔌

.rds / .rsds

Data Source / Shared Dataset. Connection definitions and a reusable data basis.

.pbix NEW

Power BI Desktop report. PBIRS only. Interactive dashboards and analytics.

Format SSRS (classic) PBIRS (Power BI Report Server) Deploy method
.rdl PUT /Reports/api/v2.0/Reports
.rds PUT /Reports/api/v2.0/Data­Sources
.rsds PUT /Reports/api/v2.0/Data­Sets
.pbix ✗ not supported POST /Reports/api/v2.0/Power­BIReports
On pure SSRS: .pbix controls are visible but greyed out (SKIP instead of an error).

New in v4.0

PBIRS Detection & .pbix Deploy NEW

Auto-detection: SSRS or PBIRS?

# 1. Query the system endpoint
GET /Reports/api/v2.0/System

# Response on PBIRS:
{
  "ProductName": "Microsoft Power BI
               Report Server",
  "ProductVersion": "15.0.1115.93"
}

# Response on SSRS:
{
  "ProductName": "Microsoft SQL Server
               Reporting Services"
}

.pbix Deploy via Multipart POST

# 2. Upload the Power BI report
POST /Reports/api/v2.0/PowerBIReports
Content-Type: multipart/form-data

Body:
  file = <pbix binary content>

# PowerShell implementation:
$client = [System.Net.Http.HttpClient]::new()
$content = [System.Net.Http.
  MultipartFormDataContent]::new()
$bytes = [System.IO.File]::ReadAllBytes(
  $pbixPath)
$content.Add($byteContent, "file",
  $fileName)
Under the Hood: System.Net.Http.HttpClient + MultipartFormDataContent - PS 5.1 compatible, no Add-Type required.
PBIRS licensing error (403): shown as an understandable error message, not a stack trace.

User Interface

GUI: Deploy Tab

SSRSDeploymentTool v4.0.0 ⬤ ⬤ ⬤
Deploy
Migration
Server URL http://ssrs-prod/Reports Connect
✓ Connected - Microsoft SQL Server Reporting Services
Filter file types:
[x] .rdl [x] .rds [x] .rsds [ ] .pbix (SSRS: n/a)
Filename Type Status
MonthlyReport.rdl .rdl UPDATED
AnnualOverview.rdl .rdl CREATED
Dashboard.pbix .pbix SKIP
ProdDB.rds .rds UPDATED
Target folder /Finance/Controlling ...
► Deploy 3 files selected
1
Enter the server URL & connect

Windows Auth automatically - the ProductName is detected and displayed.

2
Set the file filter

.pbix is greyed out on pure SSRS. Active on PBIRS.

3
Select files

The ListView shows all files in the local source folder. Select/deselect individually.

4
Choose the target folder

Direct input or a TreeView browser. The folder is created if it doesn't exist.

5
Deploy

Each file: CREATED / UPDATED / SKIP / ERROR in the log.

New in v4.0

GUI: Migration Tab NEW

SSRSDeploymentTool v4.0.0 ⬤ ⬤ ⬤
Deploy
Migration
Source server ssrs-server.domain.com Connect
Target server pbirs-server.domain.com Connect
Source folder
▼ /Finance
▼ /Controlling
/MonthlyReports
/HR
Target folder
▼ /Reports
/Finance
/HR
 
Export path C:\Migration\2026-05-21_Export\ ...
[x] Adjust connection strings
Migrate →
12 / 34 files
[OK] MonthlyReport.rdl - CREATED
[OK] ProdDB.rds - UPDATED
[SKIP] Dashboard.pbix - not supported on SSRS

Export to a local staging directory - then deploy to the target server.

Source server
Local dir.
Target server
  • Both servers connected simultaneously
  • Left TreeView: source folder structure
  • Right TreeView: target folder structure
  • Export path: a local staging directory
  • Optionally adjust connection strings
  • Progress bar + log per file
The staging directory can be inspected before deployment - rollback is possible at any time.

Migration

Migration: Workflow

Source server
SSRS / PBIRS
Export-SSRSContent
PowerShell function
Local directory
C:\Migration\...
Deploy-Report /
Deploy-Data­Source
Target server
SSRS / PBIRS
1
Connect to the source server

Windows Auth. Connection test via GET /api/v2.0/System.

2
Load the folder structure

The left TreeView is populated with all folders from the source server.

3
Export: RDL as binary, RDS reconstructed as XML from the JSON API

GET /Reports (content as Base64) - local files are written.

4
Check the staging directory

Optional: inspect the files in Explorer. Adjust connection strings. Rollback is possible - just delete the files.

5
Connect to the target server & deploy

The folder structure is created. Files are deployed individually. Log: CREATED / UPDATED / ERROR per file.

No direct server-to-server transfer - always via a local directory. Traceable. Rollback possible.

Migration - Detail

Connection String Mapping

During export, .rds files are reconstructed as XML from the REST API's JSON response. Connection strings can be replaced via regex in the process.

Connection String Mapping
Search (regex) Replace with
ssqlprod17\INST01 pbirs-server\INST01
Data Source=DEV02 Data Source=PROD-PBIRS
Initial Catalog=ReportDB Initial Catalog=ReportDB_P
<+ new row>
+ Add row - Delete row
1
Export phase

The mapping is applied to all .rds connection strings during export.

2
Regex replace

Each row is its own search/replace pair. Watch the order with overlapping patterns.

3
Check the local files

The result is visible and editable as .rds XML in the staging directory.

Multiple rows are possible - for environments with several DB servers.
Optional: without a mapping, the original connection strings are carried over unchanged.

Security & Access

Authentication

🔐

Windows Auth (default)

No configuration effort. UseDefaultCredentials = true. Sufficient for on-premise SSRS and PBIRS in a Windows domain.

# Automatic - no password
$cred = [System.Net.
  CredentialCache]::
  DefaultNetworkCredentials

# HttpClient (for .pbix)
$handler.Credentials =
  [System.Net.
  CredentialCache]::
  DefaultCredentials
📝

Manual Credentials

Enter a username and password in the GUI. Passed as a NetworkCredential. For accounts outside the current domain.

Username domain\user
Password ●●●●●●●●
[ ] Use Windows authentication
OAuth / AAD: deferred. Only relevant once PBIRS is connected to Azure AD. Currently no use case in on-premise environments.
Scenario Recommended auth Note
On-premise SSRS in a Windows domain Windows Auth Standard case - no effort
On-premise PBIRS in a Windows domain Windows Auth Identical to SSRS
A different domain account Manual Username/password in the GUI
Azure AD / AAD Not supported Roadmap: v5.x

Architecture

Technical Foundation

Component Details
WinForms GUI TabControl, TreeView, DataGridView, ListView, RichTextBox (log)
REST client Invoke-WebRequest (.rdl / .rds) + System.Net.Http.HttpClient (.pbix)
API SSRS / PBIRS REST API v2.0 - the same endpoint on both servers
Binary download Invoke-WebRequest -OutFile (RDL / RSDS binary, Base64 decode)
PBIX upload Multipart­FormDataContent via HttpClient
PS version PowerShell 5.1 - no PSCore requirement, no Add-Type issues
Authentication Default­Credentials (Windows) or Network­Credential (manual)
Encoding UTF-8 with BOM (.ps1) - no em-dash in string literals

API Endpoints (Selection)

# Server info
GET  /api/v2.0/System

# Folder contents
GET  /api/v2.0/Folders({id})/
         CatalogItems

# Upload a report
POST /api/v2.0/Reports

# Overwrite a report
PUT  /api/v2.0/Reports({id})

# Upload a Power BI report
POST /api/v2.0/PowerBIReports

# Create a data source
POST /api/v2.0/DataSources

# Create a folder
POST /api/v2.0/Folders
SSRS and PBIRS use the same REST API v2.0 endpoint. The tool detects the type automatically and enables/disables .pbix functions accordingly.

Development

Version History & Roadmap

Version Status Features Size
v1.x / v2.x Archived First WinForms GUI, basic deploy via SOAP/REST ~500 lines
v3.0.1 v3 Stable SSRS deploy (.rdl, .rds, .rsds), GUI overhaul, Windows Auth, manual credentials 1,012 lines
v4.0.0 NEW Current + .pbix deploy to PBIRS, + PBIRS auto-detection, + Migration tab, + connection string mapping, + DataGridView mapping 1,526 lines
v4.x Planned Field testing in production environments, refine error handling, cover edge cases tbd
v5.x Roadmap OAuth / AAD support, .pbix migration, batch mode without a GUI tbd
GitHub: https://github.com/JankeUwe/SSRSDeploymentTool
PowerShell 5.1 — no setup, no installer. Run the script directly.
SSRSDeploymentTool PowerShell 5.1 SSRS REST API v2.0 WinForms PBIRS GitHub: JankeUwe

Summary

SSRSDeploymentTool v4.0 - Conclusion

🚀

Deploy

.rdl / .rds / .rsds / .pbix to SSRS or PBIRS - one tool, every format. Auto-detection decides which functions are active.

🔄

Migration

SSRS to PBIRS in a few clicks. Export - review - deploy. A local staging directory for transparency and rollback.

🔒

Security

Windows Auth with no configuration. SKIP instead of an error on the wrong server type. Staging directory reviewable before deploy.

Target audience: IT admins and DBAs operating SSRS or PBIRS servers who need to deploy or migrate reports.
No setup: PowerShell 5.1 + a Windows domain is enough. No extra modules, no NuGet.
TaskTool Function
Roll out new reportsDeploy tab
Update reportsDeploy tab (PUT)
Deploy Power BI reportsDeploy tab (.pbix)
Migrate SSRS to PBIRSMigration tab
Adjust connection stringsMapping table
SSRSDeploymentTool PowerShell 5.1 SSRS REST API v2.0 PBIRS WinForms Windows Auth Migration Uwe Janke 2026