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!

Recommended Posts

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 to comment

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 to comment

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 to comment

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 to comment

- 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 to comment
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.

Edited by MurdocX
Link to comment
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...