Operations Manager 报表无法部署

本文可帮助你修复以下问题:部署 Operations Manager 报告失败并出现事件 ID 31567。

适用于: System Center Operations Manager
原始 KB 数: 4519161

现象

将 System Center 2019 Operations Manager 与最新版本的 SQL Server Reporting Services (SSRS) 2017 一起安装时,不会部署 Operations Manager 报表。

在操作控制台中打开 报表 视图并选择任何文件夹时,报表列表为空。 此外,类似于以下内容的错误消息会记录在 Operations Manager 事件日志中:

日志名称: Operations Manager
源: 运行状况服务模块
日期: <日期><时间>
事件 ID:31567
任务类别: 数据仓库
级别:错误
关键字:经典
用户:无
计算机: <FQDN>
说明:
未能将报告组件部署到 SQL Server Reporting Services 服务器。 将重试该操作。 异常“DeploymentException”:无法为版本依赖 ID 为“ID>”<的管理包部署报表。 System.Web.Services.Protocols.SoapException: 使用 .. 上传或保存文件。不允许使用 CustomConfiguration 扩展。 如有任何问题,请与管理员联系。 --->
Microsoft.ReportingServices.Diagnostics.Utilities.ResourceFileFormatNotAllowedException:上传或保存文件。不允许使用 CustomConfiguration 扩展。 如有任何问题,请与管理员联系。
at Microsoft.ReportingServices.Library.ReportingService2005Impl.CreateResource(String Resource, String Parent, Boolean Overwrite, Byte[] Contents, String MimeType, Property[] Properties, Guid batchId)
at Microsoft.ReportingServices.WebServer.ReportingService2005.CreateResource(String Resource, String Parent, Boolean Overwrite, Byte[] Contents, String MimeType, Property[] properties)
一个或多个工作流受此影响。
工作流名称:Microsoft.SystemCenter.DataWarehouse.Deployment.Report
实例名称:数据仓库同步服务
实例 ID:{GUID}
管理组: <管理组名称>

注意

升级到 SSRS 2017 时,System Center Operations Manager 版本 1807 中也会出现此问题,然后删除并重新安装 Operations Manager 报告。

原因

SSRS 2017 版本 14.0.600.1274 及更高版本包括新的高级设置 AllowedResourceExtensionsForUpload。 此设置限制可上传到报表服务器的资源文件的扩展集。 出现此问题的原因是 Operations Manager 报表使用了 AllowedResourceExtensionsForUpload 中的默认集中不包含的扩展。

解决方法 1

添加到 *.* 授权扩展列表。 为此,请按照下列步骤进行操作:

  1. 启动 SQL Server Management Studio,然后连接到 Operations Manager 使用的报表服务器实例。
  2. 右键单击报表服务器实例名称,选择“属性,然后选择“高级”。
  3. 找到 AllowedResourceExtensionsForUpload 设置,添加到*.*扩展列表,然后选择“确定”。
  4. 重启 SSRS。

解决方法 2

使用 PowerShell 脚本添加扩展。 为此,请运行以下 PowerShell 脚本:

注意

运行此脚本后,需要重启 SSRS。

$ServiceAddress = 'http://localhost'

$ExtensionAdd = @(
	'*'
	'CustomConfiguration'
	'Report'
	'AvailabilityMonitor'
	'TopNApplications'
	'Settings'
	'License'
	'ServiceLevelTrackingSummary'
	'CustomPerformance'
	'MostCommonEvents'
	'PerformanceTop'
	'Detail'
	'DatabaseSettings'
	'ServiceLevelObjectiveDetail'
	'PerformanceDetail'
	'ConfigurationChange'
	'TopNErrorGroupsGrowth'
	'AvailabilityTime'
	'rpdl'
	'mp'
	'TopNErrorGroups'
	'Downtime'
	'TopNApplicationsGrowth'
	'DisplayStrings'
	'Space'
	'Override'
	'Performance'
	'AlertDetail'
	'ManagementPackODR'
	'AlertsPerDay'
	'EventTemplate'
	'ManagementGroup'
	'Alert'
	'EventAnalysis'
	'MostCommonAlerts'
	'Availability'
	'AlertLoggingLatency'
	'PerformanceTopInstance'
	'rdl'
	'PerformanceBySystem'
	'InstallUpdateScript'
	'PerformanceByUtilization'
	'DropScript'
)

Write-Output 'Setting Allowed Resource Extensions for Upload'
$error.clear()
try
{
	$Uri = [System.Uri]"$ServiceAddress/ReportServer/ReportService2010.asmx"
	$Proxy = New-WebServiceProxy -Uri $Uri -UseDefaultCredential
	$Type = $Proxy.GetType().Namespace + '.Property'
	
	$Property = New-Object -TypeName $Type
	$Property.Name = 'AllowedResourceExtensionsForUpload'

	$ValueAdd = $ExtensionAdd | ForEach-Object -Process {
		"*.$psItem"
	}	

	$Current = $Proxy.GetSystemProperties($Property)
	if ($Current)
    {
	$ValueCurrent = $Current.Value -split ','
	$ValueSet = $ValueCurrent + $ValueAdd | Sort-Object -Unique
	}
	else
    {
        $ValueSet = $ValueAdd | Sort-Object -Unique
    }

	
	$Property.Value = $ValueSet -join ','
	
	$Proxy.SetSystemProperties($Property)
    Write-Output '  Successfully set property to: *.*'
}
catch
{
	Write-Warning "Failure occurred: $error"
}
Write-Output 'Script completed!'

注意

可能需要使用有效的 Web 地址将变量更新 $ServiceAddress 到报表服务。 脚本中的扩展列表可能并不详尽。 根据需要包括自己的扩展。