TECHTalksPro
  • Home
  • Business
    • Internet
    • Market
    • Stock
  • Parent Category
    • Child Category 1
      • Sub Child Category 1
      • Sub Child Category 2
      • Sub Child Category 3
    • Child Category 2
    • Child Category 3
    • Child Category 4
  • Featured
  • Health
    • Childcare
    • Doctors
  • Home
  • SQL Server
    • SQL Server 2012
    • SQL Server 2014
    • SQL Server 2016
  • Downloads
    • PowerShell Scripts
    • Database Scripts
  • Big Data
    • Hadoop
      • Hive
      • Pig
      • HDFS
    • MPP
  • Certifications
    • Microsoft SQL Server -70-461
    • Hadoop-HDPCD
  • Problems/Solutions
  • Interview Questions

Monday, December 26, 2016

Powershell Script for SSRS Deployment

 Chitchatiq     12/26/2016 10:32:00 AM     Powershell, SQL Server     No comments   


Scenarios: Deploy SSRS reports using automation

Powershell Script for SSRS Deployment


#Set variables with configure values
$Environment = "DEV"
$reportPath ="/"
$reportFolder = "DemoReports"
$SourceDirectory = "E:\Test"  # local folder path where actual files exists
$DataSourcePath = "/"
$DataSet_Folder = "/"
$IsOverwriteDataSource =1
$IsOverwriteDataSet =1
$IsOverwriteReport =1


# Set server IP address based on Environment provided from Config file
IF( $Environment -eq "DEV")
 {
    $webServiceUrl = "http://server" # or http://xx.xxx.x..xxx
 }
 ELSEIF ( $Environment -eq "TEST")
 {
    $webServiceUrl = "http://server" # or http://xx.xxx.x..xxx
 }
 ELSEIF ($Environment -eq "PROD")
 {
    $webServiceUrl = "http://server" # or http://xx.xxx.x..xxx
 }


#Connecting to SSRS
Write-Host "Reportserver: $webServiceUrl" -ForegroundColor Magenta
Write-Host "Creating Proxy, connecting to : $webServiceUrl/ReportServer/ReportService2010.asmx?WSDL"
Write-Host ""
$ssrsProxy = New-WebServiceProxy -Uri $webServiceUrl'/ReportServer/ReportService2010.asmx?WSDL' -UseDefaultCredential


$reportFolder_Final = $reportPath +  $reportFolder

##########################################  
#Create Report Folder
        Write-host ""
        try
        {
            $ssrsProxy.CreateFolder($reportFolder, $reportPath, $null)
            Write-Host "Created new folder: $reportFolder_Final"
        }
        catch [System.Web.Services.Protocols.SoapException]
        {
            if ($_.Exception.Detail.InnerText -match "[^rsItemAlreadyExists400]")
            {
                Write-Host "Folder: $reportFolder already exists."
            }
            else
            {
                $msg = "Error creating folder: $reportFolder. Msg: '{0}'" -f $_.Exception.Detail.InnerText
                Write-Error $msg
            }
          
        }


##########################################
#Create datasource

foreach($rdsfile in Get-ChildItem $SourceDirectory -Filter *.rds)
{
Write-host $rdsfile

#create data source
try
    {

        $rdsf = [System.IO.Path]::GetFileNameWithoutExtension($rdsfile);

       $RdsPath = $SourceDirectory+"\"+$rdsf+".rds"

        Write-host "Reading data from $RdsPath"

        [xml]$Rds = Get-Content -Path $RdsPath
        $ConnProps = $Rds.RptDataSource.ConnectionProperties

        $type = $ssrsProxy.GetType().Namespace
        $datatype = ($type + '.DataSourceDefinition')
        $datatype_Prop = ($type + '.Property')

        $DescProp = New-Object($datatype_Prop)
         $DescProp.Name = 'Description'
         $DescProp.Value = ''
         $HiddenProp = New-Object($datatype_Prop)
         $HiddenProp.Name = 'Hidden'
         $HiddenProp.Value = 'false'
         $Properties = @($DescProp, $HiddenProp)

        $Definition = New-Object ($datatype)
        $Definition.ConnectString = $ConnProps.ConnectString
        $Definition.Extension = $ConnProps.Extension
        if ([Convert]::ToBoolean($ConnProps.IntegratedSecurity)) {
            $Definition.CredentialRetrieval = 'Integrated'
        }
  

        $DataSource = New-Object -TypeName PSObject -Property @{
            Name = $Rds.RptDataSource.Name
            Path =  $Folder + '/' + $Rds.RptDataSource.Name
        }


            if ($IsOverwriteDataSource -eq 1)
            {
                [boolean]$IsOverwriteDataSource = 1
            }
            else
            {
                [boolean]$IsOverwriteDataSource = 0

            }

            $warnings = $ssrsProxy.CreateDataSource($rdsf, $reportFolder_Final ,$IsOverwriteDataSource, $Definition, $Properties)
          
          #  Write-Host $warnings

    }
    catch [System.IO.IOException]
    {
        $msg = "Error while reading rds file : '{0}', Message: '{1}'" -f $rdsfile, $_.Exception.Message
        Write-Error msgcler
    }
    catch [System.Web.Services.Protocols.SoapException]
 {
            if ($_.Exception.Detail.InnerText -match "[^rsItemAlreadyExists400]")
            {
                Write-Host "DataSource: $rdsf already exists."
            }
            else
            {
          
                $msg = "Error uploading report: $rdsf. Msg: '{0}'" -f $_.Exception.Detail.InnerText
                Write-Error $msg
            }
 
 }
 }


