我有以下代码,它在PowerShell中解析XML文件,然后遍历配置文件中的条目(这些是备份作业)并执行备份(通过调用函数)。
if ($xmlfile.configuration.DBAndFilesBackup.item("MSSQL").haschildnodes) {
$xmlfile.configuration.DBAndFilesBackup.MSSQL.backup |
Start-RSJob -Name {$_.Name} -Throttle 2 -ScriptBlock {
# Begin the Backup
BeginBackup $_.Name $log
# Backup the mssql database
MSSQLBackup $_.Name $_.DBPath $Using:backupdir $Using:backuptempdir
# Backup the files
FilesBackup $_.Name $_.FolderName $_.FilesPath $Using:backupdir $Using:backuptempdir
# End the Backup
EndBackup $_.FolderName $_.Name $log $Using:emailTo $Using:backupdir $Using:backuptempdir
} -FunctionsToLoad BeginBackup,MSSQLBackup,FilesBackup,EndBackup,Mailer,PrintHeader |
Wait-RSJob |
Receive-RSJob |
Out-file "$ScriptDir\logs\corebackup\$ScriptName $($xmlfile.configuration.DBAndFilesBackup.MSSQL.backup.Name) $DateStamp.log"
}
Start-RSJob
是一个自定义PowerShell模块,类似于处理踢出并行作业的Start-Job
cmdlet。
RSJob和本机PowerShell Start-Job
cmdlet似乎都不会处理PowerShell转录(日志记录)。因此,除了Write-Output
之外,我还使用Out-File
来捕获作业的输出。
我遇到的问题是,在脚本的Write-Output
部分,我想在日志文件名中包含备份的名称。换句话说,我最终得到了一个名为" corebackup 2015-08-24.log"而不是" corebackup backupname 2015-08-24.log"。
问题是如何将$_.Name
传递给Out-File
。现在写了一个日志,但没有作业名称。
答案 0 :(得分:0)
我无法通过节流获得上述任何一项工作。换句话说,我可以获得输出,但随后节流中断,或者我可以进行限制工作但不能获得输出。
我最终使用的解决方案是添加一堆" Write-Output | Out-file $ log -Append"每当我想输出一些东西时,我的脚本。
有点丑陋的黑客 - 但是通过使用脚本块内部我可以捕获输出。
感谢大家的帮助和建议。