Ręczne kroki konfigurowania usług SQL Server Reporting Services
Podczas wdrażania serwera zarządzania magazynu danych programu Service Manager można określić serwer, na którym zostaną wdrożone usługi Microsoft SQL Server Reporting Services (SSRS). Podczas instalacji komputer hostujący serwer zarządzania magazynu danych jest domyślnie wybierany. Jeśli określisz inny komputer do hostowania usług SSRS, zostanie wyświetlony monit o wykonanie tej procedury w celu przygotowania serwera. Przygotowanie komputera zdalnego do hostowania usług SSRS obejmuje następujące kroki, które zostały szczegółowo omówione w tej sekcji:
Skopiuj Microsoft.EnterpriseManagement.Reporting.Code.dll z nośnika instalacyjnego programu Service Manager na komputer hostujący usługę SSRS.
Dodaj segment kodu do pliku konfiguracji rssrvpolicy na komputerze hostujący usługę SSRS.
Dodaj tag Extension do istniejącego segmentu danych w pliku konfiguracji rsreportserver na tym samym komputerze.
Jeśli użyto domyślnego wystąpienia programu SQL Server, użyj Eksploratora Windows, aby przeciągnąć Microsoft.EnterpriseManagement.Reporting.Code.dll (który znajduje się w folderze Wymagania wstępne na nośniku instalacyjnym programu Service Manager) do folderu \Program Files\Microsoft SQL Server\MSRS13. MSSQLSERVER\Reporting Services\ReportServer\Bin na komputerze hostujący usługę SSRS. Jeśli nie użyto domyślnego wystąpienia programu SQL Server, ścieżka wymaganego folderu to \Program Files\Microsoft SQL Server\MSRS13.<>INSTANCE_NAME\Reporting Services\ReportServer\Bin. W poniższej procedurze jest używana domyślna nazwa wystąpienia.
Kopiowanie pliku Microsoft.EnterpriseManagement.Reporting.Code.dll
Wykonaj następujące kroki:
Na komputerze, który będzie hostować zdalne usługi SSRS, otwórz wystąpienie Eksploratora Windows.
W przypadku programu SQL Server 2016 znajdź folder \Program Files\Microsoft SQL Server\MSRS13. MSSQLSERVER\Reporting Services\ReportServer\Bin.
Uruchom drugie wystąpienie Eksploratora Windows, znajdź dysk zawierający nośnik instalacyjny programu Service Manager, a następnie otwórz folder Wymagania wstępne.
W folderze Wymagania wstępne wybierz pozycję Microsoft.EnterpriseManagement.Reporting.Code.dll i przeciągnij go do folderu znajdującego się w kroku 2.
Dodawanie segmentu kodu do pliku rssrvpolicy.config
Wykonaj następujące kroki:
Na komputerze, który będzie hostować usługę SSRS, znajdź plik rssrvpolicy.config w folderze \Program Files\Microsoft SQL Server\MSRS13. FOLDER MSSQLSERVER\Reporting Services\ReportServer dla programu SQL Server 2016.
Używając wybranego edytora XML (takiego jak Notatnik), otwórz plik rssrvpolicy.config.
Przewiń plik rssrvpolicy.config i znajdź
<CodeGroup>
segmenty kodu. Poniższy kod przedstawia przykład segmentu<CodeGroup>
.<CodeGroup class="UnionCodeGroup" version="1" PermissionSetName="FullTrust"> <IMembershipCondition class="UrlMembershipCondition" version="1" Url="$CodeGen$/*" /> </CodeGroup>
Dodaj następujący
<CodeGroup>
segment w całości w tej samej sekcji co inne<CodeGroup>
segmenty.<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>
Zapisz zmiany i zamknij edytor XML.
Dodawanie tagu Rozszerzenia do segmentu danych w pliku rsreportserver.conf
Wykonaj następujące kroki:
Na komputerze hostujący usługę SSRS znajdź plik rsreportserver.config w folderze \Program Files\Microsoft SQL Server\MSRS13. FOLDER MSSQLSERVER\Reporting Services\ReportServer dla programu SQL Server 2016.
Używając wybranego edytora XML (takiego jak Notatnik), otwórz plik rsreportserver.config.
Przewiń plik rsreportserver.config i znajdź
<Data>
segment kodu. W tym pliku znajduje się tylko jeden<Data>
segment kodu.Dodaj następujący
Extension
tag do segmentu<Data>
kodu, w którym znajdują się wszystkie inneExtension
tagi:<Extension Name="SCDWMultiMartDataProcessor" Type="Microsoft.EnterpriseManagement.Reporting.MultiMartConnection, Microsoft.EnterpriseManagement.Reporting.Code" />
Zapisz zmiany i zamknij edytor XML.
Weryfikowanie instalacji usługi SSRS
W magazynie danych programu Service Manager (DW) w wersji 2016 i nowszych zaobserwowano następujący znany problem:
W magazynie danych programu Service Manager (DW) zaobserwowano następujący znany problem:
Jeśli usługi SQL Server Reporting Services (SSRS) są uruchomione lokalnie na serwerze zarządzania magazynu danych, a usługi SSRS to 2017 lub nowsza wersja, instalacja magazynu danych zakończy się pomyślnie, ale może nie poprawnie skonfigurować określonego lokalnego wystąpienia usług SSRS.
Użyj poniższego skryptu, aby sprawdzić, czy instalacja lokalnego usług SSRS jest poprawnie skonfigurowana i może być używana z magazynem danych programu Service Manager.
Uwaga
Ten skrypt programu PowerShell można wykonać po instalacji magazynu danych programu Service Manager. Skrypt nie wprowadzi żadnych zmian w konfiguracji, ale go zweryfikuje. Skrypt można uruchomić tyle razy, ile jest to wymagane.
#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
Następne kroki
- Aby użyć zawsze włączonych grup dostępności z programem Service Manager do obsługi środowiska trybu failover, zapoznaj się z artykułem Używanie zawsze włączonych grup dostępności programu SQL Server do obsługi trybu failover.