2016-06-26 9 views
0

Analysis Serviceデータベースをバックアップするためにcmdファイルを作成する必要があります。私の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 
関連する問題