我有一个使用" Microsoft.SqlServer.Management.Smo.Restore恢复sql server数据库的功能。有一个名为completed的事件,在我提出的代码中
Register-ObjectEvent -InputObject $restore -EventName "Complete" -SourceIdentifier CompleteRestore -Action { Write-Host "Works"} | Out-Null
它完美运行,并在还原完成时显示消息。
当我通过Powershell Job运行该功能时,恢复已完成,但该消息未出现。
你能帮助我吗?
由于
我使用此代码将函数作为作业运行,而Register-Object在Invoke-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 :(得分: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
的输出。
答案 1 :(得分:0)
Out-Null cmdlet将输出发送到NULL,实际上是删除它。
答案 2 :(得分:0)
我很确定这是一个范围问题。在作业中运行Register-ObjectEvent时,您正在创建一个新的作用域,实际上是一个新的作用域。一旦命令完成,范围就会终止。根据您发布的内容,我认为您的工作正在开始备份,但注册事件的范围会在完成之前终止,因此当您收到工作结果时,您什么也得不到。要查看写主机,您需要将示波器保持足够长的时间以接收事件。或者执行Write-Host以外的操作,例如编写日志文件。以下是我的一个演示中的示例:
Register-ObjectEvent -InputObject $ watcher -Eventname“Created”-SourceIdentifier“FolderChange”` -MessageData“创建了一个新文件”-Action { “$(获取日期)创建了一个新文件:$($ event.sourceEventArgs.fullpath)”| Out-File $ env:temp \ log.txt -append}