如果尝试复制项目,FileSystemWatcher会突然停止工作

时间:2017-07-06 06:49:36

标签: powershell events scripting filesystemwatcher

我在工作中遇到了一些我想用脚本解决的小问题。

背景

  • 我们使用虚拟机( VM )从其他公司(较大的公司)访问网络。
  • 有时在虚拟机中添加新文件,我们必须下载它。问题是,我们不知道他们何时上传某些内容,或者是什么。
  • 我想运行一个脚本
    • 检测到创建的新文件
    • 使用临时服务器复制它们
    • 临时服务器位于VM和本地计算机之间

更多信息

  • 我是Powershell的新手。我理解下面的一些代码(复制,移动,创建目录等),但其他一些部分是来自互联网的复制粘贴,我不明白它们是如何工作的(FileSystemWatcher和事件的订阅)。
  • 对我来说,现在已经足够了(如果它有效的话)(我有另一个优先事项,编码脚本不是我真正的任务,但它会让一切变得更容易)
  • 我在计算机上运行它并且运行正常,但在VM中运行相同会导致一些意想不到的问题。
  • 问题:大多数情况下,它会在Copy-Item命令中停止工作。这不是一个总是,有时4-5个文件被复制,然后崩溃并停止工作。

代码

$folder = '\\SMT...\...\...\Desktop\testscript\Archiv' # Enter the root path you want to monitor.
$filter = '*.*'  # You can enter a wildcard filter here.
$backup = '\\...\...\...\Desktop\testscript\backup'  

$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{
    IncludeSubdirectories = $true;
    NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
}

Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {

    $name       = $Event.SourceEventArgs.Name
    $changeType = $Event.SourceEventArgs.ChangeType
    $timeStamp  = $Event.TimeGenerated
    $path       = $Event.SourceEventArgs.FullPath

    Write-Host "The file '$name' was $changeType at $timeStamp" -fore green

    $path2      = Get-ChildItem $path
    $namedir    = $path2.Name
    $woname     = $path2 -replace [Regex]::Escape($namedir)
    $dest       = $woname -replace [Regex]::Escape($folder)
    $backupdest = "$backup\$dest"

    New-Item -ItemType directory -Path $backupdest -Force -verbose
    Copy-Item -Path $path2 -Destination $backupdest -verbose -recurse

}

所有"路径" stuff是创建与原点相同的文件夹树。

我做错了什么?可能有更简单的方法吗?

非常感谢你!

0 个答案:

没有答案