2

我是 PowerShell 的新手,我已经设法用谷歌搜索了以下 PowerShell 脚本:

#System Variable for backup Procedure

 $date = Get-Date -Format d.MMMM.yyyy
 New-PSDrive -Name "Backup" -PSProvider Filesystem -Root "\\server>\<path>"
 $source = "\\server>\<path>"
 $destination = "\\<server>\<path>\$date"
 $path = test-Path $destination

电子邮件变量

 $smtp = "smudmug.mug"
 $from = "James Clegg <email@email.com>"
 $to = "James Clegg <email@email.com>"
 $body = "Hi All, </br></br> Please find the back up log File for <Server>      attached.</br></br> Back up complete on $date</br></br>Kind Regards,</br></br> James"
 $subject = "Backup of <Server> is Complete $date"

备份过程开始

if ($path -eq $true) {
write-Host "Folder Already exists"
Remove-PSDrive "Backup"  
} elseif ($path -eq $false) {
        cd backup:\
        copy-Item -Recurse $source -passthru -Destination $destination
        $backup_log = Dir -Recurse $destination | out-File      "$destination\backup_log.txt"
        $attachment = "$destination\backup_log.txt"
        #Send an Email to User 
        send-MailMessage -SmtpServer $smtp -From $from -To $to -Subject        $subject -Attachments $attachment -Body $body -BodyAsHtml
        write-host "Backup Successful"
        cd c:\

     Remove-PSDrive "Backup"  
     }

   cmd /c pause | out-null

有人可以帮我添加哪些内容以允许复制正在使用的文件。

亲切的问候,

詹姆士

4

1 回答 1

1

复制在另一个应用程序中打开的文件并非易事。问题是即使您可以复制该文件,也不能保证该文件处于可用状态。除了最简单的文本文件外,所有文本文件都很容易损坏。考虑以下场景:

   user           backup
    |                |
 (saves doc)         |
    |                |
(write n chars)      |
    |             (read file)   
(write m chars)   (write copy)
    |                |

期望的结果是什么?从用户的角度来看,文档应该包含保存之前或之前的状态。实际结果,只有一些保存的更改,几乎不正确。如果文件结构更复杂,例如电子表格,则结果可能会损坏而无法修复。

为了解决这种并发问题,有打开文件代理。在 Windows 中,有一个内置的 VSS(卷影复制服务),也有 3rd 方产品。这个想法是观察文件的活动并在所有更改都刷新到磁盘时制作一致的副本。这也需要应用程序的合作。有关 VSS 的详细讨论,请阅读 Technet文章。您最好的选择是使用已经解决该问题的现有备份解决方案。

于 2015-06-26T09:38:36.913 回答