2014-11-16 3 views
0

Я пытаюсь восстановить базу данных на двух серверах sql одновременно. Вот почему мне нужно, чтобы restore-sqldatabase работал как работа в фоновом режиме, таким образом, я смогу одновременно запустить второе задание восстановления.Передача аргументов новому объекту внутри стартового задания

receive-job показывает 4 ошибки cannot index into a null array, передавая переменные из списка аргументов в блок сценария, является прекрасным, но передача переменных в блок сценария в команду new-object, «которая берет свой собственный список аргументов», кажется, является проблемой ,

Подобные вопросы не очень идентичны тем, что я хочу достичь. Любая помощь действительно ценится.

Start-Job -InitializationScript { 
#load assemblies 
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null 
#Need SmoExtended for backup 
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") | Out-Null 
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | Out-Null 
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoEnum") | Out-Null 
} -Name JobP -ScriptBlock { 
$serverConn = new-object ("Microsoft.SqlServer.Management.Smo.Server") $($args[0]) 
$serverConn.ConnectionContext.StatementTimeout = 0 


$RelocateData = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("$($args[1])", "$($arg[2])") 
$RelocateLog = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("$($args[3])", "$($arg[4])") 

Restore-SqlDatabase -InputObject $serverConn -Database $($args[5]) -BackupFile "$($args[6])" -RelocateFile @($RelocateData,$RelocateLog) -ReplaceDatabase 
} -ArgumentList $ServerPrimary,$database_logical_name,$database_path,$log_logical_name,$log_path,$database,$backupfile_full_path 
+0

Чтение других сообщений, они предлагают передать список аргументов параметру внутри блока сценария. Я попробую, если это сработает, я опубликую новый обновленный скрипт. предложенный синтаксис выглядит следующим образом: -scriptblock {param ($ p1, $ p2) ........} –

ответ

0

Я хотел бы поблагодарить StackOverflow и все предыдущие темы, занимавшиеся с проходящим переменными в блок скрипта через пары ($ p1, $ p2)

мне удалось решить проблему с судом и ошибка, сейчас скрипт работает. вот решение:

Start-Job -InitializationScript { 
    #load assemblies [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null 
    #Need SmoExtended for backup 
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") | Out-Null 
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | Out-Null 
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoEnum") | Out-Null 
} -Name JobP -ScriptBlock { 

#Define the parameters to be used inside the script block, $p0 will be the first arguments in the "-ArgumentList", $p1 will be the second and so on. 
param($p0, $p1, $p2, $p3, $p4, $p5, $p6) 
$serverConn = new-object ("Microsoft.SqlServer.Management.Smo.Server") $p0 
$serverConn.ConnectionContext.StatementTimeout = 0 

#the below variables are necessary incase you have your data and log in a different location than the default. 
$RelocateData = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("$p1", "$p2") 
$RelocateLog = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("$p3", "$p4") 

echo $p0 $p1 $p2 $p3 $p4 $p5 $p6 

Restore-SqlDatabase -InputObject $serverConn -Database "$p5" -BackupFile "$p6" -RelocateFile @($RelocateData,$RelocateLog) -ReplaceDatabase 
} -ArgumentList $ServerPrimary,$database_logical_name,$database_path,$log_logical_name,$log_path,$database,$backupfile_full_path 
Смежные вопросы