Étapes manuelles pour configurer SQL Server Reporting Services

Important

Cette version de Service Manager a atteint la fin du support. Nous vous recommandons de mettre à niveau vers Service Manager 2022.

Pendant le déploiement du serveur d’administration de l’entrepôt de données Service Manager, vous pouvez spécifier le serveur sur lequel Microsoft SQL Server Reporting Services (SSRS) sera déployé. Par défaut, l'ordinateur hébergeant le serveur d'administration de l'entrepôt de données est sélectionné lors de l'installation. Si vous spécifiez un autre ordinateur pour héberger SSRS, vous êtes invité à suivre cette procédure pour préparer le serveur. La préparation de l'ordinateur distant devant héberger SSRS implique les étapes suivantes, abordées plus en détail dans cette section :

  • Copiez le fichier Microsoft.EnterpriseManagement.Reporting.Code.dll depuis le support d'installation de Service Manager sur l'ordinateur hébergeant SSRS.

  • Ajoutez un segment de code à un fichier de configuration rssrvpolicy situé sur l'ordinateur qui héberge SSRS.

  • Ajoutez une balise Extension au segment de données existant dans le fichier de configuration rsreportserver sur le même ordinateur.

Si vous avez utilisé la instance par défaut de SQL Server, utilisez Windows Explorer pour faire glisser Microsoft.EnterpriseManagement.Reporting.Code.dll (qui se trouve dans le dossier Prérequis sur votre support d’installation Service Manager) vers le dossier \Program Files\Microsoft SQL Server\MSRS13. MSSQLSERVER\Reporting Services\ReportServer\Bin sur l’ordinateur qui héberge SSRS. Si vous n’avez pas utilisé la instance par défaut de SQL Server, le chemin du dossier requis est \Program Files\Microsoft SQL Server\MSRS13.<>INSTANCE_NAME\Reporting Services\ReportServer\Bin. Dans la procédure suivante, le nom d'instance par défaut est utilisé.

Copier le fichier Microsoft.EnterpriseManagement.Reporting.Code.dll

Utiliser les étapes suivantes :

  1. Sur l'ordinateur qui doit héberger le SSRS distant, ouvrez une instance de l'Explorateur Windows.

  2. Pour SQL Server 2016, recherchez le dossier \Program Files\Microsoft SQL Server\MSRS13. MSSQLSERVER\Reporting Services\ReportServer\Bin.

  3. Démarrez une deuxième instance de l’Explorateur Windows, localisez le lecteur qui contient le support d’installation de Service Manager , puis ouvrez le dossier Prerequisites.

  4. Dans le dossier Prérequis, sélectionnez Microsoft.EnterpriseManagement.Reporting.Code.dll, puis faites-le glisser vers le dossier que vous avez localisé à l’étape 2.

Ajouter un segment de code au fichier rssrvpolicy.config

Utiliser les étapes suivantes :

  1. Sur l’ordinateur qui hébergera SSRS, recherchez le fichier rssrvpolicy.config dans \Program Files\Microsoft SQL Server\MSRS13. Dossier MSSQLSERVER\Reporting Services\ReportServer pour SQL Server 2016.

  2. À l'aide d'un éditeur XML de votre choix (tel que Bloc-notes), ouvrez le fichier rssrvpolicy.config.

  3. Faites défiler le contenu du fichier rssrvpolicy.config et repérez les segments de code <CodeGroup>. Le code suivant constitue un exemple de segment <CodeGroup>.

    <CodeGroup
       class="UnionCodeGroup"
       version="1"
       PermissionSetName="FullTrust">
       <IMembershipCondition
          class="UrlMembershipCondition"
          version="1"
          Url="$CodeGen$/*"
       />
    </CodeGroup>
    
  4. Ajoutez le segment <CodeGroup> suivant dans sa totalité à la même section que les autres segments <CodeGroup>.

    <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. Enregistrez les modifications et fermez l'éditeur XML.

Ajouter une balise d’extension au segment Données dans le fichier rsreportserver.conf

Utiliser les étapes suivantes :

  1. Sur l’ordinateur hébergeant SSRS, recherchez le fichier rsreportserver.config dans \Program Files\Microsoft SQL Server\MSRS13. Dossier MSSQLSERVER\Reporting Services\ReportServer pour SQL Server 2016.

  2. À l'aide d'un éditeur XML de votre choix (tel que Bloc-notes), ouvrez le fichier rsreportserver.config.

  3. Faites défiler le contenu du fichier rsreportserver.config et localisez le segment de code <Data>. Il n’y a qu’un <Data> seul segment de code dans ce fichier.

  4. Ajoutez la balise Extension suivante au segment code <Data> où toutes les autres balises Extension sont :

    <Extension Name="SCDWMultiMartDataProcessor" Type="Microsoft.EnterpriseManagement.Reporting.MultiMartConnection, Microsoft.EnterpriseManagement.Reporting.Code" />
    
  5. Enregistrez les modifications et fermez l'éditeur XML.

Vérifier l’installation de SSRS

Dans la version Service Manager Data Warehouse (DW) 2016 et ultérieures, le problème connu suivant est observé :

Dans le Service Manager Data Warehouse (DW), le problème connu suivant est observé :

Si SQL Server Reporting Services (SSRS) s’exécute localement sur le serveur d’administration Data Warehouse et que SSRS est 2017 ou version ultérieure, le programme d’installation Data Warehouse se termine correctement, mais peut ne pas configurer correctement la instance SSRS locale spécifiée.

Utilisez le script ci-dessous pour vérifier si l’installation de SSRS LOCAL est correctement configurée et peut être utilisée avec le Service Manager Data Warehouse.

Notes

Ce script PowerShell peut être exécuté après une installation Service Manager Data Warehouse. Le script n’apporte aucune modification à la configuration, mais le vérifie. Vous pouvez exécuter le script autant de fois que nécessaire.

#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

Étapes suivantes