SSRSDeploymentTool · v4.0 · 2026
Deploy .rdl, .rds, .rsds files. Power BI Report Server. Migration.
Uwe Janke · Senior IT Specialist · SQL Server & PowerShell Automation
Overview
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 |
File Types
Report Definition Language. Paginated reports. SSRS and PBIRS.
Data Source / Shared Dataset. Connection definitions and a reusable data basis.
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/DataSources |
| .rsds | ✓ | ✓ | PUT /Reports/api/v2.0/DataSets |
| .pbix | ✗ not supported | ✓ | POST /Reports/api/v2.0/PowerBIReports |
New in v4.0
# 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"
}
# 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)
User Interface
Windows Auth automatically - the ProductName is detected and displayed.
.pbix is greyed out on pure SSRS. Active on PBIRS.
The ListView shows all files in the local source folder. Select/deselect individually.
Direct input or a TreeView browser. The folder is created if it doesn't exist.
Each file: CREATED / UPDATED / SKIP / ERROR in the log.
New in v4.0
Export to a local staging directory - then deploy to the target server.
Migration
Windows Auth. Connection test via GET /api/v2.0/System.
The left TreeView is populated with all folders from the source server.
GET /Reports (content as Base64) - local files are written.
Optional: inspect the files in Explorer. Adjust connection strings. Rollback is possible - just delete the files.
The folder structure is created. Files are deployed individually. Log: CREATED / UPDATED / ERROR per file.
Migration - Detail
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.
| 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> |
The mapping is applied to all .rds connection strings during export.
Each row is its own search/replace pair. Watch the order with overlapping patterns.
The result is visible and editable as .rds XML in the staging directory.
Security & Access
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
Enter a username and password in the GUI. Passed as a NetworkCredential. For accounts outside the current domain.
| 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
| 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 | MultipartFormDataContent via HttpClient |
| PS version | PowerShell 5.1 - no PSCore requirement, no Add-Type issues |
| Authentication | DefaultCredentials (Windows) or NetworkCredential (manual) |
| Encoding | UTF-8 with BOM (.ps1) - no em-dash in string literals |
# 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
Development
| 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 |
Summary
.rdl / .rds / .rsds / .pbix to SSRS or PBIRS - one tool, every format. Auto-detection decides which functions are active.
SSRS to PBIRS in a few clicks. Export - review - deploy. A local staging directory for transparency and rollback.
Windows Auth with no configuration. SKIP instead of an error on the wrong server type. Staging directory reviewable before deploy.
| Task | Tool Function |
|---|---|
| Roll out new reports | Deploy tab |
| Update reports | Deploy tab (PUT) |
| Deploy Power BI reports | Deploy tab (.pbix) |
| Migrate SSRS to PBIRS | Migration tab |
| Adjust connection strings | Mapping table |