Sql-Server-2012

Publish-AXReport 給出錯誤“名稱不能以 ’ ’ 字元開頭”

  • February 19, 2016

執行以下 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程式碼顯示在將組件從 temp 目錄複製到 SSRS bin 目錄後的某個時間點發生錯誤。

此執行緒中解決的問題: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 提供的幫助。

看起來您的報告名稱中有空格(十六進制 0x20)導致錯誤。請檢查您的腳本和/或報告名稱以刪除空格。

第 46 行,第 8 位

引用自:https://serverfault.com/questions/740406