0

我正在使用 expdp 命令进行备份并将输出重定向到文本文件中。在此过程中,控制台为空白。我想编写一个 powershell 脚本以将状态消息显示为“进行中”,直到 expdp 命令执行完成。我尝试使用 start-job 命令,但是由于它是后台作业,因此无法将输出重定向到文本文件中。任何帮助在这里表示赞赏。下面是用于启动作业的代码

$job = Start-Job -ScriptBlock {expdp username/password@database schemas="" directory="" dumpfile="" logfile="" REUSE_DUMPFILES=yes filesize=32G *> PROJECT.txt} -Name ExpdpJob

while ((Get-Job -Name ExpdpJob).State -eq "Running") 
{ 
    Write-Output "Expdp command is running"
}
4

1 回答 1

0

要捕获标准输出,您必须使用 receive-job 命令。我已经用 PowerShell 5.1 测试了下面的代码,它可以工作。由于不支持信息流(#6),它在较低版本中不起作用。下面的代码片段假装 expdp 运行 10 秒并等待每 5 秒显示一次“正在运行”消息直到完成,然后使用 Receive-Job 将输出捕获到文件并删除作业。

$job = Start-Job -ScriptBlock {Start-Sleep -Seconds 10; Write-Host "test";} -Name ExpdpJob

while ((Get-Job -Name ExpdpJob).State -eq "Running") 
{ 
    Write-Output "Expdp command is running"
    Start-Sleep -Seconds 5
}

Write-Output "Expdp command completed"
((Receive-Job $job) 6>&1) >> C:\temp\test123.txt

Remove-Job $job

Get-Content C:\temp\test123.txt
于 2018-12-06T20:07:15.977 回答