Aracılığıyla paylaş


SQL Server Reporting Services yapılandırmaya yönelik el ile uygulanan adımlar

Önemli

bu Service Manager sürümü desteğin sonuna ulaştı. Service Manager 2022'ye yükseltmenizi öneririz.

Service Manager veri ambarı yönetim sunucusunun dağıtımı sırasında, Microsoft SQL Server Reporting Services (SSRS) dağıtılacağı sunucuyu belirtebilirsiniz. Kurulum sırasında, veri ambarı yönetimi sunucusunu barındıran bilgisayar varsayılan olarak seçilir. SSRS'yi barındırmak için farklı bir bilgisayar belirtirseniz, sunucuyu hazırlamak için bu yordamı izlemeniz istenir. Uzak bilgisayarı SSRS'yi barındırması için hazırlamak bu bölümde ayrıntılı olarak ele alan şu adımları içerir:

  • Service Manager yükleme medyasındaki Microsoft.EnterpriseManagement.Reporting.Code.dll dosyasını SSRS'yi barındıran bilgisayara kopyalayın.

  • SSRS'yi barındıran bilgisayarda rssrvpolicy yapılandırma dosyasına bir kod kesimi ekleyin.

  • Aynı bilgisayardaki rsreportserver yapılandırma dosyasındaki mevcut Veri segmentine bir Uzantı etiketi ekleyin.

SQL Server varsayılan örneğini kullandıysanız Windows Gezgini'ni kullanarak Microsoft.EnterpriseManagement.Reporting.Code.dll (Service Manager yükleme medyanızdaki Önkoşullar klasöründe bulunur) \Program Files\Microsoft SQL Server\MSRS13 klasörüne sürükleyin. SSRS'yi barındıran bilgisayarda MSSQLSERVER\Reporting Services\ReportServer\Bin. varsayılan SQL Server örneğini kullanmadıysanız, gerekli klasörün yolu \Program Files\Microsoft SQL Server\MSRS13'tür.<>INSTANCE_NAME\Reporting Services\ReportServer\Bin. Aşağıdaki yordamda varsayılan örnek adı kullanılır.

Microsoft.EnterpriseManagement.Reporting.Code.dll dosyasını kopyalama

Aşağıdaki adımları kullanın:

  1. Uzak SSRS'yi barındıracak olan bilgisayarda bir Windows Gezgini örneği açın.

  2. SQL Server 2016 için \Program Files\Microsoft SQL Server\MSRS13 klasörünü bulun. MSSQLSERVER\Reporting Services\ReportServer\Bin.

  3. İkinci bir Windows Gezgini örneği başlatın, Service Manager yükleme medyasını içeren sürücüyü bulun ve ardından Prerequisites klasörünü açın.

  4. Önkoşullar klasöründe Microsoft.EnterpriseManagement.Reporting.Code.dllöğesini seçin ve 2. adımlardan herhangi birisinde bulunan klasöre sürükleyin.

rssrvpolicy.config dosyasına kod kesimi ekleme

Aşağıdaki adımları kullanın:

  1. SSRS'yi barındıracak bilgisayarda, \Program Files\Microsoft SQL Server\MSRS13 içinde dosya rssrvpolicy.config bulun. SQL Server 2016 için MSSQLSERVER\Reporting Services\ReportServer klasörü.

  2. Kendi seçtiğiniz bir XML editörünü kullanarak (Not Defteri gibi), rssrvpolicy.config dosyasını açın.

  3. rssrvpolicy.config dosyasında ilerleyin ve <CodeGroup> kod kesimlerini bulun. Aşağıdaki kodda bir <CodeGroup> kesimi örneği gösterilmektedir.

    <CodeGroup
       class="UnionCodeGroup"
       version="1"
       PermissionSetName="FullTrust">
       <IMembershipCondition
          class="UrlMembershipCondition"
          version="1"
          Url="$CodeGen$/*"
       />
    </CodeGroup>
    
  4. Takip eden <CodeGroup> kesimini bir bütün halinde diğer<CodeGroup> kesimleri ile aynı bölüme ekleyin.

    <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. Değişiklikleri kaydedin ve XML editörünü kapatın.

rsreportserver.conf dosyasındaki Veri kesimine uzantı etiketi ekleme

Aşağıdaki adımları kullanın:

  1. SSRS'yi barındıran bilgisayarda, \Program Files\Microsoft SQL Server\MSRS13 içinde dosya rsreportserver.config bulun. SQL Server 2016 için MSSQLSERVER\Reporting Services\ReportServer klasörü.

  2. Tercihinize göre bir XML düzenleyicisini kullanarak (Not Defteri gibi) rsreportserver.config dosyasını açın.

  3. Rsreportserver.config dosyası boyunca kaydırma yapın ve <Data> kod kesimini bulun. Bu dosyada yalnızca bir <Data> kod kesimi var.

  4. Aşağıdaki Extension etiketini diğer tüm <Data> etiketlerinin bulunduğu Extension kod kesimine ekleyin:

    <Extension Name="SCDWMultiMartDataProcessor" Type="Microsoft.EnterpriseManagement.Reporting.MultiMartConnection, Microsoft.EnterpriseManagement.Reporting.Code" />
    
  5. Değişiklikleri kaydedin ve XML editörünü kapatın.

SSRS yüklemesini doğrulama

Service Manager Data Warehouse (DW) sürüm 2016 ve sonraki sürümlerde aşağıdaki bilinen sorun gözlemlenmiştir:

Service Manager Data Warehouse (DW) içinde aşağıdaki bilinen sorun gözlemlenir:

SQL Server Reporting Services (SSRS) Data Warehouse Yönetim Sunucusu'nda yerel olarak çalışıyorsa ve SSRS 2017 veya üzeriyse, Data Warehouse Kurulumu başarıyla tamamlanır, ancak belirtilen yerel SSRS örneğini düzgün yapılandırmayabilir.

LOCAL SSRS yüklemesinin doğru yapılandırılıp yapılandırılmadığını ve Service Manager Data Warehouse ile birlikte kullanılıp kullanılamadığını doğrulamak için aşağıdaki betiği kullanın.

Not

Bu PowerShell betiği bir Service Manager Data Warehouse yüklemeden sonra yürütülebilir. Betik, yapılandırmada herhangi bir değişiklik yapmaz ancak bunu doğrular. Betiği gerektiği kadar çalıştırabilirsiniz.

#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

Sonraki adımlar