##########################################
 # Create Dataset
 Write-host "dataset changes start"
 foreach($rsdfile in Get-ChildItem $SourceDirectory -Filter *.rsd)
{
  Write-host ""

 $rsdf =  [System.IO.Path]::GetFileNameWithoutExtension($rsdfile)
       $RsdPath = $SourceDirectory+'\'+$rsdf+'.rsd'
  
    Write-Verbose "New-SSRSDataSet -RsdPath $RsdPath -Folder $DataSet_Folder"
  
 $RawDefinition = Get-Content -Encoding Byte -Path $RsdPath
 $warnings = $null

 $Results = $ssrsProxy.CreateCatalogItem("DataSet", $rsdf, $reportFolder_Final, $IsOverwriteDataSet, $RawDefinition, $null, [ref]$warnings)
  
 write-host "dataset created successfully"
  

}


#############################
#For each RDL file in Folder

foreach($rdlfile in Get-ChildItem $SourceDirectory -Filter *.rdl)
{
Write-host ""


#ReportName
 $reportName = [System.IO.Path]::GetFileNameWithoutExtension($rdlFile);
 write-host $reportName -ForegroundColor Green
 #Upload File
     try
    {
        #Get Report content in bytes
        Write-Host "Getting file content of : $rdlFile"
        $byteArray = gc $rdlFile.FullName -encoding byte
        $msg = "Total length: {0}" -f $byteArray.Length
        Write-Host $msg

        Write-Host "Uploading to: $reportFolder_Final"

        $type = $ssrsProxy.GetType().Namespace
        $datatype = ($type + '.Property')

        $DescProp = New-Object($datatype)
 $DescProp.Name = 'Description'
     $DescProp.Value = ''
     $HiddenProp = New-Object($datatype)
     $HiddenProp.Name = 'Hidden'
     $HiddenProp.Value = 'false'
     $Properties = @($DescProp, $HiddenProp)

        #Call Proxy to upload report

        $warnings = $null
 
       $Results = $ssrsProxy.CreateCatalogItem("Report", $reportName,$reportFolder_Final, $IsOverwriteReport,$byteArray,$Properties,[ref]$warnings)

       if($warnings.length -le 1)
        { Write-Host "Upload Success." -ForegroundColor Green
         }
        else
        { write-host $warnings
         }

    }
    catch [System.IO.IOException]
    {
        $msg = "Error while reading rdl file : '{0}', Message: '{1}'" -f $rdlFile, $_.Exception.Message
        Write-Error msg
    }
    catch [System.Web.Services.Protocols.SoapException]
 {
          
                $msg = "Error uploading report: $reportName. Msg: '{0}'" -f $_.Exception.Detail.InnerText
                Write-Error $msg
          
 
 }

##########################################
     ##Change Datasource
    $reportFullName = $reportFolder_Final+"/"+$reportName
    Write "datasource record $reportFullName"

    $rep = $ssrsProxy.GetItemDataSources($reportFullName)
    $rep | ForEach-Object {
    $proxyNamespace = $_.GetType().Namespace

    $constDatasource = New-Object ("$proxyNamespace.DataSource")
  
    $constDatasource.Item = New-Object ("$proxyNamespace.DataSourceReference")
    $FinalDatasourcePath =$reportPath+$reportFolder+"/"+ $($_.Name)
    $constDatasource.Item.Reference = $FinalDatasourcePath

    $_.item = $constDatasource.Item
    $ssrsProxy.SetItemDataSources($reportFullName, $_)
    Write-Host "Changing datasource `"$($_.Name)`" to $($_.Item.Reference)"
}

}


Write-host ""
Write-host "Successfully completed SSRS deployment" -ForegroundColor Magenta
Write-host ""



***
Script can be downloaded from beow MSDN link https://social.technet.microsoft.com/wiki/contents/articles/34521.powershell-script-for-ssrs-project-deployment.aspx

**********************
Keywords: 
ssrs automation , ssrs deployment automation, ssrs deploy powershell,ssrs deployment powershell
powershell ssrs deployment,powershell ssrs report,ssrs powershell cmdlets,ssrs powershell deploy,
ssrs powershell create folder, PowerShell Script Deploying SSRS Report
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg
Email ThisBlogThis!Share to XShare to Facebook
Newer Post Older Post Home

0 comments:

Post a Comment

Popular Posts

  • How to Fix ERROR: CANNOT PARALLELIZE AN UPDATE STATEMENT THAT UPDATES THE DISTRIBUTION COLUMNS Printable View
    Error: [DataDirect][ODBC Greenplum Wire Protocol driver][Greenplum]ERROR: Cannot parallelize an UPDATE statement that updates the distri...
  • What is BiG Data
                              1.     Big data is a term that describes the large volume of structured, semi-structured, un-structured da...
  • Error: Failed with exception Unable to move source hdfs: to destination dfs://hadoop1.dev.com/apps/ FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask
    Resolution: 1.     Generally Move task will move the files from source location to destination location. If the user doesn’t have ...
  • BIG_DATA: Hadoop History and Overview
    Apache™ Hadoop® is a distributed and highly scalable storage framework to process ve...

Facebook

Categories

Best Practices (1) Big Data (5) BigData&Hadoop (6) DAG (1) Error 10294 (1) external tables (1) File Formats in Hive (1) Greenplum (3) Hadoop (5) Hadoop Commands (1) Hive (4) Internal tables (1) interview Questions (1) Managed tables (1) MySQL Installation (1) ORCFILE (1) org.apache.hadoop.hive.ql.exec.MoveTask (1) Powershell (1) Problems&Solutions (15) RCFILE (1) return code 1 (1) SEQUENCEFILE (1) Service 'userhome' (1) Service 'userhome' check failed: java.io.FileNotFoundException (1) SQL Server (27) sqoop (2) SSIS (1) TEXTFILE (1) Tez (1) transaction manager (1) Views (1) What is Hadoop (1)

Blog Archive

  • December (1)
  • November (1)
  • October (2)
  • September (6)
  • August (1)
  • July (3)
  • March (1)
  • February (8)
  • January (4)
  • December (9)
  • August (4)
  • July (1)

Popular Tags

  • Best Practices
  • Big Data
  • BigData&Hadoop
  • DAG
  • Error 10294
  • external tables
  • File Formats in Hive
  • Greenplum
  • Hadoop
  • Hadoop Commands
  • Hive
  • Internal tables
  • interview Questions
  • Managed tables
  • MySQL Installation
  • ORCFILE
  • org.apache.hadoop.hive.ql.exec.MoveTask
  • Powershell
  • Problems&Solutions
  • RCFILE
  • return code 1
  • SEQUENCEFILE
  • Service 'userhome'
  • Service 'userhome' check failed: java.io.FileNotFoundException
  • SQL Server
  • sqoop
  • SSIS
  • TEXTFILE
  • Tez
  • transaction manager
  • Views
  • What is Hadoop

Featured Post

TOP 100 SQL SERVER INTERVIEW QUESTIONS

SQL SERVER INTERVIEW QUESTIONS 1.       What is the Complex task that you handled in your project 2.       What are the diffe...

Pages

  • Home
  • SQL SERVER
  • Greenplum
  • Hadoop Tutorials
  • Contact US
  • Disclaimer
  • Privacy Policy

Popular Posts

  • FAILED: SemanticException [Error 10294]: Attempt to do update or delete using transaction manager that does not support these operations.
    Error: Resolution:         1.       Check if Your table storage format is ORC         2.      Check if yo...
  • Greenplum System-Useful Queries
    Useful Queries: Query to verify the list of segments in a Greenplum system select * from gp_segment_configuration; R...

Copyright © TECHTalksPro
Designed by Vasu