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