none
Wie FileSystemWatcher für gewisse Zeit abschalten? RRS feed

  • Frage

  • Hallo,

    ist es möglich einen FileSystemWatcher eine gewisse Zeit auszuschalten? Sozusagen einen Timeout verpassen.

    Also es wird z.B. eine Änderung an einem File gemacht, anschließend soll der FSW für z.B. 20 Minuten ausgeschalten werden.

    Ist dies möglich? Wenn ja wie?

    Vielen Dank schonmal

    Freitag, 9. Mai 2014 23:36

Antworten

  • Versuche für Variablen Namen zu benutzen die Rückschlüsse auf den Inhalt zulassen $Var ist nichts sagend!

    Gerade Globale Variablen mit so einem Kurzen Namen könnten schon Existieren. Je länger der Name ist desto unwahrscheinlicher wird es das es eine Variable mit diesem Namen schon gibt.

    Du müsste dich in das Thema Scope einarbeiten.

    Scopes:

    Immer wenn man in PowerShell mit den geschweiften Klammern {} einen Block erstellt, dann wird ein neuer Scope (Bereich) erzeugt.
    Ein Scope (Bereich) bestimmt den Raum indem eine Variable oder ein Objekt sichtbar und Benutzbar ist.
    Man kann sich Scopes wie verschachtelte Räume vorstellen.
    PowerShell hat ein ähnliches „Scope -Gebäude“ wie die meisten bekannten Programmiersprachen.

    Siehe Bild: http://www.powershell-group.eu/wp-content/uploads/2014/04/Powershell_Scopes.png

    oder: Get-Help about_Scopes
    oder: http://technet.microsoft.com/en-US/library/hh847849.aspx

    Der FilesystemWatcher hat einen eigenen Scope.

    Damit er die Hashtable sehen kann muss diese in den Scope des FileSystemWatchers oder in den Globalen Scope gesetzt werden.

    Hier MUSST du JEDESMAL den Scope zugriffsmodifizierer $Global: angeben damit sichergestellt ist das immer die Globale Variable benutzt wird.

    Wird der zugriffsmodifizierer nicht angegeben erstellt PowerShell einen neue (leere) Variable im Lokalen Scope.

    So müsst es gehen (ungetestet):

    cls
    Unregister-Event *
    
    # Leere HashTable erstellen
    $Global:DataHash = @{}
    # HashTable füllen
    $Global:DataHash.Änderungsgrund = ""
    $Global:DataHash.cnt1 = 0
    $Global:DataHash.FSWPauseTimeSeconds = 40
    [DateTime]$Global:DataHash.FSWPause = (Get-Date).AddDays(-1)
    
    # FSW initialisieren
    $fsw = New-Object System.IO.FileSystemWatcher
    $fsw.Path = "E:\Dropbox\powershell\Deltadaten"
    $fsw.IncludeSubdirectories = $False #$True
    $fsw.NotifyFilter =  ([System.IO.NotifyFilters]::Attributes -bor [System.IO.NotifyFilters]::CreationTime -bor [System.IO.NotifyFilters]::DirectoryName -bor [System.IO.NotifyFilters]::FileName -bor [System.IO.NotifyFilters]::LastAccess -bor [System.IO.NotifyFilters]::LastWrite -bor [System.IO.NotifyFilters]::Security  -bor [System.IO.NotifyFilters]::Size)
    $fsw.EnableRaisingEvents = $True
    $fsw.filter = "*.dat"
    
    # Funktion die alle Ereignisse abarbeitet
    function Global:FileSystemWatcherEventhandler {    
      param($eventArgs)        
      
      If($Global:DataHash.FSWPause.AddSeconds($Global:DataHash.FSWPauseTimeSeconds) -lt (Get-Date)){ 
        
        # Pfad der geänderten Datei + aktuelle Zeit an $Global:DataHash.Änderung übergeben  
        $Global:DataHash.Änderung = “{0} am {1} geändert!” –f $eventArgs.FullPath, (get-item $eventArgs.FullPath).LastWriteTime
        
        #Fenster als Job aufrufen
        $Job1 = Start-Job -ArgumentList ($Global:DataHash) -ScriptBlock {
          
          # Argument wieder in HashTable casten
          $VarJob = [HashTable]$args[0]		
          
          #Assemblies laden
          [void] [reflection.assembly]::loadwithpartialname("System.Windows.Forms")
          [void] [reflection.assembly]::loadwithpartialname("System.Drawing")
          
          #Fenster Grundgerüst
          $Form = New-Object System.Windows.Forms.Form  
          $Form.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedToolWindow  
          $Form.StartPosition = "CenterScreen" 
          $Form.Size = New-Object System.Drawing.Size(1000,350)
          $Form.KeyPreview = $True
          $Form.Add_KeyDown({if ($_.KeyCode -eq “Enter”) {&$OnBTNfswoff_Click}})
          $Form.Add_KeyDown({if ($_.KeyCode -eq “Escape”) {&$OnBTNexit_Click}})
          
          
          #Text: $VarJob.Änderung 
          $LBLchange = New-Object "System.Windows.Forms.Label"
          $LBLchange.Text = $VarJob.Änderung 
          $LBLchange.Font = New-Object System.Drawing.Font("Courier New",10,[System.Drawing.FontStyle]::Regular)
          $LBLchange.TextAlign = 'MiddleLeft' 
          $LBLchange.Location = New-Object System.Drawing.Size(10,10) 
          $LBLchange.Size = New-Object System.Drawing.Size(1000,50)
          
          #Text: "Änderungsgrund:"
          $LBLchangereason = New-Object "System.Windows.Forms.Label"
          $LBLchangereason.Text = "Änderungsgrund:" 
          $LBLchangereason.Font = New-Object System.Drawing.Font("Courier New",10,[System.Drawing.FontStyle]::Regular)
          $LBLchangereason.TextAlign = 'MiddleLeft' 
          $LBLchangereason.Location = New-Object System.Drawing.Size(10,50) 
          $LBLchangereason.Size = New-Object System.Drawing.Size(950,50)
          
          #Eingabe: Änderungsgrund
          $TBchangereason = New-Object System.Windows.Forms.Textbox 
          $TBchangereason.Font = New-Object System.Drawing.Font("Courier New",10,[System.Drawing.FontStyle]::Regular)
          $TBchangereason.Location = New-Object System.Drawing.Size(10,100) 
          $TBchangereason.Size = New-Object System.Drawing.Size(950,50)
          
          #Button: FSW ausschalten
          $BTNfswoff = New-Object System.Windows.Forms.Button 
          $BTNfswoff.Text = "Überwachung eingeschaltet! Ausschalten?"
          $BTNfswoff.Font = New-Object System.Drawing.Font("Courier New",10,[System.Drawing.FontStyle]::Regular)
          $BTNfswoff.TextAlign = 'MiddleLeft'
          $BTNfswoff.Location = New-Object System.Drawing.Size(10,150) 
          $BTNfswoff.Size = New-Object System.Drawing.Size(400,50)
          $BTNfswoff.Add_Click({&$OnBTNfswoff_Click})			
          
          #Button: Fenster verlassen
          $BTNexit = New-Object System.Windows.Forms.Button
          $BTNexit.Text = "EXIT!"
          $BTNexit.Font = New-Object System.Drawing.Font("Courier New",10,[System.Drawing.FontStyle]::Regular)
          $BTNexit.TextAlign = 'MiddleLeft' 
          $BTNexit.Location = New-Object System.Drawing.Size(450,150) 
          $BTNexit.Size = New-Object System.Drawing.Size(400,50)
          $BTNexit.Add_Click({&$OnBTNexit_Click})
          
          # Button: FSW ausschalten/einschalten beim Klick
          $OnBTNfswoff_Click = {
            If ($VarJob.cnt1 % 2) { # Wenn $VarJob.cnt1 gerade
              # Pausen Zeit  mit der aktuellen Zeit initialisieren
              $VarJob.FSWPause = (Get-Date).AddDays(-1)
              #$Global:MyFileSystemWatcherPause = Get-Date
              Write-Host "Überwachung eingeschaltet, Pause gestopt!"
              $BTNfswoff.Text = "Überwachung eingeschaltet! Ausschalten?"
              $VarJob.cnt1++
            }
            Else { # Wenn $VarJob.cnt1 ungerade
              # Pausen Zeit  mit der gestrigen Zeit initialisieren
              $VarJob.FSWPause = Get-Date
              #$Global:MyFileSystemWatcherPause = (Get-Date).AddDays(-1)
              Write-Host "Überwachung ausgeschaltet, Pause gestartet!"
              $BTNfswoff.Text = "Überwachung ausgeschaltet! Einschalten?"
              $VarJob.cnt1++
            }	
          }
          
          # Button: Fenster verlassen beim Klick
          $OnBTNexit_Click = {
            # Änderungsgrund an $VarJob.Änderungsgrund übergeben
            $VarJob.Änderungsgrund = $TBchangereason.Text
            # Fenster schließen
            $Form.Close()
            $Form.Dispose()
          }
          
          # Elemente einbinden
          $Form.Add_Load()
          $Form.Add_Closed()
          $Form.Controls.Add($BTNfswoff) 
          $Form.Controls.Add($BTNexit)
          $Form.Controls.Add($LBLchangereason)
          $Form.Controls.Add($TBchangereason)
          $Form.Controls.Add($LBLchange)
          
          # Fenster anzeigen
          $Form.ShowDialog()| Out-Null
          
          #Return Hash	
          $VarJob
        }
        
        #Auf Eingabe warten
        Wait-Job $Job1
        
        #Variablen abholen
        $Var = [HashTable](Receive-Job $Job1)	
      } 
      Else {        
        # Innerhalb Pause
        Write-Host "Pause läuft noch $(( $Var.FSWPause.AddSeconds($Var.FSWPauseTimeSeconds) - (Get-Date)).Seconds) Sekunden!"        
        Write-Host ""   
        # Funktion verlassen ohne den Rest abzuarbeiten  
        return
      }          
      Write-Host "Betroffene Dateipfad : $($eventArgs.FullPath)"    
      Write-Host "Betroffene Dateiname : $($eventArgs.Name)"
      Write-Host "Typ des Ereignis     : $($eventArgs.ChangeType)"  
      IF($Var.Änderungsgrund -gt ""){
        Write-Host "Änderungsgrund       :" $Var.Änderungsgrund
      }
      
      
      
      # nur die RenamedEventArgs haben die Eigenschaft OldFullPath oder OldName!    
      If($eventArgs -is [System.IO.RenamedEventArgs]) {            
        Write-Host "Alter Dateiname : $($eventArgs.OldName)"            
        Write-Host "Alter Dateipfad : $($eventArgs.OldFullPath)"    
      }    
      #"Mach was hier mit dem Ereignis!"
      Write-Host ""
    }
    
    $OnCreated = {    
    FileSystemWatcherEventhandler($eventArgs)}
    
    $OnChanged = {    
    FileSystemWatcherEventhandler($eventArgs)}
    
    $OnDeleted = {    
    FileSystemWatcherEventhandler($eventArgs)}
    
    $OnRenamed = {    
    FileSystemWatcherEventhandler($eventArgs)}
    
    Register-ObjectEvent -InputObject $fsw -EventName Created -Action $OnCreated 
    Register-ObjectEvent -InputObject $fsw -EventName Changed -Action $OnChanged 
    Register-ObjectEvent -InputObject $fsw -EventName Deleted -Action $OnDeleted 
    Register-ObjectEvent -InputObject $fsw -EventName Renamed -Action $OnRenamed 


    PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    auf der deutschsprachigen PowerShell Community

    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+

    • Als Antwort markiert Mitsch86 Donnerstag, 15. Mai 2014 09:21
    Donnerstag, 15. Mai 2014 07:47

