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
程式碼顯示在將組件從 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 位