2011-06-14 30 views
1

我有一個功能,恢復使用「Microsoft.SqlServer.Management.Smo.Restore SQL Server數據庫。有一個叫完成了一個事件,並在代碼中我把幫助使用PowerShell三項賽

Register-ObjectEvent -InputObject $restore -EventName "Complete" -SourceIdentifier CompleteRestore -Action { Write-Host "Works"} | Out-Null 

它完美當恢復完成時我通過PowerShell的工作運行功能,恢復已完成,但該消息未出現出現的消息。

你能幫助我的傢伙?

感謝

我使用這個代碼來運行功能作爲作業和註冊,對象是調用-SqlRestoreEventing功能

$server = "." 
$dbname = "TestPoshEventing_6" 
$filepath = "c:\temp\backup\TestPoshEventing.bak" 
$Realocatefiles = @{TestPoshEventing='c:\temp\restore\TestPoshEventing_6.mdf';TestPoshEventing_log='c:\temp\restore\TestPoshEventing_6.ldf'} 
Start-Job -Name "Restore1" -InitializationScript {Import-Module c:\temp\testes\PoshTest.psm1 -Force} -scriptblock { Invoke-SqlRestoreEventing -sqlserver $args[0] -dbname $args[1] -filepath $args[2] -relocatefiles $args[3] -force } -ArgumentList $server, $Dbname ,$filepath ,$Realocatefiles 
+0

因此,您將「恢復功能」放入作業中,並在開始作業的控制檯中運行Register-ObjectEvent? – 2011-06-14 21:45:29

+0

感謝Marco,沒有Register-ObjectEvent在函數中。 – 2011-06-14 22:00:19

回答

1

後臺作業運行在不同的運行空間中。所以,你輸出的任何東西都不會出現在控制檯上。你可以修改你的代碼來做到這一點。檢查此例如,

$server = "." 
$dbname = "TestPoshEventing_6" 
$filepath = "c:\temp\backup\TestPoshEventing.bak" 
$Realocatefiles = @{TestPoshEventing='c:\temp\restore\TestPoshEventing_6.mdf';TestPoshEventing_log='c:\temp\restore\TestPoshEventing_6.ldf'} 
$job = Start-Job -Name "Restore1" -InitializationScript {Import-Module c:\temp\testes\PoshTest.psm1 -Force} -scriptblock { Invoke-SqlRestoreEventing -sqlserver $args[0] -dbname $args[1] -filepath $args[2] -relocatefiles $args[3] -force } -ArgumentList $server, $Dbname ,$filepath ,$Realocatefiles 

Wait-Job $job | Receive-Job 

通過使用Receieve-Job後臺作業完成時,你可以看到你register-ObjectEvent的輸出。

+0

感謝RAVI,作品精美....令人驚歎... – 2011-06-15 08:40:33

0

的外空cmdlet的將輸出發送到NULL,實際上裏面,刪除它。

+0

其實Out Null是不會顯示有關..的信息。如果我不工作,運行良好。 – 2011-06-14 22:01:13

0

我很確定這是一個範圍問題。當您在作業中運行Register-ObjectEvent時,您實際上正在創建一個新的作用域,一個新的運行空間。範圍一旦命令完成就會終止。根據您發佈的內容,我認爲您的工作正在開始備份,但註冊事件的範圍在完成之前終止,因此當您收到工作結果時,您什麼也得不到。要查看寫主機,您需要保持範圍足夠長以接收事件。或者執行寫主機以外的操作,如編寫日誌文件。下面是從我的演示的一個例子:

註冊-ObjectEvent -InputObject $觀察家-Eventname 「創建」 -SourceIdentifier 「FolderChange」` -MessageData 「一個新的文件被創建了」 清議{ 「$(的Get-日期)創建一個新文件:$($ event.sourceEventArgs.fullpath)「| Out-File $ env:temp \ log.txt --append}

+0

非常感謝Jeffery。 – 2011-06-14 22:48:54