Contents

Getting SSRS Details via Powershell

Contents

This is one of those posts so I never have to google this again (one hopes). Here is the PS code to pull back a set of details about every SSRS instance installed on a server including the SSRS instance name, & the first URL port it is running on, the service name and the name of the report server database etc.

$servername = 'myserver'
$key = "Software\\Microsoft\\Microsoft SQL Server"
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $server)
$regKey = $reg.OpenSubKey($key)
$keys = $regKey.GetSubKeyNames()

$v = 0
foreach($k in $keys)
{
    if($k -match 'MSRS[\d\d].' -and $k -notcontains '\@'){
        $pv = $k.Substring(4, 2)

        if ($v -le $pv){
            $v = $pv
            $rs = "RS_" + $k.Substring($k.IndexOf('.') + 1)
        }
    }
}

$nspace = "root\Microsoft\SQLServer\ReportServer\$rs\v$v\Admin"
$RSServers = Get-WmiObject -Namespace $nspace -class `
    MSReportServer_ConfigurationSetting -ComputerName $servername `
    -ErrorVariable perror -ErrorAction SilentlyContinue

foreach ($r in $RSServers){
      #https://docs.microsoft.com/en-us/sql/reporting-services/wmi-provider-library-reference/msreportserver-configurationsetting-members?view=sql-server-2017
    $ssrsHost = $r.InstanceName
    $ssrsVers = $r.version
    $ssrsDB = $r.DatabaseName
    $ssrsShare = $r.IsSharePointIntegrated
    $ssrsService = $r.ServiceName
    $vPath = $r.VirtualDirectoryReportServer
    $urls = $r.ListReservedUrls()
    $urls = $urls.UrlString[0]
    $urls = $urls.Replace('+', $servername) + "/$vPath"
    
    # NOW do a thing with this specific SSRS instance details
    $ssrsHost
    $ssrsVers
    $ssrsDB         
    $ssrsShare
    $ssrsService
    $vPath
    $urls
}