alice1011
Goto Top

VBS Ordner auf neue XML-Dateien überwachen, diese bearbeiten und Powershell-Script ausführen

Hallo,

ich brauche Hilfe für Automatisierung eines Prozesses.

Für Profis unter euch soll's sicherlich kein Problem sein, doch für mich ist es schon mit Aufwand verbunden folgendes Problem zu lösen, besonders beim xml-Parsen:

Ein Ordner auf dem Netzwerklaufwerk soll (per .bat?) überwacht werden und wenn in diesem neue .xml-Dateien auftauchen, diese einzeln laden und prüfen,

ob z.B. <objectID>123</objectID> = "123" ist, und wenn es der Fall ist, soll ein Powershell-Script ausgeführt werden, an den solche Werte wie

<language>de</language> und <name>Manuel Müller</name> aus der .xml-Datei an den Script weitergeleitet werden müssen, z.B. als Variablen language="de" usw.


Danke voraus!

Grüße

Alice

Content-Key: 177308

Url: https://administrator.de/contentid/177308

Printed on: April 23, 2024 at 16:04 o'clock

Member: micneu
micneu Dec 12, 2011 at 13:02:51 (UTC)
Goto Top
moin,

den ordner kannst du auch direkt aus powershell überwachen, powershell hat dafür eine funktion.
denke das sollte alles nicht das mega problem sein, ist denke ich alles in powershell lösbar.

so oder ähnlich könnte das in powershell sein mit dem prüfen ob was im verzeichnis ist.
(noch anzupassen)
#   **************************************************************
#   foulder-check
#
#    einmal auf der powershell ausgeführt werden
#     "Set-ExecutionPolicy Unrestricted"  
#   **************************************************************
#    
#   **************************************************************
#   * Angepasst M.N. - POWERSHELL / Entwicklung   19.11.2010      *
#   * 
#   **************************************************************

$ErrorActionPreference = 'SilentlyContinue'  

$destinationpath = "C:\Temp\11"  
$sourcepath = "C:\Temp"  
$NoFiles = "2"  
$fsw = New-Object System.IO.FileSystemWatcher
$T = (Get-ChildItem $destinationpath).count
$fsw.Path = $sourcepath
$result = $fsw.WaitForChanged("All")  
$result

if ($T -eq $null) {
    $files= Get-ChildItem -name $sourcepath | select -First $NoFiles
    $files
    foreach ($File in $Files) {
        echo "copy-item '$sourcepath\$File' '$destinationpath'"  
    }
  }

kannst ja mal eine .xml posten

gruß michael
Member: micneu
micneu Dec 12, 2011 at 13:06:59 (UTC)
Goto Top
habe gerade nochmal geschjaut, es scheint auch ganz einfach zu sein xml daten zu bearbeiten/auszulesen:
schau mal hier http://www.heise.de/ix/artikel/Datenzugriff-506816.html

gruß michael
Member: alice1011
alice1011 Dec 12, 2011 at 14:06:16 (UTC)
Goto Top
Hallo Michael,

danke schon mal! Werde es gleich direkt testen.

XML hat folgende Form:

<EINKAUF>
<ARTIKEL id="123456" ident="ID_OBJECT">
			<ATTRIBUTE id="LOGON_USER" ident="ID_ATTRIBUTE">
				<ATTRIBUTE_VALUE>USERID\M810126</ATTRIBUTE_VALUE>
			</ATTRIBUTE>
			<ATTRIBUTE id="EMAIL" ident="ID_ATTRIBUTE">
				<ATTRIBUTE_VALUE>max.musterman@muster.com</ATTRIBUTE_VALUE>
			</ATTRIBUTE>
			<ATTRIBUTE id="WEBSITEADRESSE" ident="ID_ATTRIBUTE">
				<ATTRIBUTE_VALUE>http://website.com/ID_1032</ATTRIBUTE_VALUE>
			</ATTRIBUTE>
			<ATTRIBUTE id="MENUSPRACHE" ident="ID_ATTRIBUTE">
				<ATTRIBUTE_VALUE>englisch</ATTRIBUTE_VALUE>
			</ATTRIBUTE>
</ARTIKEL>
<ARTIKEL id="123458" ident="ID_OBJECT">
			<ATTRIBUTE id="LOGON_USER" ident="ID_ATTRIBUTE">
				<ATTRIBUTE_VALUE>USERID\M810121</ATTRIBUTE_VALUE>
			</ATTRIBUTE>
			<ATTRIBUTE id="EMAIL" ident="ID_ATTRIBUTE">
				<ATTRIBUTE_VALUE>marta.musterman@muster.com</ATTRIBUTE_VALUE>
			</ATTRIBUTE>
			<ATTRIBUTE id="WEBSITEADRESSE" ident="ID_ATTRIBUTE">
				<ATTRIBUTE_VALUE>http://website.com/ID_1033</ATTRIBUTE_VALUE>
			</ATTRIBUTE>
			<ATTRIBUTE id="MENUSPRACHE" ident="ID_ATTRIBUTE">
				<ATTRIBUTE_VALUE>deutsch</ATTRIBUTE_VALUE>
			</ATTRIBUTE>
</ARTIKEL>
</EINKAUF>

Davon brauche ich ARTIKEL id="123456" und alle Values von Attributes.

So lese ich dann die Werte aus:

$doc=[xml](Get-Content test.xml)
$artikelid=$doc.EINKAUF.ARTIKEL.id

oder

$sprache=$doc.EINKAUF.ARTIKEL.ATTRIBUTE[3].ATTRIBUTE_VALUE
Member: printerman
printerman Jan 10, 2012 at 10:17:33 (UTC)
Goto Top
Ich habe ein ähnliches Problem und keine Ahnung wie ich Anfangen soll.

Es gibt eine uralte Anwendung die XMLDAteien zum Ausdrucken in einen Ordner zur Verfügung stellt.
Leider kommen wir nicht an den Quellcode und die Weiterverarbeitung an den Drucker soll nun
auf den "neusten" Stand gebracht werden. Es soll nach und nach umgestelt werden daher habe ich zwar folgende
Idee aber keine Ahnung von Programmierung.
Ich hoffe das mir hier einer helfen kann und bedanke mich für jeden Tipp.

Ich muss einen Ordner überwachen in dem ständig neue XML-Dateien eingestellt werden.
In den XML-Dateien muss ich den Parameter Label (layoutfile) auslesen damit ich in einem Ordner(Layouts2) diese Datei suchen kann.
Sollte die Datei vorhanden sein muss ich den Parameter von .lfe in z.B. .lbl abändern und die gespeicherte Datei in
einen anderen Ordner verschieben.(Ordner XMLAusdruck2)(dort ist ein Tool welches die Weiterverarbeitung aufnimmt)

Sollte die Datei nicht vorhanden sein muss die XML-Datei unverändert in einen anderen Ordner geschoben werden(Ordner XMLAusdruck).
Dort wird sie wie "früher" dann abgearbeitet.


Die XML Dateien sehen so wie diese hier aus:


<?xml version="1.0" encoding="utf-8"?>
<XMLwatchPrintJob Label="Etikett Karton VE.lfe" Printer="TEC B-572" Port="192.168.1.39:raw2">

<Ausdruck1 Copies="3">

<Artbez>KXXL Set 12tlg</Artbez>
<ArtNr>55.07.033</ArtNr>
<CodNr>051010</CodNr>
<Packnorm>1</Packnorm>
<TeileNr>09051010004</TeileNr>

</Ausdruck1>
</XMLwatchPrintJob>


Danke und Gruß
Michael