监视和复制多个位置

时间:2018-05-04 10:17:36

标签: powershell filesystemwatcher

尝试使用带有两个网卡的桥接PC自动将文件从一台PC(不在网络上)复制到网络位置。

我已经设法将此脚本放在上一篇关于该主题的帖子中。这很棒!

我遇到的问题是我需要监控PC上两个位置的文件并将其复制到桥接PC上的两个不同位置

C:\ Source→C:\ Destination

C:\ Source2→C:\ Destination2

我尝试使用不同的源和目标运行2个PowerShell脚本,但它不会允许第二个在第一个运行时运行。出现以下错误消息:

Register-ObjectEvent : Cannot subscribe to the specified event. A subscriber
with the source identifier 'FileCreated' already exists.
At ****\PowerShell\movePowerhell - Copy.ps1:8 char:14
+ ... onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileC ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (System.IO.FileSystemWatcher:FileSystemWatcher) [Register-ObjectEvent], ArgumentException
    + FullyQualifiedErrorId : SUBSCRIBER_EXISTS,Microsoft.PowerShell.Commands.RegisterObjectEventCommand

我假设我需要监控这两个位置并在同一个脚本中复制到两个目的地?

我尝试创建一个包含源和目标的数组,然后循环遍历代码两次但是我得到了与上面相同的错误。

$folder = "C:\Source"
$filter = "*.*"
requirements
$destination = "C:\Destination"
$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{
    IncludeSubdirectories = $true
    NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
}
$onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
    $path = $Event.SourceEventArgs.FullPath
    $name = $Event.SourceEventArgs.Name
    $changeType = $Event.SourceEventArgs.ChangeType
    $timeStamp = $Event.TimeGenerated

    Move-Item $path -Destination $destination -Force -Verbose # Force will overwrite files with same name
}

1 个答案:

答案 0 :(得分:2)

如有疑问,请阅读documentation(强调我的):

  

<强> -SourceIdentifier

     

指定您为订阅选择的名称。 您选择的名称在当前会话中必须是唯一的。 默认值是Windows PowerShell分配的GUID。

避免此问题的最简单方法是不指定源标识符。如果省略参数,PowerShell将自动将GUID设置为源标识符,这将避免名称冲突。