Manuelle Schritte zum Konfigurieren von SQL Server Reporting Services

Wichtig

Diese Version von Service Manager hat das Ende des Supports erreicht. Es wird empfohlen, ein Upgrade auf Service Manager 2022 durchzuführen.

Während der Bereitstellung des Service Manager Data Warehouse-Verwaltungsservers können Sie den Server angeben, auf dem Microsoft SQL Server Reporting Services (SSRS) bereitgestellt wird. Standardmäßig wird während des Setups der Computer ausgewählt, auf dem der Data Warehouse-Verwaltungsserver gehostet wird. Wenn Sie einen anderen Computer zum Hosten von SSRS angeben, werden Sie aufgefordert, dieses Verfahren zum Vorbereiten des Servers zu befolgen. Führen Sie zum Vorbereiten des Remotecomputers als Host für SSRS die Schritte aus, die in diesem Abschnitt detailliert beschrieben werden:

  • Kopieren Sie die Datei „Microsoft.EnterpriseManagement.Reporting.Code.dll“ vom Service Manager-Installationsmedium auf den SSRS-Hostcomputer.

  • Fügen Sie auf dem Computer, auf dem SSRS gehostet wird, ein Codesegment zur Konfigurationsdatei "rssrvpolicy" hinzu

  • Fügen Sie eine Erweiterungsmarkierung zum vorhandenen Datensegment in der „rsreportserver“-Konfigurationsdatei auf demselben Computer hinzu.

Wenn Sie die Standard-instance von SQL Server verwendet haben, verwenden Sie Windows Explorer, um Microsoft.EnterpriseManagement.Reporting.Code.dll (der sich im Ordner Voraussetzungen auf Ihrem Service Manager Installationsmedium befindet) in den Ordner \Programme\Microsoft SQL Server\MSRS13 zu ziehen. MSSQLSERVER\Reporting Services\ReportServer\Bin auf dem Computer, der SSRS hostet. Wenn Sie nicht die Standard-instance von SQL Server verwendet haben, lautet der Pfad des erforderlichen Ordners \Programme\Microsoft SQL Server\MSRS13.<>INSTANCE_NAME\Reporting Services\ReportServer\Bin. Im folgenden Verfahren wird der Standardinstanzname verwendet.

Kopieren der Microsoft.EnterpriseManagement.Reporting.Code.dll-Datei

Führen Sie die folgenden Schritte durch:

  1. Öffnen Sie eine Instanz von Windows-Explorer auf dem SSRS-Hostcomputer.

  2. Suchen Sie für SQL Server 2016 den Ordner \Programme\Microsoft SQL Server\MSRS13. MSSQLSERVER\Reporting Services\ReportServer\Bin.

  3. Starten Sie eine zweite Instanz von Windows-Explorer, wechseln Sie zum Laufwerk mit dem Service Manager-Installationsmedium, und öffnen Sie den Ordner „Voraussetzungen“.

  4. Wählen Sie im Ordner Voraussetzungen Microsoft.EnterpriseManagement.Reporting.Code.dllaus, und ziehen Sie ihn in den Ordner, den Sie in Schritt 2 gefunden haben.

Hinzufügen eines Codesegments zur rssrvpolicy.config-Datei

Führen Sie die folgenden Schritte durch:

  1. Suchen Sie auf dem Computer, auf dem SSRS gehostet wird, die Datei rssrvpolicy.config unter \Programme\Microsoft SQL Server\MSRS13. Ordner "MSSQLSERVER\Reporting Services\ReportServer" für SQL Server 2016.

  2. Öffnen Sie mit einem XML-Editor Ihrer Wahl (z. B. Editor) die Datei „rssrvpolicy.config“.

  3. Führen Sie in der Datei rssrvpolicy.config einen Bildlauf nach unten durch, und suchen Sie die <CodeGroup>-Codesegmente. Im Folgenden sehen Sie ein Beispiel für ein <CodeGroup>-Segment.

    <CodeGroup
       class="UnionCodeGroup"
       version="1"
       PermissionSetName="FullTrust">
       <IMembershipCondition
          class="UrlMembershipCondition"
          version="1"
          Url="$CodeGen$/*"
       />
    </CodeGroup>
    
  4. Fügen Sie das nachfolgende <CodeGroup>-Segment komplett in den Abschnitt ein, in dem sich auch die übrigen <CodeGroup>-Segmente befinden.

    <CodeGroup
       class="UnionCodeGroup"
       version="1"
       PermissionSetName="FullTrust"
       Name="Microsoft System Center Service Manager Reporting Code Assembly"
       Description="Grants the SCSM Reporting Code assembly full trust permission.">
       <IMembershipCondition
          class="StrongNameMembershipCondition"
          version="1"
          PublicKeyBlob="0024000004800000940000000602000000240000525341310004000001000100B5FC90E7027F67871E773A8FDE8938C81DD402BA65B9201D60593E96C492651E889CC13F1415EBB53FAC1131AE0BD333C5EE6021672D9718EA31A8AEBD0DA0072F25D87DBA6FC90FFD598ED4DA35E44C398C454307E8E33B8426143DAEC9F596836F97C8F74750E5975C64E2189F45DEF46B2A2B1247ADC3652BF5C308055DA9"
    />
    </CodeGroup>
    
  5. Speichern Sie die Änderungen, und schließen Sie den XML-Editor.

