Powershell-Skript wird nicht ausgelöst

569
Matt

Ich bin ziemlich neu bei Powershell, aber ich führe folgendes Skript in PS ISE aus:

$source = "E:\MEX_Websites\Customer_Hosting\MyFolderB\Reports\" $filter = "*.*"  $fsw = New-Object System.IO.FileSystemWatcher $source, $filter -Property @{ IncludeSubDirectories=$false NotifyFilter = [System.IO.NotifyFilters]'FileName, LastWrite' }  $onCreated = Register-ObjectEvent $fsw Changed -SourceIdentifier MyFolderBReports -Action { $path = $Event.SourceEventArgs.FullPath $name = $Event.SourceEventArgs.Name $changeType = $Event.SourceEventArgs.ChangeType $timeStamp = $Event.TimeGenerated Write-Host "The file '$name' was $changeType at $timeStamp" Move-Item E:\MEX_Websites\Customer_Hosting\MyFolderB\Reports\*.* -Destination M:\MyFolderB\Reports\ } 

Im Grunde sollte es darauf achten, dass eine Datei im Ordner MyFolderB \ Reports hinzugefügt wird, und dann in den Zielordner verschoben. Es sieht alles perfekt aus und ich klicke in PS ISE auf die Schaltfläche "Skript ausführen". Alles wird perfekt ausgeführt, aber es passiert nichts. Wenn ich eine Datei in den Basisordner stecke, wird sie nicht verschoben.

Welche Ideen fehlen mir hier?

1

1 Antwort auf die Frage

0
Deadly-Bagel

Sie haben das Changed-Ereignis nur abonniert. Dies geschieht, wenn der Inhalt einer Datei geändert oder kopiert wird. Dies gilt nicht für Dateien, die erstellt oder verschoben werden.

Möglicherweise möchten Sie basteln, um die Ausgabe wie gewünscht zu erhalten. Folgendes sollte jedoch funktionieren:

$source = "C:\Ops" $filter = "*.*"  $fsw = New-Object System.IO.FileSystemWatcher $source, $filter -Property @{ IncludeSubDirectories=$false NotifyFilter = [System.IO.NotifyFilters]'FileName, LastWrite' }  $onCreated = @()  @( "Changed", "Created", "Renamed" ) | Foreach-Object { $onCreated += Register-ObjectEvent $fsw -EventName $_ -SourceIdentifier "MyFolderBReports_$_" -Action { $path = $Event.SourceEventArgs.FullPath $name = $Event.SourceEventArgs.Name $changeType = $Event.SourceEventArgs.ChangeType $timeStamp = $Event.TimeGenerated Write-Host "The file '$name' was $changeType at $timeStamp" Move-Item C:\Ops\*.* -Destination C:\Ops\Test } } 

Dies ist eine Registrierung für die erstellten und umbenannten Ereignisse zusätzlich zum geänderten Ereignis. Sie sollten also alle Ihre Basen abdecken. Mit Blick auf $fsw | GMShows gibt es zusätzlich Deleted, Disposedund ErrorEreignisse, sondern für Ihre Zwecke Ich glaube nicht, dass sie erforderlich sind.

Nur eine Notiz: Wenn Sie versuchen, mit der rechten Maustaste auf> Neue Datei zu klicken, wird sie verschoben, bevor Sie die Möglichkeit haben, einen Namen zu geben Deadly-Bagel vor 7 Jahren 0