Handmatige stappen voor het configureren van SQL Server Reporting Services
Belangrijk
Deze versie van Service Manager heeft het einde van de ondersteuning bereikt. U wordt aangeraden een upgrade uit te voeren naar Service Manager 2022.
Tijdens de implementatie van de Service Manager datawarehouse-beheerserver kunt u de server opgeven waarop Microsoft SQL Server Reporting Services (SSRS) wordt geïmplementeerd. Tijdens de installatie wordt standaard de computer geselecteerd waarop de datawarehouse-beheerserver wordt gehost. Als u een andere computer opgeeft voor het hosten van SSRS, wordt u gevraagd deze procedure te volgen om de server voor te bereiden. Voor het voorbereiden van de externe computer voor het hosten van SSRS zijn de volgende stappen nodig, die in deze sectie in detail worden besproken:
Kopieer Microsoft.EnterpriseManagement.Reporting.Code.dll van het installatiemedium van Service Manager naar de computer waarop SSRS wordt gehost.
Voeg een codesegment to aan het rssrvpolicy-configuratiebestand op de computer waar SSRS wordt gehost.
Voeg de tag Extension toe aan het bestaande segment Data in het rsreportserver-configuratiebestand op dezelfde computer.
Als u het standaardexemplaar van SQL Server hebt gebruikt, gebruikt u Windows Verkenner om Microsoft.EnterpriseManagement.Reporting.Code.dll (die zich in de map Vereisten op uw Service Manager installatiemedia bevindt) naar de map \Program Files\Microsoft SQL Server\MSRS13 te slepen. MSSQLSERVER\Reporting Services\ReportServer\Bin op de computer waarop SSRS wordt gehost. Als u het standaardexemplaar van SQL Server niet hebt gebruikt, is het pad van de vereiste map \Program Files\Microsoft SQL Server\MSRS13.<>INSTANCE_NAME\Reporting Services\ReportServer\Bin. In de volgende procedure wordt de naam van de standaardinstantie gebruikt.
Het Microsoft.EnterpriseManagement.Reporting.Code.dll-bestand kopiëren
Voer de volgende stappen uit:
Open een exemplaar van Windows Verkenner op de computer waarop de externe SSRS wordt gehost.
Zoek voor SQL Server 2016 de map \Program Files\Microsoft SQL Server\MSRS13. MSSQLSERVER\Reporting Services\ReportServer\Bin.
Start een tweede exemplaar van Windows Verkenner, ga naar het station waar het installatiemedium van Service Manager zich bevindt en open de map Prerequisites.
Selecteer in de map Vereisten Microsoft.EnterpriseManagement.Reporting.Code.dllen sleep deze naar de map die u in stap 2 hebt gevonden.
Een codesegment toevoegen aan het rssrvpolicy.config-bestand
Voer de volgende stappen uit:
Zoek op de computer waarop SSRS wordt gehost het bestand rssrvpolicy.config in \Program Files\Microsoft SQL Server\MSRS13. DE map MSSQLSERVER\Reporting Services\ReportServer voor SQL Server 2016.
Gebruik een XML-editor naar keuze (zoals Kladblok) om het bestand rssrvpolicy.config te openen.
Schuif door het bestand en zoek de
<CodeGroup>
-codesegmenten op. De volgende code toont een voorbeeld van een<CodeGroup>
-segment.<CodeGroup class="UnionCodeGroup" version="1" PermissionSetName="FullTrust"> <IMembershipCondition class="UrlMembershipCondition" version="1" Url="$CodeGen$/*" /> </CodeGroup>
Voeg het volgende
<CodeGroup>
-segment in zijn geheel toe in dezelfde sectie als de andere<CodeGroup>
-segmenten.<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>
Sla de wijzigingen op en sluit de XML-editor.
Voeg een extensietag toe aan het segment Gegevens in het bestand rsreportserver.conf
Voer de volgende stappen uit:
Zoek op de computer die SSRS host het bestand rsreportserver.config in \Program Files\Microsoft SQL Server\MSRS13. DE map MSSQLSERVER\Reporting Services\ReportServer voor SQL Server 2016.
Gebruik een XML-editor naar keuze (zoals Kladblok) om het bestand rsreportserver.config te openen.
Schuif door het bestand rsreportserver.config en zoek het
<Data>
-codesegment op. Dit bestand bevat slechts één<Data>
codesegment.Voeg de volgende
Extension
-tag toe aan het<Data>
-codesegment, waar alle andereExtension
-tags zich bevinden:<Extension Name="SCDWMultiMartDataProcessor" Type="Microsoft.EnterpriseManagement.Reporting.MultiMartConnection, Microsoft.EnterpriseManagement.Reporting.Code" />
Sla de wijzigingen op en sluit de XML-editor.
SSRS-installatie controleren
In de Service Manager Data Warehouse (DW) versie 2016 en hoger wordt het volgende bekende probleem waargenomen:
In de Service Manager Data Warehouse (DW) wordt het volgende bekende probleem waargenomen:
Als SQL Server Reporting Services (SSRS) lokaal wordt uitgevoerd op de Data Warehouse Management Server en SSRS 2017 of hoger is, wordt de Data Warehouse Setup voltooid, maar is het mogelijk dat het opgegeven lokale SSRS-exemplaar niet juist wordt geconfigureerd.
Gebruik het onderstaande script om te controleren of de LOCAL SSRS-installatie correct is geconfigureerd en kan worden gebruikt met de Service Manager Data Warehouse.
Notitie
Dit PowerShell-script kan worden uitgevoerd na een Service Manager Data Warehouse installatie. Het script brengt geen wijzigingen aan in de configuratie, maar controleert deze. U kunt het script zo vaak uitvoeren als nodig is.
#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
Volgende stappen
- Als u AlwaysOn-beschikbaarheidsgroepen met Service Manager wilt gebruiken ter ondersteuning van een failoveromgeving, raadpleegt u SQL Server AlwaysOn-beschikbaarheidsgroepen gebruiken om failover te ondersteunen.