通过 Powershell 破坏格式字符串的 SSAS 部署
SSAS Deployment Via Powershell Corrupting Format String
我在通过 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 Server0\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 服务器设置为英语(美国)。
这个问题的答案是指定编码。来自 Jeroen 在评论中对我的问题的回应:
看起来 PowerShell 自动检测 XMLA 的编码错误地为 Windows-1252,而实际上它是 UTF-8(没有 BOM)。尝试 $xmla = Get-Content $modelpath -Encoding UTF8
。也可能是 XMLA 本身实际上不正确——确保在能够报告编码的编辑器(如 Notepad++)中检查它,而不仅仅是让 PowerShell 本身回显它。 – Jeroen Mostert 15 分钟前
我在通过 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 Server0\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 服务器设置为英语(美国)。
这个问题的答案是指定编码。来自 Jeroen 在评论中对我的问题的回应:
看起来 PowerShell 自动检测 XMLA 的编码错误地为 Windows-1252,而实际上它是 UTF-8(没有 BOM)。尝试 $xmla = Get-Content $modelpath -Encoding UTF8
。也可能是 XMLA 本身实际上不正确——确保在能够报告编码的编辑器(如 Notepad++)中检查它,而不仅仅是让 PowerShell 本身回显它。 – Jeroen Mostert 15 分钟前