【问题标题】:Invoke-ASCMD - passing values to XMLA file not workingInvoke-ASCMD - 将值传递给 XMLA 文件不起作用
【发布时间】:2016-06-27 17:20:15
【问题描述】:

我需要创建一个 cmd 文件来备份分析服务数据库。因为我的 SQL Server 2014 没有 ascmd.exe,我想我会使用 PowerShell Invoke-ASCMD,但我在将参数传递给 XMLA 文件时遇到问题。 XMLA 文件中无法识别 Dbname 和 Backupfile 参数,但是当我在它们的位置硬编码值时,脚本运行成功。

命令文件:

set DBNAME=ANALYSIS_DB
set SCRIPTPATH=E:\cube_backup.xmla
set SRC=ServerName\ServerInstance
set BACKUPPATH=G:\Cube_BackupFolder\

for /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c%%a%%b)
for /F "tokens=1-3 delims=:. " %%A in ('time/T') do (set var=%%A%%B%%C%)

set BACKUPFILE="%BACKUPPATH%\%DBNAME%_cube_%mydate%_%var%.abf"

powershell.exe -command Invoke-ASCmd -InputFile %SCRIPTPATH% -server %SRC%

SCRIPTPATH(XMLA 代码):

<Backup xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
    <Object>
        <DatabaseID>$dbname</DatabaseID>
    </Object>
    <File>$backupfile</File>
    <AllowOverwrite>false</AllowOverwrite>
</Backup>

【问题讨论】:

  • 为什么不完全在 PowerShell 中执行此操作,而不是从批处理文件中调用 PowerShell?
  • 另外一点,如果你在 2014 年,为什么不直接使用 Backup-ASDatabase cmdlet

标签: powershell sql-server-2014


【解决方案1】:

%DBNAME%$dbname 是完全不同的变量。它们不会因为名称相同而神奇地具有相同的值。此外,PowerShell 不会自动扩展 XML 文件中的变量名(请参阅question you posted on the Technet forums 的答案)。

您需要使用您想要使用的值动态创建 XML 文件,以使其正常工作。比如这样:

$dbname     = 'ANALYSIS_DB'
$xmlfile    = 'E:\cube_backup.xmla'
$server     = 'ServerName\ServerInstance'
$backupfile = "G:\Cube_BackupFolder\${dbname}_cube_$(Get-Date -Format 'yyyyMMdd_HHmmss').abf"

$xml = @"
<Backup xmlns='http://schemas.microsoft.com/analysisservices/2003/engine'>
    <Object>
        <DatabaseID>$dbname</DatabaseID>
    </Object>
    <File>$backupfile</File>
    <AllowOverwrite>false</AllowOverwrite>
</Backup>
"@

Invoke-ASCmd -InputFile $xmlfile -Server $server

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 2022-07-28
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 2013-07-23
    • 1970-01-01
    相关资源
    最近更新 更多