Hinzufügen eines Erweiterungstags zum Datensegment in der Datei rsreportserver.conf

Führen Sie die folgenden Schritte durch:

  1. Suchen Sie auf dem Computer, auf dem SSRS gehostet wird, die Datei rsreportserver.config unter \Programme\Microsoft SQL Server\MSRS13. Ordner "MSSQLSERVER\Reporting Services\ReportServer" für SQL Server 2016.

  2. Öffnen Sie mit einem XML-Editor Ihrer Wahl (z. B. Editor) die Datei „rsreportserver.config“.

  3. Führen Sie in der Datei „rsreportserver.config“ einen Bildlauf nach unten aus, und suchen Sie das <Data>-Codesegment. Diese Datei enthält nur ein <Data> Codesegment.

  4. Fügen Sie an der Stelle, an der sich die übrigen Extension-Markierungen befinden, die folgende <Data>-Markierung zum Extension-Codesegment hinzu:

    <Extension Name="SCDWMultiMartDataProcessor" Type="Microsoft.EnterpriseManagement.Reporting.MultiMartConnection, Microsoft.EnterpriseManagement.Reporting.Code" />
    
  5. Speichern Sie die Änderungen, und schließen Sie den XML-Editor.

Überprüfen der SSRS-Installation

In der Service Manager Data Warehouse (DW) Version 2016 und höher wird das folgende bekannte Problem beobachtet:

Im Service Manager Data Warehouse (DW) wird das folgende bekannte Problem beobachtet:

Wenn SQL Server Reporting Services (SSRS) lokal auf dem Data Warehouse Management Server und SSRS 2017 oder höher ausgeführt wird, wird das Data Warehouse-Setup erfolgreich abgeschlossen, aber möglicherweise nicht instance ordnungsgemäß konfiguriert.

Verwenden Sie das folgende Skript, um zu überprüfen, ob die LOKALE SSRS-Installation ordnungsgemäß konfiguriert ist und mit dem Service Manager Data Warehouse verwendet werden kann.

Hinweis

Dieses PowerShell-Skript kann nach einer Service Manager Data Warehouse Installation ausgeführt werden. Das Skript ändert die Konfiguration nicht, sondern überprüft sie. Sie können das Skript so oft wie erforderlich ausführen.

#region function definitions