Alle Antworten

  • Bau dir einen Zeitstempel in dem du die Pause berechnest.

    "Starte Überwachung der txt Dateien in C:\Temp..."

    $fsw = New-Object System.IO.FileSystemWatcher
    $fsw.Path = "C:\Temp"
    $fsw.IncludeSubdirectories = $False #$True
    $fsw.NotifyFilter =  ([System.IO.NotifyFilters]::Attributes -bor [System.IO.NotifyFilters]::CreationTime -bor [System.IO.NotifyFilters]::DirectoryName -bor [System.IO.NotifyFilters]::FileName -bor [System.IO.NotifyFilters]::LastAccess -bor [System.IO.NotifyFilters]::LastWrite -bor [System.IO.NotifyFilters]::Security  -bor [System.IO.NotifyFilters]::Size)
    $fsw.EnableRaisingEvents = $True
    $fsw.filter = "*.txt"

    # Variable für einen Zeitstempelfür der eine Pause des Filesystemwatchers berechnet
    # Mit dem Datum von Gestern initialisieren
    [DateTime]$Global:MyFileSystemWatcherPause = (Get-Date).AddDays(-1)
    # Pausen Zeit setzen
    $Global:FileSystemWatcherPauseTimeMinutes = 20

    # Funktion die alle Ereignisse abarbeitet
    function Global:FileSystemWatcherEventhandler {

        param(
            $eventArgs
        )
        
        # Pause Timer berechnen und nur Arbeiten wenn keine pause ist
        If($Global:MyFileSystemWatcherPause.AddMinutes($Global:FileSystemWatcherPauseTimeMinutes) -lt (Get-Date)){
           # mehr als $Global:PauseTimeMinutes Minuten sind abgelaufen Ereignis wird verarbeitet
           # Pausen Zeit  mit der Aktuellen Zeit neu setzen
           $Global:MyFileSystemWatcherPause = Get-Date
           Write-Host "Pause ist abgelaufen, ich gehe Arbeiten."
        } Else {
            # wir sind innerhalb der 20 Minuten Pause und machen nix!
            Write-Host "Tariflich geregelte Pause!"
            Write-Host "Kommen Sie in $(($Global:MyFileSystemWatcherPause.AddMinutes($Global:FileSystemWatcherPauseTimeMinutes) - (Get-Date)).Minutes) Minuten wieder!"
            # Funktion verlassen ohne den Rest abzuarbeiten
            return
        }
        
        Write-Host "Typ des DateiSystem Ereignis : $($eventArgs.ChangeType)"
        Write-Host "Betroffene Dateipfad : $($eventArgs.FullPath)"
        Write-Host "Betroffene Dateiname : $($eventArgs.Name)"
        
        # nur die RenamedEventArgs haben die Eigenschaft OldFullPath oder OldName!
        If($eventArgs -is [System.IO.RenamedEventArgs]) {
                Write-Host "Alter Dateiname : $($eventArgs.OldName)"
                Write-Host "Alter Dateipfad : $($eventArgs.OldFullPath)"
        }

        "Mach was hier mit dem Ereignis!"
    }

    $OnCreated = {
        FileSystemWatcherEventhandler($eventArgs)
    }

    $OnChanged = {
        FileSystemWatcherEventhandler($eventArgs)
    }

    $OnDeleted = {
        FileSystemWatcherEventhandler($eventArgs)
    }

    $OnRenamed = {
        FileSystemWatcherEventhandler($eventArgs)
    }

    Register-ObjectEvent -InputObject $fsw -EventName Created -Action $OnCreated
    Register-ObjectEvent -InputObject $fsw -EventName Changed -Action $OnChanged
    Register-ObjectEvent -InputObject $fsw -EventName Deleted -Action $OnDeleted
    Register-ObjectEvent -InputObject $fsw -EventName Renamed -Action $OnRenamed

    Es kann sein das du mehrere Meldungen bei einer einzigen Aktion bekommst!
    Wenn du eine Pausenzeit gesetzt hast, macht das nichts, da die Pause immer länger ist als die doppelte Auslösung einer Aktion.

    hier die Warnung die bei der FilesystemWatcher Klasse steht:

    Hinweis
    Häufige Vorgänge in Dateisystemen können mehrere Ereignisse auslösen. Wenn eine Datei z. B. von einem Verzeichnis in ein anderes verschoben wird,
    werden möglicherweise mehrere OnChanged-Ereignisse und einige OnCreated-Ereignisse sowie OnDeleted-Ereignisse ausgelöst.
    Das Verschieben einer Datei ist ein komplexer Vorgang, der aus mehreren einfachen Vorgängen besteht und daher mehrere Ereignisse auslöst.
    Ebenso können einige Anwendungen (z. B. Antivirensoftware) zusätzliche Ereignisse in Dateisystemen auslösen, die von FileSystemWatcher erkannt werden.

    Siehe: http://msdn.microsoft.com/de-de/library/system.io.filesystemwatcher.changed.aspx


    PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    auf der deutschsprachigen PowerShell Community

    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+

    • Als Antwort vorgeschlagen brima Montag, 12. Mai 2014 07:33
    • Bearbeitet Peter Kriegel Montag, 12. Mai 2014 08:07
    Montag, 12. Mai 2014 06:32
  • Hallo,

     

    vielen Dank für die Antwort! Das ist schon ziemlich genau sowas wie ich es brauche...

    So nun wollte ich das Script noch ein bisschen bearbeiten komm aber nicht ganz zum Erfolg :-(

    Ich rufe nun eine Form auf von der ich den fsw ausschalten (pausieren) wollte, klappt aber nicht ganz...

    Es wird die $Global:MyFileSystemWatcherPause, die ich mit einem Button initialisiere nicht übernommen.

    Habe schon versucht mit dem Hash zu arbeiten aber mein "Versuch" geht nicht... Oder wie kann ich die AddSeconds dem Hash zuweißen? Hier mein Versuch:

    If(($Var.MyFileSystemWatcherPause).AddSeconds($Var.FileSystemWatcherPauseTimeSeconds) -lt (Get-Date)){

    Hier mal der Gesamte Code:

    cls
    Unregister-Event *
    
    # Leere HashTable erstellen
    $Var = @{}
    # HashTable füllen
    $Var.Änderungsgrund = ""
    $Var.cnt1 = 0
    
    # Variable für einen Zeitstempelfür der eine Pause des Filesystemwatchers berechnet
    # Mit dem Datum von Gestern initialisieren
    [DateTime]$Global:MyFileSystemWatcherPause = (Get-Date).AddDays(-1)
    # Pausen Zeit setzen
    $Global:FileSystemWatcherPauseTimeSeconds = 40
    
    
    # FSW initialisieren
    $fsw = New-Object System.IO.FileSystemWatcher
    #$fsw.Path = "C:\Users\wiedermm\Desktop\Deltadaten"
    #$fsw.Path = "E:\Dropbox\powershell\Deltadaten"
    $fsw.Path = "D:\Dropbox\powershell\Deltadaten"
    $fsw.IncludeSubdirectories = $False #$True
    $fsw.NotifyFilter =  ([System.IO.NotifyFilters]::Attributes -bor [System.IO.NotifyFilters]::CreationTime -bor [System.IO.NotifyFilters]::DirectoryName -bor [System.IO.NotifyFilters]::FileName -bor [System.IO.NotifyFilters]::LastAccess -bor [System.IO.NotifyFilters]::LastWrite -bor [System.IO.NotifyFilters]::Security  -bor [System.IO.NotifyFilters]::Size)
    $fsw.EnableRaisingEvents = $True
    $fsw.filter = "*.dat"
    
    # Funktion die alle Ereignisse abarbeitet
    function Global:FileSystemWatcherEventhandler {    
    param($eventArgs)        
    	
    	# Pause Timer berechnen und nur Arbeiten wenn keine Pause ist  
    	If($Global:MyFileSystemWatcherPause.AddSeconds($Global:FileSystemWatcherPauseTimeSeconds) -lt (Get-Date)){       
    	
    		# Pfad der geänderten Datei + aktuelle Zeit an $Var.Änderung übergeben
    		#$Var.Änderung = “{0} am {1:d} geändert!” –f $eventArgs.FullPath, $Event.TimeGenerated.DateTime   ###geht nicht
    		$Var.Änderung = “{0} am {1} geändert!” –f $eventArgs.FullPath, (Get-Date)  
    		
    		#Fenster als Job aufrufen
    		$Job1 = Start-Job -ArgumentList ($Var) -ScriptBlock {
    			
    			# Argument wieder in HashTable casten
    			$VarJob = [HashTable]$args[0]		
    			
    			#Assemblies laden
    			[void] [reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
    			[void] [reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null 
    			
    			#Fenster Grundgerüst
    			$Form = New-Object System.Windows.Forms.Form  
    			$Form.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedToolWindow  
    			$Form.StartPosition = "CenterScreen" 
    			$Form.Size = New-Object System.Drawing.Size(1000,350)
    			#$Form.KeyPreview = $True
    			$Form.Add_KeyDown({if ($_.KeyCode -eq “Enter”) {$OnBTNfswoff_Click}})
    			$Form.Add_KeyDown({if ($_.KeyCode -eq “Escape”) {&$OnBTNexit_Click}})
    
    			
    			#Text: $VarJob.Änderung 
    			$LBLchange = New-Object "System.Windows.Forms.Label"
    			$LBLchange.Text = $VarJob.Änderung 
    			$LBLchange.Font = New-Object System.Drawing.Font("Courier New",10,[System.Drawing.FontStyle]::Regular)
    			$LBLchange.TextAlign = 'MiddleLeft' 
    			$LBLchange.Location = New-Object System.Drawing.Size(10,10) 
    			$LBLchange.Size = New-Object System.Drawing.Size(1000,50)
    
    			#Text: "Änderungsgrund:"
    			$LBLchangereason = New-Object "System.Windows.Forms.Label"
    			$LBLchangereason.Text = "Änderungsgrund:" 
    			$LBLchangereason.Font = New-Object System.Drawing.Font("Courier New",10,[System.Drawing.FontStyle]::Regular)
    			$LBLchangereason.TextAlign = 'MiddleLeft' 
    			$LBLchangereason.Location = New-Object System.Drawing.Size(10,50) 
    			$LBLchangereason.Size = New-Object System.Drawing.Size(950,50)
    			
    			#Eingabe: Änderungsgrund
    			$TBchangereason = New-Object System.Windows.Forms.Textbox 
    			$TBchangereason.Font = New-Object System.Drawing.Font("Courier New",10,[System.Drawing.FontStyle]::Regular)
    			$TBchangereason.Location = New-Object System.Drawing.Size(10,100) 
    			$TBchangereason.Size = New-Object System.Drawing.Size(950,50)
    
    			#Button: FSW ausschalten
    			$BTNfswoff = New-Object System.Windows.Forms.Button 
    			$BTNfswoff.Text = "Überwachung eingeschaltet! Ausschalten?"
    			$BTNfswoff.Font = New-Object System.Drawing.Font("Courier New",10,[System.Drawing.FontStyle]::Regular)
    			$BTNfswoff.TextAlign = 'MiddleLeft'
    			$BTNfswoff.Location = New-Object System.Drawing.Size(10,150) 
    			$BTNfswoff.Size = New-Object System.Drawing.Size(400,50)
    			$BTNfswoff.Add_Click({&$OnBTNfswoff_Click})			
    			
    			#Button: Fenster verlassen
    			$BTNexit = New-Object System.Windows.Forms.Button
    			$BTNexit.Text = "EXIT!"
    			$BTNexit.Font = New-Object System.Drawing.Font("Courier New",10,[System.Drawing.FontStyle]::Regular)
    			$BTNexit.TextAlign = 'MiddleLeft' 
    			$BTNexit.Location = New-Object System.Drawing.Size(450,150) 
    			$BTNexit.Size = New-Object System.Drawing.Size(400,50)
    			$BTNexit.Add_Click({&$OnBTNexit_Click})
    			
    			# Button: FSW ausschalten/einschalten beim Klick
    			$OnBTNfswoff_Click = {
    				If ($VarJob.cnt1 % 2) { # Wenn $VarJob.cnt1 gerade
    				 	# Pausen Zeit  mit der aktuellen Zeit initialisieren
    					$Global:MyFileSystemWatcherPause = Get-Date
    					Write-Host "Überwachung eingeschaltet, Pause gestopt!"
    					$BTNfswoff.Text = "Überwachung eingeschaltet! Ausschalten?"
    					$VarJob.cnt1++
    				}
    				Else { # Wenn $VarJob.cnt1 ungerade
    					# Pausen Zeit  mit der gestrigen Zeit initialisieren
    					$Global:MyFileSystemWatcherPause = (Get-Date).AddDays(-1)
    					Write-Host "Überwachung ausgeschaltet, Pause gestartet!"
    					$BTNfswoff.Text = "Überwachung ausgeschaltet! Einschalten?"
    					$VarJob.cnt1++
    				}	
    			}
    			
    			# Button: Fenster verlassen beim Klick
    			$OnBTNexit_Click = {
    				# Änderungsgrund an $VarJob.Änderungsgrund übergeben
    				$VarJob.Änderungsgrund = $TBchangereason.Text
    				# Fenster schließen
    				$Form.Close()
    				$Form.Dispose()
    			}
    
    			# Elemente einbinden
    			$Form.Add_Load()
    			$Form.Add_Closed()
    			$Form.Controls.Add($BTNfswoff) 
    			$Form.Controls.Add($BTNexit)
    			$Form.Controls.Add($LBLchangereason)
    			$Form.Controls.Add($TBchangereason)
    			$Form.Controls.Add($LBLchange)
    						
    			# Fenster anzeigen
    			$Form.ShowDialog()| Out-Null
    		
    			#Return Hash	
    			$VarJob
    		}
    		
    		#Auf Eingabe warten
    		Wait-Job $Job1
    		
    		#Variablen abholen
    		$Var = [HashTable](Receive-Job $Job1)	
    		
    	} 
    	Else {        
    		# Innerhalb Pause              
    		Write-Host "Pause läuft noch $(($Global:MyFileSystemWatcherPause.AddSeconds($Var.FSWPauseTime) - (Get-Date)).Seconds) Sekunden!"        
    		Write-Host ""   
    		# Funktion verlassen ohne den Rest abzuarbeiten  
    		return
    	}          
    	Write-Host "Betroffene Dateipfad : $($eventArgs.FullPath)"    
    	Write-Host "Betroffene Dateiname : $($eventArgs.Name)"
    	Write-Host "Typ des Ereignis     : $($eventArgs.ChangeType)"  
    	IF($Var.Änderungsgrund -gt ""){
    	Write-Host "Änderungsgrund       :" $Var.Änderungsgrund
    	}
    
    
    
    	# nur die RenamedEventArgs haben die Eigenschaft OldFullPath oder OldName!    
    	If($eventArgs -is [System.IO.RenamedEventArgs]) {            
    		Write-Host "Alter Dateiname : $($eventArgs.OldName)"            
    		Write-Host "Alter Dateipfad : $($eventArgs.OldFullPath)"    
    	}    
    	#"Mach was hier mit dem Ereignis!"
    	Write-Host ""
    }
    
    $OnCreated = {    
    FileSystemWatcherEventhandler($eventArgs)}
    
    $OnChanged = {    
    FileSystemWatcherEventhandler($eventArgs)}
    
    $OnDeleted = {    
    FileSystemWatcherEventhandler($eventArgs)}
    
    $OnRenamed = {    
    FileSystemWatcherEventhandler($eventArgs)}
    
    Register-ObjectEvent -InputObject $fsw -EventName Created -Action $OnCreated 
    Register-ObjectEvent -InputObject $fsw -EventName Changed -Action $OnChanged 
    Register-ObjectEvent -InputObject $fsw -EventName Deleted -Action $OnDeleted 
    Register-ObjectEvent -InputObject $fsw -EventName Renamed -Action $OnRenamed 

    Was auch noch nicht ganz schön ist ist follgende Zeile:

    $Var.Änderung = “{0} am {1} geändert!” –f $eventArgs.FullPath, (Get-Date)  

    Ich möchte in der Form den Pfad der geänderten Datei und den Zeitpunkt der Änderung anzeigen. Ich schaffe es nicht auf  $Event.TimeGenerated.DateTime oder etwa Lastwritetime zuzugreifen. Hat heir einer ne Idee??

    Ich bin für weitere Verbesserungen dankbar :-) Bin noch in der Lernphase....

    Vielen Dank

    Dienstag, 13. Mai 2014 21:14
  • Also das mit der Lastwritetime hab ich nun geschafft, fehlt noch der Rest :-(

    $Var.Änderung = “{0} am {1} geändert!” –f $eventArgs.FullPath, (get-item $eventArgs.FullPath).LastWriteTime

    Dienstag, 13. Mai 2014 22:25
  • Also das Problem ist dieser Block...

    # Button: FSW ausschalten/einschalten beim Klick
    $OnBTNfswoff_Click = {
    	If ($VarJob.cnt1 % 2) { # Wenn $VarJob.cnt1 gerade
    	 	# Pausen Zeit  mit der aktuellen Zeit initialisieren
    		$Global:MyFileSystemWatcherPause = Get-Date
    		Write-Host "Überwachung eingeschaltet, Pause gestopt!"
    		$BTNfswoff.Text = "Überwachung eingeschaltet! Ausschalten?"
    		$VarJob.cnt1++
    	}
    	Else { # Wenn $VarJob.cnt1 ungerade
    		# Pausen Zeit  mit der gestrigen Zeit initialisieren
    		$Global:MyFileSystemWatcherPause = (Get-Date).AddDays(-1)
    		Write-Host "Überwachung ausgeschaltet, Pause gestartet!"
    		$BTNfswoff.Text = "Überwachung ausgeschaltet! Einschalten?"
    		$VarJob.cnt1++
    	}	
    }

    Wie schaffe ich es $Global:MyFileSystemWatcherPause so zu setzen, dass sie ausßerhalb auch erkannt wird?

    Vielen dank schonmal für die Hilfe

    Mittwoch, 14. Mai 2014 13:31
  • Hallo zusammen,

    also das mit dem Hash klappt nun, leider wird aber die Pause nicht ausgeführt...

    Ich kann den Fehler einfach nicht finden...

    Kann mir einer weiterhelfen?

    Hier mal der Code:

    cls
    Unregister-Event *
    
    # Leere HashTable erstellen
    $Var = @{}
    # HashTable füllen
    $Var.Änderungsgrund = ""
    $Var.cnt1 = 0
    $Var.FSWPauseTimeSeconds = 40
    [DateTime]$Var.FSWPause = (Get-Date).AddDays(-1)
    
    # FSW initialisieren
    $fsw = New-Object System.IO.FileSystemWatcher
    $fsw.Path = "E:\Dropbox\powershell\Deltadaten"
    $fsw.IncludeSubdirectories = $False #$True
    $fsw.NotifyFilter =  ([System.IO.NotifyFilters]::Attributes -bor [System.IO.NotifyFilters]::CreationTime -bor [System.IO.NotifyFilters]::DirectoryName -bor [System.IO.NotifyFilters]::FileName -bor [System.IO.NotifyFilters]::LastAccess -bor [System.IO.NotifyFilters]::LastWrite -bor [System.IO.NotifyFilters]::Security  -bor [System.IO.NotifyFilters]::Size)
    $fsw.EnableRaisingEvents = $True
    $fsw.filter = "*.dat"
    
    # Funktion die alle Ereignisse abarbeitet
    function Global:FileSystemWatcherEventhandler {    
    param($eventArgs)        
    
    	If($Var.FSWPause.AddSeconds($Var.FSWPauseTimeSeconds) -lt (Get-Date)){ 
    	
    		# Pfad der geänderten Datei + aktuelle Zeit an $Var.Änderung übergeben  
    		$Var.Änderung = “{0} am {1} geändert!” –f $eventArgs.FullPath, (get-item $eventArgs.FullPath).LastWriteTime
    		
    		#Fenster als Job aufrufen
    		$Job1 = Start-Job -ArgumentList ($Var) -ScriptBlock {
    			
    			# Argument wieder in HashTable casten
    			$VarJob = [HashTable]$args[0]		
    			
    			#Assemblies laden
    			[void] [reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
    			[void] [reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null 
    			
    			#Fenster Grundgerüst
    			$Form = New-Object System.Windows.Forms.Form  
    			$Form.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedToolWindow  
    			$Form.StartPosition = "CenterScreen" 
    			$Form.Size = New-Object System.Drawing.Size(1000,350)
    			$Form.KeyPreview = $True
    			$Form.Add_KeyDown({if ($_.KeyCode -eq “Enter”) {&$OnBTNfswoff_Click}})
    			$Form.Add_KeyDown({if ($_.KeyCode -eq “Escape”) {&$OnBTNexit_Click}})
    
    			
    			#Text: $VarJob.Änderung 
    			$LBLchange = New-Object "System.Windows.Forms.Label"
    			$LBLchange.Text = $VarJob.Änderung 
    			$LBLchange.Font = New-Object System.Drawing.Font("Courier New",10,[System.Drawing.FontStyle]::Regular)
    			$LBLchange.TextAlign = 'MiddleLeft' 
    			$LBLchange.Location = New-Object System.Drawing.Size(10,10) 
    			$LBLchange.Size = New-Object System.Drawing.Size(1000,50)
    
    			#Text: "Änderungsgrund:"
    			$LBLchangereason = New-Object "System.Windows.Forms.Label"
    			$LBLchangereason.Text = "Änderungsgrund:" 
    			$LBLchangereason.Font = New-Object System.Drawing.Font("Courier New",10,[System.Drawing.FontStyle]::Regular)
    			$LBLchangereason.TextAlign = 'MiddleLeft' 
    			$LBLchangereason.Location = New-Object System.Drawing.Size(10,50) 
    			$LBLchangereason.Size = New-Object System.Drawing.Size(950,50)
    			
    			#Eingabe: Änderungsgrund
    			$TBchangereason = New-Object System.Windows.Forms.Textbox 
    			$TBchangereason.Font = New-Object System.Drawing.Font("Courier New",10,[System.Drawing.FontStyle]::Regular)
    			$TBchangereason.Location = New-Object System.Drawing.Size(10,100) 
    			$TBchangereason.Size = New-Object System.Drawing.Size(950,50)
    
    			#Button: FSW ausschalten
    			$BTNfswoff = New-Object System.Windows.Forms.Button 
    			$BTNfswoff.Text = "Überwachung eingeschaltet! Ausschalten?"
    			$BTNfswoff.Font = New-Object System.Drawing.Font("Courier New",10,[System.Drawing.FontStyle]::Regular)
    			$BTNfswoff.TextAlign = 'MiddleLeft'
    			$BTNfswoff.Location = New-Object System.Drawing.Size(10,150) 
    			$BTNfswoff.Size = New-Object System.Drawing.Size(400,50)
    			$BTNfswoff.Add_Click({&$OnBTNfswoff_Click})			
    			
    			#Button: Fenster verlassen
    			$BTNexit = New-Object System.Windows.Forms.Button
    			$BTNexit.Text = "EXIT!"
    			$BTNexit.Font = New-Object System.Drawing.Font("Courier New",10,[System.Drawing.FontStyle]::Regular)
    			$BTNexit.TextAlign = 'MiddleLeft' 
    			$BTNexit.Location = New-Object System.Drawing.Size(450,150) 
    			$BTNexit.Size = New-Object System.Drawing.Size(400,50)
    			$BTNexit.Add_Click({&$OnBTNexit_Click})
    			
    			# Button: FSW ausschalten/einschalten beim Klick
    			$OnBTNfswoff_Click = {
    				If ($VarJob.cnt1 % 2) { # Wenn $VarJob.cnt1 gerade
    				 	# Pausen Zeit  mit der aktuellen Zeit initialisieren
    					$VarJob.FSWPause = (Get-Date).AddDays(-1)
    					#$Global:MyFileSystemWatcherPause = Get-Date
    					Write-Host "Überwachung eingeschaltet, Pause gestopt!"
    					$BTNfswoff.Text = "Überwachung eingeschaltet! Ausschalten?"
    					$VarJob.cnt1++
    				}
    				Else { # Wenn $VarJob.cnt1 ungerade
    					# Pausen Zeit  mit der gestrigen Zeit initialisieren
    					$VarJob.FSWPause = Get-Date
    					#$Global:MyFileSystemWatcherPause = (Get-Date).AddDays(-1)
    					Write-Host "Überwachung ausgeschaltet, Pause gestartet!"
    					$BTNfswoff.Text = "Überwachung ausgeschaltet! Einschalten?"
    					$VarJob.cnt1++
    				}	
    			}
    			
    			# Button: Fenster verlassen beim Klick
    			$OnBTNexit_Click = {
    				# Änderungsgrund an $VarJob.Änderungsgrund übergeben
    				$VarJob.Änderungsgrund = $TBchangereason.Text
    				# Fenster schließen
    				$Form.Close()
    				$Form.Dispose()
    			}
    
    			# Elemente einbinden
    			$Form.Add_Load()
    			$Form.Add_Closed()
    			$Form.Controls.Add($BTNfswoff) 
    			$Form.Controls.Add($BTNexit)
    			$Form.Controls.Add($LBLchangereason)
    			$Form.Controls.Add($TBchangereason)
    			$Form.Controls.Add($LBLchange)
    						
    			# Fenster anzeigen
    			$Form.ShowDialog()| Out-Null
    		
    			#Return Hash	
    			$VarJob
    		}
    		
    		#Auf Eingabe warten
    		Wait-Job $Job1
    		
    		#Variablen abholen
    		$Var = [HashTable](Receive-Job $Job1)	
    	} 
    	Else {        
    		# Innerhalb Pause
    		Write-Host "Pause läuft noch $(( $Var.FSWPause.AddSeconds($Var.FSWPauseTimeSeconds) - (Get-Date)).Seconds) Sekunden!"        
    		Write-Host ""   
    		# Funktion verlassen ohne den Rest abzuarbeiten  
    		return
    	}          
    	Write-Host "Betroffene Dateipfad : $($eventArgs.FullPath)"    
    	Write-Host "Betroffene Dateiname : $($eventArgs.Name)"
    	Write-Host "Typ des Ereignis     : $($eventArgs.ChangeType)"  
    	IF($Var.Änderungsgrund -gt ""){
    	Write-Host "Änderungsgrund       :" $Var.Änderungsgrund
    	}
    
    
    
    	# nur die RenamedEventArgs haben die Eigenschaft OldFullPath oder OldName!    
    	If($eventArgs -is [System.IO.RenamedEventArgs]) {            
    		Write-Host "Alter Dateiname : $($eventArgs.OldName)"            
    		Write-Host "Alter Dateipfad : $($eventArgs.OldFullPath)"    
    	}    
    	#"Mach was hier mit dem Ereignis!"
    	Write-Host ""
    }
    
    $OnCreated = {    
    FileSystemWatcherEventhandler($eventArgs)}
    
    $OnChanged = {    
    FileSystemWatcherEventhandler($eventArgs)}
    
    $OnDeleted = {    
    FileSystemWatcherEventhandler($eventArgs)}
    
    $OnRenamed = {    
    FileSystemWatcherEventhandler($eventArgs)}
    
    Register-ObjectEvent -InputObject $fsw -EventName Created -Action $OnCreated 
    Register-ObjectEvent -InputObject $fsw -EventName Changed -Action $OnChanged 
    Register-ObjectEvent -InputObject $fsw -EventName Deleted -Action $OnDeleted 
    Register-ObjectEvent -InputObject $fsw -EventName Renamed -Action $OnRenamed 

    Vielen Dank

    Mittwoch, 14. Mai 2014 22:47
  • Versuche für Variablen Namen zu benutzen die Rückschlüsse auf den Inhalt zulassen $Var ist nichts sagend!

    Gerade Globale Variablen mit so einem Kurzen Namen könnten schon Existieren. Je länger der Name ist desto unwahrscheinlicher wird es das es eine Variable mit diesem Namen schon gibt.

    Du müsste dich in das Thema Scope einarbeiten.

    Scopes:

    Immer wenn man in PowerShell mit den geschweiften Klammern {} einen Block erstellt, dann wird ein neuer Scope (Bereich) erzeugt.
    Ein Scope (Bereich) bestimmt den Raum indem eine Variable oder ein Objekt sichtbar und Benutzbar ist.
    Man kann sich Scopes wie verschachtelte Räume vorstellen.
    PowerShell hat ein ähnliches „Scope -Gebäude“ wie die meisten bekannten Programmiersprachen.

    Siehe Bild: http://www.powershell-group.eu/wp-content/uploads/2014/04/Powershell_Scopes.png

    oder: Get-Help about_Scopes
    oder: http://technet.microsoft.com/en-US/library/hh847849.aspx

    Der FilesystemWatcher hat einen eigenen Scope.

    Damit er die Hashtable sehen kann muss diese in den Scope des FileSystemWatchers oder in den Globalen Scope gesetzt werden.

    Hier MUSST du JEDESMAL den Scope zugriffsmodifizierer $Global: angeben damit sichergestellt ist das immer die Globale Variable benutzt wird.

    Wird der zugriffsmodifizierer nicht angegeben erstellt PowerShell einen neue (leere) Variable im Lokalen Scope.

    So müsst es gehen (ungetestet):

    cls
    Unregister-Event *
    
    # Leere HashTable erstellen
    $Global:DataHash = @{}
    # HashTable füllen
    $Global:DataHash.Änderungsgrund = ""
    $Global:DataHash.cnt1 = 0
    $Global:DataHash.FSWPauseTimeSeconds = 40
    [DateTime]$Global:DataHash.FSWPause = (Get-Date).AddDays(-1)
    
    # FSW initialisieren
    $fsw = New-Object System.IO.FileSystemWatcher
    $fsw.Path = "E:\Dropbox\powershell\Deltadaten"
    $fsw.IncludeSubdirectories = $False #$True
    $fsw.NotifyFilter =  ([System.IO.NotifyFilters]::Attributes -bor [System.IO.NotifyFilters]::CreationTime -bor [System.IO.NotifyFilters]::DirectoryName -bor [System.IO.NotifyFilters]::FileName -bor [System.IO.NotifyFilters]::LastAccess -bor [System.IO.NotifyFilters]::LastWrite -bor [System.IO.NotifyFilters]::Security  -bor [System.IO.NotifyFilters]::Size)
    $fsw.EnableRaisingEvents = $True
    $fsw.filter = "*.dat"
    
    # Funktion die alle Ereignisse abarbeitet
    function Global:FileSystemWatcherEventhandler {    
      param($eventArgs)        
      
      If($Global:DataHash.FSWPause.AddSeconds($Global:DataHash.FSWPauseTimeSeconds) -lt (Get-Date)){ 
        
        # Pfad der geänderten Datei + aktuelle Zeit an $Global:DataHash.Änderung übergeben  
        $Global:DataHash.Änderung = “{0} am {1} geändert!” –f $eventArgs.FullPath, (get-item $eventArgs.FullPath).LastWriteTime
        
        #Fenster als Job aufrufen
        $Job1 = Start-Job -ArgumentList ($Global:DataHash) -ScriptBlock {
          
          # Argument wieder in HashTable casten
          $VarJob = [HashTable]$args[0]		
          
          #Assemblies laden
          [void] [reflection.assembly]::loadwithpartialname("System.Windows.Forms")
          [void] [reflection.assembly]::loadwithpartialname("System.Drawing")
          
          #Fenster Grundgerüst
          $Form = New-Object System.Windows.Forms.Form  
          $Form.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedToolWindow  
          $Form.StartPosition = "CenterScreen" 
          $Form.Size = New-Object System.Drawing.Size(1000,350)
          $Form.KeyPreview = $True
          $Form.Add_KeyDown({if ($_.KeyCode -eq “Enter”) {&$OnBTNfswoff_Click}})
          $Form.Add_KeyDown({if ($_.KeyCode -eq “Escape”) {&$OnBTNexit_Click}})
          
          
          #Text: $VarJob.Änderung 
          $LBLchange = New-Object "System.Windows.Forms.Label"
          $LBLchange.Text = $VarJob.Änderung 
          $LBLchange.Font = New-Object System.Drawing.Font("Courier New",10,[System.Drawing.FontStyle]::Regular)
          $LBLchange.TextAlign = 'MiddleLeft' 
          $LBLchange.Location = New-Object System.Drawing.Size(10,10) 
          $LBLchange.Size = New-Object System.Drawing.Size(1000,50)
          
          #Text: "Änderungsgrund:"
          $LBLchangereason = New-Object "System.Windows.Forms.Label"
          $LBLchangereason.Text = "Änderungsgrund:" 
          $LBLchangereason.Font = New-Object System.Drawing.Font("Courier New",10,[System.Drawing.FontStyle]::Regular)
          $LBLchangereason.TextAlign = 'MiddleLeft' 
          $LBLchangereason.Location = New-Object System.Drawing.Size(10,50) 
          $LBLchangereason.Size = New-Object System.Drawing.Size(950,50)
          
          #Eingabe: Änderungsgrund
          $TBchangereason = New-Object System.Windows.Forms.Textbox 
          $TBchangereason.Font = New-Object System.Drawing.Font("Courier New",10,[System.Drawing.FontStyle]::Regular)
          $TBchangereason.Location = New-Object System.Drawing.Size(10,100) 
          $TBchangereason.Size = New-Object System.Drawing.Size(950,50)
          
          #Button: FSW ausschalten
          $BTNfswoff = New-Object System.Windows.Forms.Button 
          $BTNfswoff.Text = "Überwachung eingeschaltet! Ausschalten?"
          $BTNfswoff.Font = New-Object System.Drawing.Font("Courier New",10,[System.Drawing.FontStyle]::Regular)
          $BTNfswoff.TextAlign = 'MiddleLeft'
          $BTNfswoff.Location = New-Object System.Drawing.Size(10,150) 
          $BTNfswoff.Size = New-Object System.Drawing.Size(400,50)
          $BTNfswoff.Add_Click({&$OnBTNfswoff_Click})			
          
          #Button: Fenster verlassen
          $BTNexit = New-Object System.Windows.Forms.Button
          $BTNexit.Text = "EXIT!"
          $BTNexit.Font = New-Object System.Drawing.Font("Courier New",10,[System.Drawing.FontStyle]::Regular)
          $BTNexit.TextAlign = 'MiddleLeft' 
          $BTNexit.Location = New-Object System.Drawing.Size(450,150) 
          $BTNexit.Size = New-Object System.Drawing.Size(400,50)
          $BTNexit.Add_Click({&$OnBTNexit_Click})
          
          # Button: FSW ausschalten/einschalten beim Klick
          $OnBTNfswoff_Click = {
            If ($VarJob.cnt1 % 2) { # Wenn $VarJob.cnt1 gerade
              # Pausen Zeit  mit der aktuellen Zeit initialisieren
              $VarJob.FSWPause = (Get-Date).AddDays(-1)
              #$Global:MyFileSystemWatcherPause = Get-Date
              Write-Host "Überwachung eingeschaltet, Pause gestopt!"
              $BTNfswoff.Text = "Überwachung eingeschaltet! Ausschalten?"
              $VarJob.cnt1++
            }
            Else { # Wenn $VarJob.cnt1 ungerade
              # Pausen Zeit  mit der gestrigen Zeit initialisieren
              $VarJob.FSWPause = Get-Date
              #$Global:MyFileSystemWatcherPause = (Get-Date).AddDays(-1)
              Write-Host "Überwachung ausgeschaltet, Pause gestartet!"
              $BTNfswoff.Text = "Überwachung ausgeschaltet! Einschalten?"
              $VarJob.cnt1++
            }	
          }
          
          # Button: Fenster verlassen beim Klick
          $OnBTNexit_Click = {
            # Änderungsgrund an $VarJob.Änderungsgrund übergeben
            $VarJob.Änderungsgrund = $TBchangereason.Text
            # Fenster schließen
            $Form.Close()
            $Form.Dispose()
          }
          
          # Elemente einbinden
          $Form.Add_Load()
          $Form.Add_Closed()
          $Form.Controls.Add($BTNfswoff) 
          $Form.Controls.Add($BTNexit)
          $Form.Controls.Add($LBLchangereason)
          $Form.Controls.Add($TBchangereason)
          $Form.Controls.Add($LBLchange)
          
          # Fenster anzeigen
          $Form.ShowDialog()| Out-Null
          
          #Return Hash	
          $VarJob
        }
        
        #Auf Eingabe warten
        Wait-Job $Job1
        
        #Variablen abholen
        $Var = [HashTable](Receive-Job $Job1)	
      } 
      Else {        
        # Innerhalb Pause
        Write-Host "Pause läuft noch $(( $Var.FSWPause.AddSeconds($Var.FSWPauseTimeSeconds) - (Get-Date)).Seconds) Sekunden!"        
        Write-Host ""   
        # Funktion verlassen ohne den Rest abzuarbeiten  
        return
      }          
      Write-Host "Betroffene Dateipfad : $($eventArgs.FullPath)"    
      Write-Host "Betroffene Dateiname : $($eventArgs.Name)"
      Write-Host "Typ des Ereignis     : $($eventArgs.ChangeType)"  
      IF($Var.Änderungsgrund -gt ""){
        Write-Host "Änderungsgrund       :" $Var.Änderungsgrund
      }
      
      
      
      # nur die RenamedEventArgs haben die Eigenschaft OldFullPath oder OldName!    
      If($eventArgs -is [System.IO.RenamedEventArgs]) {            
        Write-Host "Alter Dateiname : $($eventArgs.OldName)"            
        Write-Host "Alter Dateipfad : $($eventArgs.OldFullPath)"    
      }    
      #"Mach was hier mit dem Ereignis!"
      Write-Host ""
    }
    
    $OnCreated = {    
    FileSystemWatcherEventhandler($eventArgs)}
    
    $OnChanged = {    
    FileSystemWatcherEventhandler($eventArgs)}
    
    $OnDeleted = {    
    FileSystemWatcherEventhandler($eventArgs)}
    
    $OnRenamed = {    
    FileSystemWatcherEventhandler($eventArgs)}
    
    Register-ObjectEvent -InputObject $fsw -EventName Created -Action $OnCreated 
    Register-ObjectEvent -InputObject $fsw -EventName Changed -Action $OnChanged 
    Register-ObjectEvent -InputObject $fsw -EventName Deleted -Action $OnDeleted 
    Register-ObjectEvent -InputObject $fsw -EventName Renamed -Action $OnRenamed 


    PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    auf der deutschsprachigen PowerShell Community

    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+

    • Als Antwort markiert Mitsch86 Donnerstag, 15. Mai 2014 09:21
    Donnerstag, 15. Mai 2014 07:47
  • Hallo,

    vielen dank für die Antwort... Das hat mir sehr viel weiter geholfen!

    Es waren zwar noch einpaar Fehler drin, die konnte ich aber sehr schnell beheben!!

    Vielen dank nochmals

    Donnerstag, 15. Mai 2014 09:23