帮助Powershell事件

时间:2011-06-14 21:34:45

标签: powershell

我有一个使用" 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

3 个答案:

答案 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}