function SelfElevate() {
    #got from http://www.expta.com/2017/03/how-to-self-elevate-powershell-script.html   and changed a bit
    if (-Not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] 'Administrator')) {
     if ([int](Get-WmiObject -Class Win32_OperatingSystem | Select-Object -ExpandProperty BuildNumber) -ge 6000) {
      $CommandLine = "-File `"" + $Script:MyInvocation.MyCommand.Path + "`" " + $Script:MyInvocation.UnboundArguments
      Start-Process -FilePath PowerShell.exe -Verb Runas -ArgumentList $CommandLine
      Exit
     }
    }
}
function EndScriptExecution() {
    Write-Host ""
    Read-Host "Press ENTER to stop execution" 
    Exit
}
#endregion
#region Init
SelfElevate
#endregion 

#region Select SSRS service
$ssrsServicesAvailable = gwmi win32_service | ?{ $_.DisplayName -like 'SQL Server Reporting Services*' }
if ($ssrsServicesAvailable -eq $null) {
    Write-Host "No SSRS service(s) detected on this machine. " -NoNewline
    Write-Host "Aborting ..." -ForegroundColor Yellow
    EndScriptExecution
}

if ( ($ssrsServicesAvailable | Measure-Object).Count -eq 1) {
    $ssrsServiceToVerify = ($ssrsServicesAvailable | Select-Object -Property DisplayName, State, PathName) | Select-Object -First 1
}
else {
    $ssrsServiceToVerify = $ssrsServicesAvailable | Select-Object -Property DisplayName, State, PathName | Out-GridView  -Title 'Select the SSRS service to verify and then click OK...' -OutputMode Single
    if ($ssrsServiceToVerify -eq $null) {
        Write-Host "No SSRS service selected to verify. " -NoNewline
        Write-Host "Aborting ..." -ForegroundColor Yellow
        EndScriptExecution
    }
}
#endregion

#region Preparation
Write-Host "--------------------------------------------------------------------"
Write-Host "Verifiying selected SSRS service : " -NoNewline
Write-Host "'$($ssrsServiceToVerify.DisplayName)'"  -ForegroundColor Cyan
Write-Host "--------------------------------------------------------------------"
Write-Host ""

$ssrsExePath = $ssrsServiceToVerify.PathName.Replace('"','')
$ssrsExeFileVersion = [System.Diagnostics.FileVersionInfo]::GetVersionInfo($ssrsExePath)
$ssrsMajorVersion = $ssrsExeFileVersion.ProductMajorPart
$ssrsVersionDisplayName = switch ($ssrsMajorVersion)
{
    11 {"2012"}
    12 {"2014"}
    13 {"2016"}
    14 {"2017"}
    15 {"2019"}
    default {""}
}
if ($ssrsVersionDisplayName -eq "") {
    Write-Host "Unknown SSRS Version detected. " -NoNewline
    Write-Host "Aborting ..." -ForegroundColor Yellow
    EndScriptExecution
}

[System.IO.DirectoryInfo]$ssrsReportServerFolder = (Get-Item -Path $ssrsExePath).Directory.Parent
if ($ssrsMajorVersion -ge 14) {
    $ssrsReportServerFolder =    Join-Path $ssrsReportServerFolder.FullName "ReportServer"
}
[string]$ssrsReportServerFolder = $ssrsReportServerFolder.FullName 
[string]$ssrsReportServerBinFolder = Join-Path $ssrsReportServerFolder "bin"
#endregion

#region Checking DLL
$scsmDllFileExists = $false
$scsmDllFileName = "Microsoft.EnterpriseManagement.Reporting.Code.dll"
$scsmDllFilePath = Join-Path $ssrsReportServerBinFolder $scsmDllFileName
$scsmDllFileExists = (Test-Path -Path $scsmDllFilePath)
if (-not $scsmDllFileExists) {
    Write-Host "ERROR: "  -ForegroundColor Yellow -NoNewline
    Write-Host "The file '$scsmDllFileName' does *NOT* exist in '$ssrsReportServerBinFolder'"
}
else {
    Write-Host " Pass: The file '$scsmDllFileName' does exist in '$ssrsReportServerBinFolder'" 
}
Write-Host ""
#endregion

#region Checking rssrvpolicy.config
$rssrvpolicy_configIsCorrect = $false
$rssrvpolicy_configFileName = "rssrvpolicy.config"
$rssrvpolicy_configFilePath = Join-Path $ssrsReportServerFolder $rssrvpolicy_configFileName
$rssrvpolicy_configFileExists = (Test-Path -Path $rssrvpolicy_configFilePath)
if (-not $rssrvpolicy_configFileExists) {
    Write-Host "$rssrvpolicy_configFileName does *NOT* exist in $ssrsReportServerFolder" -ForegroundColor Yellow
}
if ($rssrvpolicy_configFileExists) {    
    
    [xml]$xml = Get-Content $rssrvpolicy_configFilePath
    
    $tagNameToFind = "CodeGroup"
    $attributeNameToFind = "Name"
    $attributeValueToFind = "Microsoft System Center Service Manager Reporting Code Assembly"
    $nodeToFind = Select-Xml -XPath "//$tagNameToFind[@$attributeNameToFind='$attributeValueToFind']" -Xml $xml

    if ($nodeToFind -eq $null) {
        Write-Host "ERROR: "  -ForegroundColor Yellow -NoNewline
        Write-Host "The file '$rssrvpolicy_configFileName' in '$ssrsReportServerFolder' does *NOT* contain the correct <$tagNameToFind> node." 
    }
    else {

        $CodeGroup_NodeToVerify = [System.Xml.XmlNode]$nodeToFind.Node
        $IMembershipCondition_NodeToVerify = [System.Xml.XmlNode]$CodeGroup_NodeToVerify.IMembershipCondition

        $rssrvpolicy_configIsCorrect =  ( $CodeGroup_NodeToVerify.class -eq "UnionCodeGroup" `
            -and $CodeGroup_NodeToVerify.version -eq "1" `
            -and $CodeGroup_NodeToVerify.PermissionSetName -eq "FullTrust" `
            -and $IMembershipCondition_NodeToVerify.class -eq "StrongNameMembershipCondition" `
            -and $IMembershipCondition_NodeToVerify.version -eq "1" `
            -and $IMembershipCondition_NodeToVerify.PublicKeyBlob -eq "0024000004800000940000000602000000240000525341310004000001000100B5FC90E7027F67871E773A8FDE8938C81DD402BA65B9201D60593E96C492651E889CC13F1415EBB53FAC1131AE0BD333C5EE6021672D9718EA31A8AEBD0DA0072F25D87DBA6FC90FFD598ED4DA35E44C398C454307E8E33B8426143DAEC9F596836F97C8F74750E5975C64E2189F45DEF46B2A2B1247ADC3652BF5C308055DA9"
        ) 

        if (-not $rssrvpolicy_configIsCorrect) {
            Write-Host "ERROR: "  -ForegroundColor Yellow -NoNewline
            Write-Host "The <$tagNameToFind> node in '$rssrvpolicy_configFileName' in '$ssrsReportServerFolder' does exists but its content is *NOT* correct."
        }
        else {
            Write-Host " Pass: The content of '$rssrvpolicy_configFileName'    in '$ssrsReportServerFolder' is correct."             
        }
    }

}
Write-Host ""
#endregion

