【问题标题】:SSAS Deployment Via Powershell Corrupting Format String通过 Powershell 破坏格式字符串进行 SSAS 部署
【发布时间】:2018-07-26 19:12:43
【问题描述】:

我在通过 PowerShell 部署多维数据集时遇到了一个我不知道如何解决的问题。在我的解决方案中,我对 FormatString 采取了一些措施:\£ #,##0;-\£ #,##0。如果我通过 Visual Studio 正常部署它们,我在部署后从 SSAS 服务器中提取的 XMLA 将具有 <FormatString>\£ #,##0;-\£ #,##0</FormatString>,这一切都很好并且是预期的。但是,如果我通过 PowerShell 部署,则从服务器生成的 XMLA 是 <FormatString>\£ #,##0;-\£ #,##0</FormatString>

我意识到问题在于 £ 被解析,但我不知道如何解决它。

这里的一点背景是我正在使用 Octopus Deploy,并且我在下面出现问题的地方提取了 PowerShell:

$modelpath = "C:\...\Project_Name.xmla"
$Path_To_Microsoft_AnalysisServices_Deployment = "C:\Program Files (x86)\Microsoft SQL Server\140\Tools\Binn\ManagementStudio\Microsoft.AnalysisServices.Deployment.exe"
$SSAS_Project_Name = "Project_Name"

$Path_To_SSAS_Bin_Folder      = "F:\Octopus Deploy\CustomInstallation\Project_Name\Content"
$FilePath_asdatabase          = "$Path_To_SSAS_Bin_Folder\$SSAS_Project_Name.asdatabase"
$FilePath_deploymenttargets   = "$Path_To_SSAS_Bin_Folder\$SSAS_Project_Name.deploymenttargets"
$FilePath_configsettings      = "$Path_To_SSAS_Bin_Folder\$SSAS_Project_Name.configsettings"
$FilePath_deploymentoptions   = "$Path_To_SSAS_Bin_Folder\$SSAS_Project_Name.deploymentoptions"

Start-Process -FilePath $Path_To_Microsoft_AnalysisServices_Deployment -ArgumentList "`"$FilePath_asdatabase`"","/s:`"$FilePath_DeploymentLog`"","/o:`"$SSAS_Project_Name.xmla`"","/d" -Wait -NoNewWindow 

# Load the Adomd Client
[System.Reflection.Assembly]::LoadWithPartialName(“Microsoft.AnalysisServices.AdomdClient”) | Out-Null;
# Connect to the server
Write-Host "Executing Deployment Script"
$serverName = “Data Source=.”
$conn = New-Object Microsoft.AnalysisServices.AdomdClient.AdomdConnection $serverName
$conn.Open()
# Read XMLA
$xmla = Get-Content $modelpath
# Execute XMLA
$cmd = New-Object Microsoft.AnalysisServices.AdomdClient.AdomdCommand $xmla, $conn
return $cmd.ExecuteNonQuery(); 

我做了一些调查,发现如下:

  • PowerShell 生成的 xmla 文件(不在 sn-p 中)具有正确的格式字符串 \£ #,##0;-\£ #,##0
  • .asdatabase 文件也有正确的格式字符串

我怀疑有什么事情发生在:

Start-Process -FilePath $Path_To_Microsoft_AnalysisServices_Deployment -ArgumentList “`”$FilePath_asdatabase`””,”/s:`”$FilePath_DeploymentLog`””,”/o:`”$SSAS_Project_Name.xmla`””,”/d” -Wait -NoNewWindow

或在以下位置:

# Execute XMLA
$cmd = New-Object Microsoft.AnalysisServices.AdomdClient.AdomdCommand $xmla, $conn
return $cmd.ExecuteNonQuery();

任何帮助将不胜感激。

PS:我在解决方案中设置格式字符串时尝试过使用它,但无法找到解决方案。请注意,我不能简单地使用“货币”,因为服务器设置为英语(美国)。

【问题讨论】:

  • 看起来 PowerShell 将 XMLA 的编码错误地自动检测为 Windows-1252,而实际上它是 UTF-8(没有 BOM)。试试$xmla = Get-Content $modelpath -Encoding UTF8。也可能是 XMLA 本身实际上是不正确的 - 确保在能够报告编码的编辑器(如 Notepad++)中检查它,而不仅仅是让它由 PowerShell 本身回显。
  • @JeroenMostert 谢谢,解决了。生成的xmla是正确的,所以确实是编码

标签: powershell ssas octopus-deploy xmla adomd.net


【解决方案1】:

这个问题的答案是指定编码。来自 Jeroen 在评论中回答我的问题:

看起来 PowerShell 将 XMLA 的编码错误地自动检测为 Windows-1252,而实际上它是 UTF-8(没有 BOM)。试试$xmla = Get-Content $modelpath -Encoding UTF8。也可能是 XMLA 本身实际上是不正确的 - 确保在能够报告编码的编辑器中检查它,例如 Notepad++,而不仅仅是让它由 PowerShell 本身回显。 – Jeroen Mostert 15 分钟前

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 2019-07-20
    • 2022-12-18
    • 1970-01-01
    • 2010-11-18
    • 2015-02-18
    • 2015-05-18
    相关资源
    最近更新 更多