Jump to content

FileSystemWatcher Ausgabe (Logfile) anders ausgeben


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Moin Leute

 

Nehmen wir an, es gibt einen Parentfolder mit dem Namen "Parentfolder". Im Parentfolder befinden sich weitere wichtige Ordner zb. Ordner01, Ordner02, etc. In diesen Unterordnern befinden sich nochmal weitere Ordner zb. Unterorder01, Unterordner02, etc. Wenn jemand den Unterorder01 verschiebt oder löscht, erscheint in einem Logfile "Parentfolder was changed at zb 14:00 Uhr".

Nun zu meiner Frage. Ist es möglich das bei der Ausgabe (logfile) nicht der höchste Ordner (Parentfolder) sondern wie oben zb Ordner01 erscheint? Es ist einfach so, das bei uns sehr viele Ordner existieren und wen immer nur der "Parentfolder" angezeigt wird, hilft dies auch nicht weiter weil stündlich Sachen in den Ordnern gemacht werden.

Link zu diesem Kommentar

sollte möglich sein:

 

https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher(v=vs.100).aspx

Use FileSystemWatcher to watch for changes in a specified directory. You can watch for changes in files and subdirectories of the specified directory. You can create a component to watch files on a local computer, a network drive, or a remote computer.

 

FileSystemWatcher.IncludeSubdirectories Property

https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.includesubdirectories(v=vs.100).aspx

Link zu diesem Kommentar

Ich bräuchte es für ein Script. Das heisst PowerShell:)

 

 

Ich bräuchte es für ein Script. Das heisst PowerShell:)

 

 

 

Der Quellcode bis jetzt:

 

$folder = 'C:\Users\Testuser\Desktop\ScriptOrdner\' # Enter the root path you want to monitor.

$filter = '*.*'  # You can enter a wildcard filter here.

 

# In the following line, you can change 'IncludeSubdirectories to $true if required.                          

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

 

# Here, all three events are registerd.  You need only subscribe to events that you need:

 

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

Out-File -FilePath C:\Users\Testuser\Desktop\Outlog.txt -Append -InputObject "The file '$name' was $changeType at $timeStamp"}

 

Register-ObjectEvent $fsw Deleted -SourceIdentifier FileDeleted -Action {

$name = $Event.SourceEventArgs.Name

$changeType = $Event.SourceEventArgs.ChangeType

$timeStamp = $Event.TimeGenerated

Write-Host "The file '$name' was $changeType at $timeStamp" -fore red

Out-File -FilePath C:\Users\Testuser\Desktop\Outlog.txt -Append -InputObject "The file '$name' was $changeType at $timeStamp"}

 

Register-ObjectEvent $fsw Changed -SourceIdentifier FileChanged -Action {

$name = $Event.SourceEventArgs.Name

$changeType = $Event.SourceEventArgs.ChangeType

$timeStamp = $Event.TimeGenerated

Write-Host "The file '$name' was $changeType at $timeStamp" -fore white

Out-File -FilePath C:\Users\Testuser\Desktop\Outlog.txt -Append -InputObject "The file '$name' was $changeType at $timeStamp"}

ich denke, du hast ein Skript mit FSW?

btw: die Links beschreiben die FSW-Klasse in .Net.  .Net ist universal einsetzbar auch in PS.

 

Quellcode:

 

$folder = 'C:\Users\Testuser\Desktop\ScriptOrdner\' # Enter the root path you want to monitor.

$filter = '*.*'  # You can enter a wildcard filter here.

 

# In the following line, you can change 'IncludeSubdirectories to $true if required.                          

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

 

# Here, all three events are registerd.  You need only subscribe to events that you need:

 

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

Out-File -FilePath C:\Users\Testuser\Desktop\Outlog.txt -Append -InputObject "The file '$name' was $changeType at $timeStamp"}

 

Register-ObjectEvent $fsw Deleted -SourceIdentifier FileDeleted -Action {

$name = $Event.SourceEventArgs.Name

$changeType = $Event.SourceEventArgs.ChangeType

$timeStamp = $Event.TimeGenerated

Write-Host "The file '$name' was $changeType at $timeStamp" -fore red

Out-File -FilePath C:\Users\Testuser\Desktop\Outlog.txt -Append -InputObject "The file '$name' was $changeType at $timeStamp"}

 

