none
daten aus dem verzeichnis auslesen mit powershell RRS feed

  • Frage

  • hi,

    habe heute das 1 mal mit powershell zu tun. ich soll mit powershell_ise ein skript erstellen aus einer xml datei!

    also: da steht so einiges drin in der xml datei und ich soll datum und uhrzeit in eine seperaten logfile schreiben?!! glaube als text dokument.. bin selber praktikant..

    Irgendwie mit dem befehl get-childitem aba mehr weiss i au ned :)

    bitte um hilfe lg

    Montag, 21. März 2016 08:40

Alle Antworten

  • Hi,

    verstehe ich das richtig, dass du aus mehreren XML-Dateien Datum und Uhrzeit auslesen sollst und dieses in ein separates Logfile schreiben sollst?

    Dazu brauchen wir aber mehr Infos, z.B. wie sieht die Struktur des XML-Files aus usw..

    Gruß

    Christian


    Christian Groebner MVP Forefront

    Montag, 21. März 2016 09:29
  • ja richtig. aus mehreren xml dateien. das sind arztberichte und darf ich nicht veröffentlichen.

    also hab so angefangen: get-ChildItem -Path xxx -recurse -Force

    jetzt zeigt er mir bei ps_ise alle xml dateien von dem path an! mit datum und uhrzeit schon..

    was die aufgabe ist, das angezeigte in einem logfile zu schreiben. als text doku anscheinend.

    hoffe du kannst mir dabei helfen?

    Danke! lg


    • Bearbeitet kemal_84 Montag, 21. März 2016 09:54
    Montag, 21. März 2016 09:41
  • Hi,

    schau mal hier:

    $dateien = Get-ChildItem -Path "C:\temp\xml" -Include "*.xml" -Recurse
    
    
    foreach ($datei in $dateien)
    {
    
       $dummy = [xml](Get-Content -Path $datei.FullName)
    
       $dummy.bericht.datum 
    
    
    }

    das XML würde dann so aussehen.

    <bericht>
     <datum>01.03.2016</datum>
     <titel>Bla2</titel>
    </bericht>

    Gruß

    Christian


    Christian Groebner MVP Forefront

    Montag, 21. März 2016 09:49
  • Ich glaub er meint das Änderungsdatum der XMLs :-)
     > foreach ($datei in $dateien)
     > {
           $datei.LastWriteTime
     >     $dummy = [xml](Get-Content -Path $datei.FullName)
     >     $dummy.bericht.datum
     > }
     
    Montag, 21. März 2016 10:02
  • Auch eine Möglichkeit :-)

    $dateien = Get-ChildItem -Path "C:\temp\xml" -Include "*.xml" -Recurse
    
    
    foreach ($datei in $dateien)
    {
      
      $dummy =  $datei.Name + " : " + $datei.LastWriteTime
       
      $dummy | Out-File -FilePath "C:\temp\xml\log.txt" -Append 
    
    }


    Christian Groebner MVP Forefront

    Montag, 21. März 2016 10:14
  • also das sind die ganzen xml dateien mit datum und uhrzeit und ich hab nen ordner angelegt was logfiles heisst! da soll das einfach alles rein..
    Montag, 21. März 2016 10:15
  • PS C:\Windows\system32> }
    At line:1 char:1
    + }
    + ~
    Unexpected token '}' in expression or statement.
        + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
        + FullyQualifiedErrorId : UnexpectedToken
     

    PS C:\Windows\system32> }
    At line:1 char:1
    + }
    + ~
    Unexpected token '}' in expression or statement.
        + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
        + FullyQualifiedErrorId : UnexpectedToken
    Montag, 21. März 2016 10:24
  • PS C:\Windows\system32> }
    At line:1 char:1
    + }
    + ~
    Unexpected token '}' in expression or statement.
        + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
        + FullyQualifiedErrorId : UnexpectedToken
     

    PS C:\Windows\system32> }
    At line:1 char:1
    + }
    + ~
    Unexpected token '}' in expression or statement.
        + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
        + FullyQualifiedErrorId : UnexpectedToken

    das is die fehler meldung. meine xml dateien sin da drin d:\kemal test xml und sollen da rein d:kemal test xml\logfiles
    Montag, 21. März 2016 10:25
  • Wie schaut dein Code denn jetzt aus?

    Christian Groebner MVP Forefront

    Montag, 21. März 2016 10:30
  • imma noch so:

    Get-ChildItem -Path 'D:\Kemal test xml' -recurse -Force

    das was angezeigt wird, soll in den ordner 'D:\Kemal test xml\logfiles'

    Montag, 21. März 2016 10:37
  • $dateien = Get-ChildItem -Path "C:\temp\xml" -Include "*.xml" -Recurse
    
    
    foreach ($datei in $dateien)
    {
      
      $dummy =  $datei.Name + " : " + $datei.LastWriteTime
       
      $dummy | Out-File -FilePath "C:\temp\xml\log.txt" -Append 
    
    }


    Christian Groebner MVP Forefront

    Montag, 21. März 2016 10:44
  • ok. ich nehme jetzt an das man mehr wie bei beispiel umschreiben muss..

    den -path "d:\kemal test xml" (und) -Include "d:kemal test xml\logfiles"

    ind den out-file -filepath "d:kemal test xml\logfiles" ändern muss. mehr weiss i aba au ned..!

    was muss i da noch alles ändern? weil sonst bekomm i ne fehlermeldung


    Montag, 21. März 2016 10:53
  • $dateien = Get-ChildItem -Path "d:\kemal test xml" -Include "*.xml" -Recurse
    
    foreach ($datei in $dateien)
    {
      
      $dummy =  $datei.Name + " : " + $datei.LastWriteTime
       
      $dummy | Out-File -FilePath "d:\kemal test xml\logfiles\log.txt" -Append 
    
    }


    Christian Groebner MVP Forefront

    Montag, 21. März 2016 11:22
  • tausend dank hat klappt :) !!!

    Get-ChildItem -Path 'D:\Kemal test xml' -Recurse | Out-File -filepath 'D:\Kemal test xml\Logfiles\log.txt' -Append -Encoding ASCII

    das \log.txt hatte gefählt :) 

    danke!! lg

    Montag, 21. März 2016 11:39
  • hi,

    ich hab jetzt das geschrieben:

    Get-ChildItem -Path 'D:\Kemal test xml\XML' | SELECT CreationTime, name | Format-Table -AutoSize | Out-File -filepath 'D:\Kemal test xml\Logfiles\log.txt'   .

    Also: in den order XML kommen täglich xml dateien rein (get-ChildItem). wenn das passiert soll das geschriebene skript automatisch es in den logfiles\log.txt schreiben ohne das man es mit f8 jedesmal durchlaufen lassen muss!

    und es soll jedentag eine neue log.txt erstellen!!

    Bitte um eure hilfe..!!!  Danke!!! :-)

    Montag, 21. März 2016 15:55
  • Hi,

    du musst den Dateinamen dann zusammensetzen und in einer Variablen speichern:

    $filename = "C:\temp\log\" +((Get-Date).ToString("yyyy_MM_dd"))+".txt" 

    und dann den Teil mit Out-File wie folgt anpassen:

    out-file -filepath $filename

    Damit das Skript jeden Tag ausgeführt wird speicherst du es auf dem Rechner ab und führst es am besten per geplanten Task aus.

    Gruß

    Christian


    Christian Groebner MVP Forefront

    Montag, 21. März 2016 16:05
  • jetzt hab i versucht das in mein

    Get-ChildItem -Path 'D:\Kemal test xml\XML' | SELECT CreationTime, name | Format-Table -AutoSize | Out-File -filepath 'D:\Kemal test xml\Logfiles\log.txt'

    reinzupacken aba weiss nicht worein..  :( !!

    was is der $filename und am ende das .txt? muss i da was ergänzen?

    Montag, 21. März 2016 16:17
  • Das ist der ganze Code:
    $filename = "D:\Kemal test xml\XML\log\" +((Get-Date).ToString("yyyy_MM_dd"))+".txt
    
    Get-ChildItem -Path 'D:\Kemal test xml\XML' | SELECT CreationTime, name | Format-Table -AutoSize | Out-File -filepath $filename


    Christian Groebner MVP Forefront

    Montag, 21. März 2016 18:41
  • danke für die antwort :)

    habs jetzt so gemacht aber beim + vor dem ((get-date)  zeigt er nen fehler an!

    Get-ChildItem -Path 'D:\Kemal test xml\XML' | SELECT CreationTime, name | Format-Table -AutoSize | Out-File -filepath 'D:\Kemal test xml\Logfiles\log\'+((Get-Date).ToString("yyyy_MM_dd"))+"log.txt"

    Dienstag, 22. März 2016 09:34
  • Hi,

    man muss auch nicht alles in eine Zeile Packen ;-)

    Wenn du den Teil nach -FilePath in Klammern setzt, dann geht das:

    Get-ChildItem -Path 'D:\Kemal test xml\XML' | SELECT CreationTime, name | Format-Table -AutoSize | Out-File -filepath ('D:\Kemal test xml\Logfiles\log\'+((Get-Date).ToString("yyyy_MM_dd"))+"log.txt")
    

    Gruß

    Christian


    Christian Groebner MVP Forefront

    Dienstag, 22. März 2016 09:42
  • hi,

    das script sollte jetzt über powershell gestartet werden und dann im hintergrund für immer am server laufen!! es startet aber nicht oder funzt nich..

    ich soll function einbauen!! weiss jemand was das ist?

    lg


     
    #This script uses the .NET FileSystemWatcher class to monitor file events in folder(s).
    #The advantage of this method over using WMI eventing is that this can monitor sub-folders.
    #The -Action parameter can contain any valid Powershell commands.  I have just included two for example.
    #The script can be set to a wildcard filter, and IncludeSubdirectories can be changed to $true.
    #You need not subscribe to all three types of event.  All three are shown for example.
    # Version 1.1


    Start-Job -filepath 'D:\Kemal test xml\Brudy überwachung test2.ps1'

    function global:fileChanged ($text) {
    Write-Host "This is the filechanged function, globally defined!"
    Write-Host $text

    }

    #Set-ExecutionPolicy Unrestricted

    # To stop the monitoring, run the following commands:
    #Unregister-Event FileDeleted
    #Unregister-Event FileCreated
    #Unregister-Event FileChanged

    Unregister-Event -SourceIdentifier *

    Register-CimIndicationEvent -Query "SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE
    TargetInstance ISA 'CIM_DataFile' AND (TargetInstance.Drive='D:' AND TargetInstance.Path='\\Kemal test xml\\XML\\' AND TargetInstance.Extension='xml')" -Action {
    Get-ChildItem -Path 'D:\Kemal test xml\XML' | SELECT CreationTime, name | Format-Table -AutoSize | Out-File -filepath ('D:\Kemal test xml\Logfiles\log'+((Get-Date).ToString("yyyy_MM_dd"))+'.txt')
    }
     
    $folder = 'D:\Kemal test xml\XML' # 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 = $true;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 "$timeStamp   $name  $changeType" -fore green
    Out-File -FilePath ('D:\Kemal test xml\Logfiles\log'+((Get-Date).ToString("yyyy_MM_dd"))+'.txt') -Append -InputObject "$timeStamp  $name  $changeType"}

     
    Register-ObjectEvent $fsw Deleted -SourceIdentifier FileDeleted -Action {
    $name = $Event.SourceEventArgs.Name
    $changeType = $Event.SourceEventArgs.ChangeType
    $timeStamp = $Event.TimeGenerated
    Write-Host "$timeStamp   $name  $changeType" -fore red
    Out-File -FilePath ('D:\Kemal test xml\Logfiles\log'+((Get-Date).ToString("yyyy_MM_dd"))+'.txt') -Append -InputObject "$timeStamp  $name  $changeType"}

     
    Register-ObjectEvent $fsw Changed -SourceIdentifier FileChanged -Action {
    $name = $Event.SourceEventArgs.Name
    $changeType = $Event.SourceEventArgs.ChangeType
    $timeStamp = $Event.TimeGenerated
    Write-Host "$timeStamp   $name  $changeType" -fore white
    Out-File -FilePath ('D:\Kemal test xml\Logfiles\log'+((Get-Date).ToString("yyyy_MM_dd"))+'.txt') -Append -InputObject "$timeStamp  $name  $changeType"}

    #Get-ChildItem -Path 'D:\Kemal test xml\XML' | SELECT CreationTime, name | Format-Table -AutoSize | Out-File -filepath ('D:\Kemal test xml\Logfiles\log'+((Get-Date).ToString("yyyy_MM_dd"))+'.txt')
    Donnerstag, 31. März 2016 12:55
  • >     ich soll function einbauen!! weiss jemand was das ist?
     
    Es ist relativ sinnfrei, wenn Du Deine Fragen in mehreren Foren postest
    - entweder sind es die gleichen Leute, die mitlesen (und die das dann
    eher nervt), oder die Threads zerfasern jeweils in unterschiedliche
    Richtungen. Bleib bitte bei einem Thread...
     
     
    Und lies Dich in Powershell-Grundlagen ein :)
     
    Donnerstag, 31. März 2016 15:47
  • ja stimmt total nervig.. sry..

    habs fertig gestellt und mit taskShedule im hintergrund laufen jetzt! die function war überflüssig..

    Danke für eure Hilfe!!! :) hab jetzt lehr videos bekommen über ps von v2b viedeos..

    lg

    Freitag, 1. April 2016 11:50