通过Powershell损坏格式字符串进行SSAS部署

问题描述 投票:1回答:1

通过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文件(不在代码段中)具有正确的格式字符串\\£ #,##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:在解决方案中设置格式字符串时,我曾尝试过使用它,但是找不到解决方案。 请注意,我不能简单地使用“货币” b / c将服务器设置为英语(美国)。

powershell ssas octopus-deploy xmla adomd.net
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.