我需要创建一个cmd文件来备份Analysis Service数据库。因为我的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>
答案 0 :(得分:0)
%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