2017-07-24 4 views
1

Ich möchte neue Dateien überwachen, die in einem Ordner erstellt wurden. Wenn dies passiert, möchte ich eine Batch-Datei starten (im Beispiel unten schreibe ich einfach eine Zeile in eine Log-Datei). Ich weiß nicht, warum das nicht funktioniert.Unterschied Aktion für verschiedene Dateien

Mein Code ist:

$watcher = New-Object System.IO.FileSystemWatcher 
$watcher.Path = "D:\" 
$watcher.Filter = "*.*" 
$watcher.IncludeSubdirectories = $true 
$watcher.EnableRaisingEvents = $true 

$action = { 
    $path = $Event.SourceEventArgs.FullPath 
    $changeType = $Event.SourceEventArgs.ChangeType 
    $logline = "$(Get-Date), $changeType, $path" 

    if ($file.Name -like "Apertura") { 
     Add-Content "C:\Users\F701845\Desktop\Apertura.txt" -Value $logline 
    } else { 
     Add-Content "C:\Users\F701845\Desktop\TestNO.txt" -Value $logline 
    } 
} 

Register-ObjectEvent $watcher "Created" -Action $action 
while ($true) {sleep 5} 
+4

Bitte beschreiben Sie, wie es andernfalls - dort im Code für das Scheitern keinen offensichtlichen Grund ist, so dass alle zugehörigen Fehlermeldungen wäre hilfreich. –

+1

Meine Vermutung ist, dass '$ file.Name - wie" Apertura "' 'file.Name -ähnlich" sein sollte "Apertura *" 'As' -like' ohne '*' als Wildcard ist das gleiche wie '-eq ' – BenH

Antwort

1

Gut, das ist einfach, Sie eine Variable verwenden, die in Ihrem IF/ELSE ist leer. $ path und $ changeType werden von $ Event abgeleitet, aber $ file existiert überhaupt nicht.

Schauen Sie sich zunächst an, was Sie haben und Sie werden sehen, dass Sie in diesem Fall vielleicht folgendes verwenden könnten: $ Event.SourceEventArgs.Name.

$Event.SourceEventArgs | Get-Member 

bool Equals(System.Object obj) 
int GetHashCode() 
type GetType() 
string ToString() 
System.IO.WatcherChangeTypes ChangeType {get;} 
string FullPath {get;} 
string Name {get;} 

Während es funktioniert, es sieht immer noch für Dateien mit dem Namen genau Apertura Bedeutung Apertura.txt nicht funktionieren, würde ich mit so etwas wie Apertura empfehlen. * Wenn Sie die Erweiterung nicht kennen.

Beispielcode:

$watcher = New-Object System.IO.FileSystemWatcher 
$watcher.Path = "C:\test\" 
$watcher.Filter = "*.*" 
$watcher.IncludeSubdirectories = $true 
$watcher.EnableRaisingEvents = $true 

$action = { 

    $path = $Event.SourceEventArgs.FullPath 
    $changeType = $Event.SourceEventArgs.ChangeType 
    $file = $Event.SourceEventArgs.Name #get filename from Event data 
    $logline = "$(Get-Date), $changeType, $path" 

    if ($file -like "Apertura.*") { #removed the .Name and added .* 
     Add-Content "C:\Users\username\Desktop\Apertura.txt" -Value $logline 
    } else { 
     Add-Content "C:\Users\username\Desktop\TestNO.txt" -Value $logline 
    } 
} 

Register-ObjectEvent $watcher "Created" -Action $action 
while ($true) {sleep 5} 

$watcher.Dispose() #can be used to dispose the System.IO.FileSystemWatcher 
Verwandte Themen