#region Checking rsreportserver.config
$rsreportserver_configIsCorrect = $false
$rsreportserver_configFileName = "rsreportserver.config"
$rsreportserver_configFilePath = Join-Path $ssrsReportServerFolder $rsreportserver_configFileName
$rsreportserver_configFileExists = (Test-Path -Path $rsreportserver_configFilePath)
if (-not $rsreportserver_configFileExists) {
    Write-Host "$rsreportserver_configFileName does *NOT* exist in $ssrsReportServerFolder" -ForegroundColor Yellow
}
if ($rsreportserver_configFileExists) {
     
    [xml]$xml = Get-Content $rsreportserver_configFilePath
    
    $tagNameToFind = "Extension"
    $attributeNameToFind = "Name"
    $attributeValueToFind = "SCDWMultiMartDataProcessor"
    $nodeToFind = Select-Xml -XPath "//$tagNameToFind[@$attributeNameToFind='$attributeValueToFind']" -Xml $xml

    if ($nodeToFind -eq $null) {
        Write-Host "ERROR: "  -ForegroundColor Yellow -NoNewline
        Write-Host "The file '$rsreportserver_configFileName' in '$ssrsReportServerFolder' does *NOT* contain the correct <$tagNameToFind> node."
    }
    else {

        $Extension_NodeToVerify = [System.Xml.XmlNode]$nodeToFind.Node
        $rsreportserver_configIsCorrect =  ( $Extension_NodeToVerify.Type.Replace(" ","") -eq "Microsoft.EnterpriseManagement.Reporting.MultiMartConnection, Microsoft.EnterpriseManagement.Reporting.Code".Replace(" ","") ) 

        if (-not $rsreportserver_configIsCorrect) {
            Write-Host "ERROR: "  -ForegroundColor Yellow -NoNewline
            Write-Host "The <$tagNameToFind> node in '$rsreportserver_configFileName' in '$ssrsReportServerFolder' does exists but its content is *NOT* correct." 
        }
        else {
            Write-Host " Pass: The content of '$rsreportserver_configFileName' in '$ssrsReportServerFolder' is correct."             
        }
    }

}
Write-Host ""
#endregion

#region Conclusion
""
Write-Host "Conclusion:" -ForegroundColor Cyan
Write-Host "==========="
if ($scsmDllFileExists -and $rsreportserver_configIsCorrect -and $rssrvpolicy_configIsCorrect) {
    Write-Host "The selected SSRS instance is configured correctly."
}
else {
    Write-Host "The selected SSRS instance is " -NoNewline
    Write-Host "*NOT* configured correctly." -ForegroundColor Yellow
    Write-Host "Please follow the steps at  " -NoNewline
    Write-Host "https://learn.microsoft.com/system-center/scsm/config-remote-ssrs" -ForegroundColor Yellow
}
EndScriptExecution
#endregion

Nächste Schritte