Fragensteller
daten aus dem verzeichnis auslesen mit powershell

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
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
-
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
-
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
-
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
-
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 -
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 -
-
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
-
$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
-
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!!! :-)
-
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
-
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?
-
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
-
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"
-
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
-
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') -
> 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 danneher nervt), oder die Threads zerfasern jeweils in unterschiedlicheRichtungen. Bleib bitte bei einem Thread...Und lies Dich in Powershell-Grundlagen ein :)