首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell机器人在删除/mir之前复制/mir复制文件

Powershell机器人在删除/mir之前复制/mir复制文件
EN

Stack Overflow用户
提问于 2012-09-28 22:40:47
回答 1查看 4.6K关注 0票数 0

我编写了一个Powershell脚本,它执行以下步骤。

  1. 从服务器到外部硬盘驱动器的RoboCopies文件(增量备份)
  2. 下次它应该检查服务器上是否删除了任何文件,如果是,请将这些文件从备份文件夹移到备份硬盘驱动器中的一个名为_DeletedFiles的文件夹中。
  3. RoboCopy with /MIR (它将删除服务器上删除的文件以及备份上的文件,这没关系,因为我已经将它们保存在_DeletedFiles文件夹中)

这个_DeletedFiles文件夹的要点是,即使有人删除了一个文件,我们也希望在某个地方保存至少60天。

现在,这个脚本稍微复杂一些,包括编写日志文件、测试路径和第一次运行if语句等等。

除了要将服务器上删除的文件从BackUp复制到新文件夹的步骤外,所有文件似乎都正常工作。

此步骤与以下步骤类似:

代码语言:javascript
复制
$testfolder = Test-Path "$UsbDisk\$backupFolder"  

        # If a Backup folder already exist then Compare files and see if any changes have been made
        if ( $testfolder -eq $true ) { #IF_2  

                    # Copy deleted files to BackUp Folder
                    MyLog "Check for Deleted Files on E:\" 0                  
                    $source = "E:\"
                    $sourcelist = Get-ChildItem $source -Recurse
                    $destination = "$UsbDisk\$backupFolder\Data_01\_DeletedFiles"

                    foreach ($file in $sourcelist){
                    $result = test-path -path "E:\*" -include $file
                        if ($result -like "False"){
                            Copy-Item $file -Destination "$destination"
                        }

                    }

                    # Start Synchronizing E:\
                    MyLog "Start Synchronizing E:\" 0
                    Robocopy "E:\" "$UsbDisk\$backupFolder\Data_01" /mir /r:2 /w:3 /M /XD VM_*

                    MyLog "E:\ is up to Date" 0

                    # Copy deleted files to BackUp Folder
                    MyLog "Check for Deleted Files on F:\" 0    
                    $source = "F:\"
                    $sourcelist = Get-ChildItem $source -Recurse
                    $destination = "$UsbDisk\$backupFolder\Data_02\_DeletedFiles"

                    foreach ($file in $sourcelist){
                    $result = test-path -path "F:\*" -include $file
                        if ($result -like "False"){
                            Copy-Item $file -Destination "$destination"
                            # Then Delete it from the BackUp
                        }

                    }

                    # Start Synchronizing F:\
                    MyLog "Start Synchronizing F:\" 0
                    Robocopy "F:\" "$UsbDisk\$backupFolder\Data_02" /mir /r:2 /w:3 /M /XD VM_*

                    MyLog "F:\ is up to Date" 0

        }

我得到的错误--即文件不能被复制,因为它们不存在于目的地;但是,它试图复制不应该被复制的文件。

我想知道是否有人想解决这个更优雅的问题,或者如何修复我的代码片段。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-30 01:45:17

我认为问题可能在测试路径命令中。我会用include $file代替include $file.Nameinclude参数需要一个字符串,而不是一个对象。

为了代码的可维护性,我也会用(-not $result代替(-not $result)。这是因为$result将包含一个布尔值($true$false),而不是字符串。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12648272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档