Register-ObjectEvent $fsw Changed -SourceIdentifier FileChanged -Action {

$name = $Event.SourceEventArgs.Name

$changeType = $Event.SourceEventArgs.ChangeType

$timeStamp = $Event.TimeGenerated

Write-Host "The file '$name' was $changeType at $timeStamp" -fore white

Out-File -FilePath C:\Users\Testuser\Desktop\Outlog.txt -Append -InputObject "The file '$name' was $changeType at $timeStamp"}

 

 

Kann mir irgendwie nicht vorstellen wie das gehen sollte:/ ja mit FSW

Link zu diesem Kommentar

Dann beschäftige dich ein bischen mit .Net Scripting in Powershell. Dann kannst du alle Properties und Methods der Klasse nutzen.

Ich habe jedenfalls keine Zeit dazu, dir dein Script fein zu tunen. Tipps natürlich jederzeit gerne!

 

Ich will auch nicht das du mein ganzes Script fertig schreibst. Das ist nur ein Teil davon. Hättest mir nur diesen kleinen Teil machen können. Trotzdem Danke

Link zu diesem Kommentar

- Warum versuchst du es nicht einfach selbst? Du hast doch in deinem Script oben bereits mit der Integration von .Net angefangen. Mit dem Scripting von .Net Klassen erlangst eine Fähigkeit, die dir mindestens die nächsten 5 Jahre weiter hilft!

- "Functions" erleichtern Scripting übrigens erheblich.

- Auch dieser "kleine Teil" würde mich in Gänze mindestens zwei Stunden meiner Freizeit kosten. Da bitte ich dich um Verständnis.

Link zu diesem Kommentar
function New-FSWEvent
{
  param
  (
    
    # Enter the root path you want to monitor.
    [Parameter(Mandatory,ValueFromPipelineByPropertyName)]
    [String]
    $Folder,
    
    # You can enter a wildcard filter here.
    [Parameter(ValueFromPipelineByPropertyName)]
    [String]
    $Filter = '*.*',

    [Parameter(ValueFromPipelineByPropertyName)]
    [Switch]
    $IncludeSubdirectories = $false

  )
 
  # In the following line, you can change 'IncludeSubdirectories to $true if required.                          
  $fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{IncludeSubdirectories = $IncludeSubdirectories;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'}
 
  # Here, all three events are registerd.  You need only subscribe to events that you need:
  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
    Out-File -FilePath C:\Users\Testuser\Desktop\Outlog.txt -Append -InputObject "The file '$name' was $changeType at $timeStamp"
  }
 
  Register-ObjectEvent $fsw Deleted -SourceIdentifier FileDeleted -Action
  {
    $name = $Event.SourceEventArgs.Name
    $changeType = $Event.SourceEventArgs.ChangeType
    $timeStamp = $Event.TimeGenerated
    Write-Host "The file '$name' was $changeType at $timeStamp" -fore red
    Out-File -FilePath C:\Users\Testuser\Desktop\Outlog.txt -Append -InputObject "The file '$name' was $changeType at $timeStamp"
  }
 
  Register-ObjectEvent $fsw Changed -SourceIdentifier FileChanged -Action
  {
    $name = $Event.SourceEventArgs.Name
    $changeType = $Event.SourceEventArgs.ChangeType
    $timeStamp = $Event.TimeGenerated
    Write-Host "The file '$name' was $changeType at $timeStamp" -fore white
    Out-File -FilePath C:\Users\Testuser\Desktop\Outlog.txt -Append -InputObject "The file '$name' was $changeType at $timeStamp"
  }
}

Ich kann mich blub nur anschließen. Ein Skript dauert auch für geübte durchaus etwas länger bis es fehlerfrei funktioniert ;-) Um dir zu helfen, habe ich deinen angegebenen Quellcode in eine Funktion gepackt, die du so oft wie gewünscht aufrufen kannst. Nun brauchst du nur noch eine Schleife die die richtigen Funktionsaufrufe übernimmt.

 

EDIT: Ich habe dieses Skript nicht getestet, sondern nur deinen Quellcode verpackt.

bearbeitet von MurdocX
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...