我有以下代碼在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
類似於Start-Job
小命令,處理開球並行作業定製的PowerShell模塊。
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
。現在寫了一個日誌,但沒有工作名稱。
不確定這是否可行,因爲'$ Name'在作業執行時不會在scritpblock內定義。我推薦使用'-ArgumentList',並使用'$ args'數組來設置它。 –
@CarlosNunez是的,scriptblocks是棘手的,但我仍然不確定scriptblock中的其他變量來自哪裏('$ _。FolderName','$ _。FilesPath'等) – beatcracker
腳本塊中的其他變量即將到來來自xml配置文件。所以xml看起來像這樣:<?xml version =「1.0」encoding =「utf-8」?> <結構> \t \t \t \t \t \t \t <備份名稱= 「我的首次備份」 DBPATH = 「\\ SERVER1 \一些\文件夾\」 FILESPATH =「\\ SERVER1 \一些其它路徑\」 /> \t \t \t \t \t <備份名稱= 「我的第二備份」 DBPATH = 「\\服務器2 \一些\文件夾\」 FILESPATH = 「\\服務器2 \一些其它路徑\」/> \t \t \t \t DBAndFilesBackup> Configuration> –
Brad