Publish-AXReport 给出错误“名称不能以‘ ’字符开头”

Publish-AXReport 给出错误“名称不能以‘ ’字符开头”

运行以下 PowerShell 脚本(即为 AX 部署所有 SSRS 报告)出现错误:

$axdllname = "Microsoft.Dynamics.AX.Framework.Management.dll"
$gacfolder = join-path $env:windir "assembly\GAC_MSIL"
$axdll = Get-ChildItem $gacfolder -Recurse -Name $axdllname
$axdll = join-path $gacfolder $axdll
import-module $axdll
Publish-AXReport -ReportName "*" -RestartReportServer

错误信息是:

Publish-AXReport : Name cannot begin with the ' ' character, hexadecimal value 0x20. Line 46, position 8.
At line:1 char:17
+ Publish-AXReport <<<<  -ReportName "*" -RestartReportServer
+ CategoryInfo          : ParserError: (:) [Publish-AXReport], XmlException
+ FullyQualifiedErrorId : Name cannot begin with the ' ' character, hexadecimal value 0x20. Line 46, position 8.,M
icrosoft.Dynamics.AX.Framework.Management.Reports.PublishReportCommand

遗憾的是,我找不到源代码的副本Publish-AXReport,因此无法深入探究此异常的来源。

问题

是否有人知道该问题的可能原因,或者我可以采取哪些步骤来找出原因?

更新

我没有运行所有报告,而是*尝试获取所有报告的列表(单独运行良好/不显示名称以空格开头的报告),然后将其传输到 publish-axreport cmdlet;这意味着现在我可以看到哪些报告产生了该错误。

Get-AxReport -ReportName * | Publish-AXReport

现在可以确定的是,有几份报告(尽管只有一小部分可用报告)在发布时会抛出此错误。其中一份报告是AssetAcquisitionDocumentPL

错误似乎仅发生在具有相关程序集的报告中/对于具有相关程序集的报告总是出错;对于没有相关程序集的报告从不出错。

如果运行,也会出现同样的问题Get-AXReportServerConfiguration | %{Publish-AXAssembly -id $_.ConfigurationId -vsprojectname 'assetAcquisitionDocumentPL.BusinessLogic'}

使用开关运行上述-verbose程序表明,在将假设从临时目录复制到 SSRS bin 目录之后的某个时间点会发生错误。

答案1

报告名称中似乎有空格(十六进制 0x20),这导致了错误。请检查脚本和/或报告名称以删除空格。

行 46,位置 8

答案2

本主题中解决的问题:https://community.dynamics.com/ax/f/33/t/190841

根本原因

文件D:\Program Files\Microsoft SQL Server\MSRS11.AX2012_ENVIRON1\Reporting Services\ReportServer\rssrvpolicy.config在左括号和其中一个元素名称之间包含一个空格;即< CodeGroup ...>而不是<CodeGroup ...>

纠正这个拼写错误就解决了这个问题。

(我不知道这个空格是怎么进入文件的/除非我们再次看到这个问题,否则我怀疑我会找到答案)。

发现原因的步骤

如果有人遇到类似的问题但原因不同,以下是我们发现该问题的详细说明:

  • 下载并提取进程监视器:https://technet.microsoft.com/en-us/sysinternals/processmonitor.aspx
  • 关闭所有不需要的进程/服务(以减少噪音)
  • Microsoft Dynamics AX 2012 Management Shell以管理员身份打开
  • 键入生成错误的命令(Publish-AXAssembly -id 'SSRSNLBAOS2' -vsprojectname 'assetAcquisitionDocumentPL.BusinessLogic' -verbose);选择在出现错误之前执行的工作最少的命令(以减少噪音)。
  • 打开进程监视器
  • 运行命令
  • 出现错误时,点击进程监视器中的“保存”将会话保存到 PML 文件。
  • 关闭进程监视器和 powershell
  • 打开 PML 文件并按进程名称进行过滤powershell.exe
  • 寻找有趣的事件。我怀疑是 XML 文件,因此查看了文件末尾附近的文件访问事件。
  • 由于我之前见过 XML 文件的类似问题,因此将重点放在 XML(格式)文件上/尝试解析它们以查看哪个出现错误([xml][string](get-content 'd:\some\path\to\a\file.config'))。
  • 当文件无法解析或出现有关无效空格字符的错误时,那就是罪魁祸首文件。
  • 然后,我在文本编辑器中打开该文件,并借助语法高亮立即发现了错误。
  • 更正文件、保存,然后通过再次解析确认这是文件中唯一的错误,从而使文件处于良好状态。
  • 然后,我重新运行该Publish-AXAssembly ...命令(不运行进程监视器)以查看问题是否已解决 - 确实已解决。

感谢 Dynamics 社区的 @BrandonWiese 的帮助。

相关内容