2017-06-09 21 views
0

的信息寻找帮助电源外壳脚本来监视文件夹的文件更改,并打印在控制台上

我想写一个实用程序,监视文件夹中的所有文件的变化和打印电源外壳在控制台上的信息

从下面的问题找到很多帮助,感谢OP和线程中的答案。

Powershell script to run a .bat file when a file is added to a folder

我有一个脚本这样的事情现在

$folder = '\\{Networkname}\Partner1\' # Enter the root path you want to monitor. 
$filter = '*' # You can enter a wildcard filter here. 

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

Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action { 
$name = $Event.SourceEventArgs.Name 
$changeType = $Event.SourceEventArgs.ChangeType 
$timeStamp = $Event.TimeGenerated 
Write-Host "The file '$name' was $changeType at $timeStamp" -fore green 
write-host "test" 

} 

当我执行上面的脚本中,我得到异常下面

Register-ObjectEvent : Cannot subscribe to event. A subscriber with source identifier 'FileCreated' already exists. 
At C:\Users\sysadmin\Desktop\FileWatcher.ps1:6 char:21 
+ Register-ObjectEvent <<<< $fsw Created -SourceIdentifier FileCreated -Action { 
    + CategoryInfo   : InvalidArgument: (System.IO.FileSystemWatcher:FileSystemWatcher) [Register-ObjectEvent], 
    ArgumentException 
    + FullyQualifiedErrorId : SUBSCRIBER_EXISTS,Microsoft.PowerShell.Commands.RegisterObjectEventCommand 

我刚开始使用PowerShell为我需要一个实用程序来监视文件夹中的文件更改,请让我知道如果在上面的代码中有任何错误,我只是试图打印该chan控制台上的ged文件信息。

任何帮助,高度赞赏

谢谢。

回答

0

有几个问题:

  1. 你运行该脚本两次在同一个会话中,以便在 事件观察家已经具有相同名称的存在。使用 Get-EventSubscriber查看同一个 PowerShell会话中的注册事件。
  2. 您需要将Register-ObjectEvent cmdlet 中的'FileCreated'事件移至-EventName参数。

-Source-Identifier参数用作一种名称参数。