2016-06-26 3 views
0

Мне нужно создать cmd-файл для резервного копирования базы данных Analysis Services. Поскольку у моего SQL Server 2014 нет ascmd.exe, я думал, что буду использовать PowerShell Invoke-ASCMD, но у меня возникают проблемы с передачей параметров в файл XMLA. Параметры Dbname и Backupfile не распознаются в файле XMLA, но когда я фиксирую значения на месте, сценарий выполняется успешно.Invoke-ASCMD - передача значений в файл XMLA не работает

Командный файл:

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> 
+1

Почему вы не делаете это полностью в PowerShell вместо вызова PowerShell из пакетного файла? –

+0

Другое дело, если вы в 2014 году, почему бы вам просто не использовать командлет '' Backup-ASDatabase' (https://msdn.microsoft.com/en-us/library/hh479574.aspx)? –

ответ

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 
Смежные вопросы