Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Wert aus Webseite auslesen

Frage Entwicklung Batch & Shell

Mitglied: Gundelputz

Gundelputz (Level 1) - Jetzt verbinden

06.06.2013 um 12:13 Uhr, 4482 Aufrufe, 16 Kommentare, 6 Danke

ein freundliches Hallo an alle,

ich möchte einen Wert(Zählerstand Drucker) aus der Webseites des Gerätes auslesen. Bis jetzt habe ich es aber nur geschaft die Webseite aus zu lesen.
$objWebClient = (New-Object System.Net.WebClient)
$objWebClient.DownloadString("http://10.2.38.79/cgi-bin/dynamic/printer/config/reports/devicestatisti ...")
es wird mir dann Zeile für Zeile angezeigt.
Speicher ich alles in einer txt so wird dort der Zeilenumbruch nicht mitgeschrieben.

1. Frage: Wie kann ich eine TXT oder CSV mit Zeilenumbuch speichern

in Zeile 125 steht der Wert(2425) den ich benötige
<TR><td><p align="left" style="margin-left: 40;">Gesamt</p></td><td><p> 2425 </p></td>

2. Frage: Wie kann ich den Wert auslesen denn ich benötige
Danke schon mal im vorraus
Mitglied: Gundelputz
06.06.2013 um 12:53 Uhr
vergesst die erste Frage. in einer csv siets gut aus. drauch mir als bloss den String aus Zeile 125 ein zu lesen und dann zerlegen. hier stosse ich aber an meine Grenzen.
ich übergebe den String also in eine Variable. anschliessend müsste ich dann mit Get-Matches den String auswerten. Leider finde ich im handbuch nichts passendes.

$zaehler = $string | Get-Matches "(??????)"

kann mir mal jemand den Befehl erklähren?
Bitte warten ..
Mitglied: IceAge
06.06.2013, aktualisiert um 13:05 Uhr
servus,

warum so kompliziert? könntest doch auch den Zähler mit smnpget auslesen..

Grüße Ice
Bitte warten ..
Mitglied: Gundelputz
06.06.2013 um 13:11 Uhr
Dies war mein ürsprunglicher Ansatz. Siehe "Wert aus Webseite auslesen".
Leider hat mir Da Lexmark, mit seinen neuen Farbsystemen, einen Strich durch die Rechnung gemacht. Da können die neuen OID's nich mehr mit smnpget abgrufen werden. Also nun dieser Weg. sit zwar etwas komplizierter aber nicht ganz unmöglich.
Bitte warten ..
Mitglied: colinardo
06.06.2013, aktualisiert um 13:37 Uhr
Hallo Gundelputz,
mit Regular Expressions und einer optimierten Funktion mit Group-Matching kannst du deinen gewünschten String extrahieren:

01.
Function Get-Matches($Pattern,$groupNumber = 0) {begin { $regex = New-Object Regex($pattern) };process { foreach ($match in ($regex.Matches($_))) { ([Object[]]$match.Groups)[$groupNumber].Value }}} 
02.
 
03.
$string = Get-Content "C:\DeineTextdatei.txt" 
04.
$zaehler = $string | Get-Matches "Gesamt<\/p><\/td><td><p> ?(\d+) ?<\/p><\/td>" 1
Grüße Uwe
Bitte warten ..
Mitglied: Gundelputz
06.06.2013 um 13:33 Uhr
Hi Uwe,
vom verstehen des Befehls binich noch weit entfehrnt aber habs natürlich gleich mal ausprobiert mit folgendem Ergebnis

PS H:\> Function Get-Matches($Pattern,$groupNumber = 0) {begin { $regex = New-Object Regex($pattern) };process { foreach ($match in ($regex.Matches($_))) { ([Object[]]$match.Groups)[$groupNumber].Value }}}
$string = Get-Content "C:\PS_proj\site1.txt"
$zaehler = $string | Get-Matches "$Textdatei | Get-Matches "Gesamt<\/p><\/td><td><p> (\d+) <\/p><\/td>" 1" 1

Der Operator "<" wird noch nicht unterstützt.
At line:3 char:92

kann es sein das PS einige Sonderzeichen als Operator erkennt(wie zB für den Beginn einer Variable) und wenn ja wie muss man es das schreiben das sies nicht mehr interpretiert wird?
Bitte warten ..
Mitglied: colinardo
06.06.2013, aktualisiert um 13:50 Uhr
Da hast du den Code zu schnell kopiert ... war noch ein Fehler drin ... komme gerade vom Holz machen , da hat man noch zu dicke Finger ... jetzt gehts

Nochmal zum Verständnis:

1. Funktion für das Regular Expression Group-Matching
Diese Funktion braucht dich im Moment nicht sehr zu interessieren, diese behebt so manche Ungereimtheiten beim Umgang mit RegEx in der Powershell und erlaubt das einfache extrahieren von Teilen aus einem String. Aufgerufen wird die Funktion so $textInDemGesuchtWird | Get-Matches "[REGEX-Pattern]" [Regex-Groupnumber]
function Get-Matches($Pattern,$groupNumber = 0) { 
  begin { $regex = New-Object Regex($pattern) } 
  process { foreach ($match in ($regex.Matches($_))) { ([Object[]]$match.Groups)[$groupNumber].Value } } 
}
Bitte warten ..
Mitglied: Gundelputz
06.06.2013 um 13:45 Uhr
bekomme trotzdem Fehlermeldung:

Der Operator "<" wird noch nicht unterstützt.
At line:14 char:92

Der Zeichenfolge, beginnend mit:
Bei Zeile:14 Zeichen:103

$zaehler = $string | Get-Matches "$Textdatei | Get-Matches "Gesamt<\/p><\/td><td><p> (\d+) <\/p><\/td> <<<< " 1

fehlt der Terminator: ".
At line:17 char:1

hab den Cod mal angepasst bekomme dann andere Fehlermeldung

Function Get-Matches($Pattern,$groupNumber = 0)
{begin
{
$regex = New-Object Regex($pattern) };
process
{
foreach ($match in ($regex.Matches($_)))
{
([Object[]]$match.Groups)[$groupNumber].Value
}
}
}
$string = Get-Content "C:\PS_proj\site1.txt"
$zaehler = $string | Get-Matches "$Textdatei | Get-Matches "Gesamt"<"\/p"><"\/td"><"td"><"p">" (\d+) "<"\/p"><"\/td">"1"

Der Zeichenfolge, beginnend mit:
Bei Zeile:14 Zeichen:120

$zaehler = $string | Get-Matches "$Textdatei | Get-Matches "Gesamt"<"\/p"><"\/td"><"td"><"p">" (\d+) "<"\/p"><"\/td">"1 <<<< "

fehlt der Terminator: ".
At line:14 char:122
Bitte warten ..
Mitglied: colinardo
06.06.2013, aktualisiert um 13:48 Uhr
Lade die Seite mal neu ich glaube dein Browser hat noch den alten Cache geladen ....das ist noch der alte Code
und bitte benutze doch die Formatierungs-Codes für Programm-Code hier im Forum; siehe FAQ
Bitte warten ..
Mitglied: Gundelputz
06.06.2013 um 14:01 Uhr
jetzt passt es Super. Sogar besser als erwartet.

PS H:\> Function Get-Matches($Pattern,$groupNumber = 0)
{begin
{
$regex = New-Object Regex($pattern) };
process
{
foreach ($match in ($regex.Matches($_)))
{
([Object[]]$match.Groups)[$groupNumber].Value
}
}
}
$string = Get-Content "C:\PS_proj\site1.txt"
$zaehler = $string | Get-Matches "Gesamt<\/p><\/td><td><p> ?(\d+) ?<\/p><\/td>" 1


_______________________________________________________________________________________________________________________________________________
PS H:\> Function Get-Matches($Pattern,$groupNumber = 0)
{begin
{
$regex = New-Object Regex($pattern) };
process
{
foreach ($match in ($regex.Matches($_)))
{
([Object[]]$match.Groups)[$groupNumber].Value
}
}
}
$string = Get-Content "C:\PS_proj\site1.txt"
$zaehler = $string | Get-Matches "Gesamt<\/p><\/td><td><p> ?(\d+) ?<\/p><\/td>" 1
$zaehler

2340
1103
1322

wie du sehen kannst spuckt er mir genau die drei Werte aus die ich haben will. mir ist jetzt klar das es das Suchergebnis drei mal giebt. Nun stelllen sich mir gleich wieder ein paar Fragen.
der Syntax ?(\d+) wie darf ich denn verstehen oder besser gesagt wo finde ich im Handbuch die Erklärung dazu?
Die andere Frage die ich mir stelle ist: wird das ergebnis 3x nach einnander ausgegeben? Und wie fange ich diese in seperaten Variablen ab?

So viele Fragen und noch soviel zu lehrnen und zu verstehen?
Wieder ein mal bin ich dir zu Dank verpflichtet.
Bitte warten ..
Mitglied: colinardo
06.06.2013, aktualisiert um 14:12 Uhr
Zitat von Gundelputz:
der Syntax ?(\d+) wie darf ich denn verstehen oder besser gesagt wo finde ich im Handbuch die Erklärung dazu?
Das hier zu erläutern würde den Rahmen sprengen, zu Regular Expressions gibt es genug Tutorials im Netz z.B. hier
Zur Erläuterung [Leerzeichen]?(\d+)[Leerzeichen]? ,würde man es ausschreiben sähe das so aus:

6cd5a913b1955e112e68dc05682f0580 - Klicke auf das Bild, um es zu vergrößern

Die andere Frage die ich mir stelle ist: wird das ergebnis 3x nach einnander ausgegeben? Und wie fange ich diese in seperaten
Variablen ab?
dazu muss das RegEx entsprechend dem Code angepasst werden, damit jeweils nur die entsprechende Stelle gematcht wird, das kann ich jetzt aber nur raten da dein HTML-Code hier nicht steht.
Ein gutes Tool zum Anfangen mit RegEx-Patterns, ist das hier -> http://www.regexbuddy.com/
Bitte warten ..
Mitglied: Gundelputz
06.06.2013 um 14:39 Uhr
OK
mir raucht schon der Kopf.
hab jetzt mal zu Testzwecken einfach die Ausgabe in eine TXT geleitet.
hier stehen jetzt die Werte seperat in einer Zeile was mich zu der Annahme bringt dasdie werte nach ein nander ausgegeben werden.
Um jetzt ers mal weiter zu kommen noch eine(für heute hoffentlich) letzte Frage.
Wie kann ich die einzelnen Zeilen der txt-datei auslesen und in sep. Variablen speichern.
Bitte warten ..
Mitglied: colinardo
06.06.2013, aktualisiert um 14:55 Uhr
Leite doch die Ausgabe nicht in eine Textdatei sondern mach das direkt mit der Variable $zaehler
z.B. so (Zur Info: `n ist ein Zeilenumbruch)
01.
$var1 = $zaehler.split("`n")[0] 
02.
$var2 = $zaehler.split("`n")[1] 
03.
$var3 = $zaehler.split("`n")[2]
tu langsam zu viel auf einmal macht dich kirre...
Uwe
Bitte warten ..
Mitglied: Gundelputz
06.06.2013 um 14:59 Uhr
sah super aus
aber offennsichtlicht wird .split nich unterstüzt

Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "split" enthält.
Bei C:\PS_proj\website_auswerten.ps1:18 Zeichen:23

$var1 = $zaehler.split <<<< ("`n")[0]

+ CategoryInfo : InvalidOperation: (split:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
Bitte warten ..
Mitglied: colinardo
06.06.2013 um 15:05 Uhr
ach,.... ist ja schon ein Array dann geht's so:

01.
$var1 = $zaehler[0] 
02.
$var2 = $zaehler[1]
usw.
Bitte warten ..
Mitglied: Gundelputz
06.06.2013 um 15:10 Uhr
so einfach kann es sein.
hab mir schon gedacht das es was mit nem Array zu tun hat. aber nicht das es schon eins ist. wollte gerade ein draus machen und bin gescheitert.

so. Jetzt müsste ich aber einiges zusammen haben um ne Weile beschäftigt zu sein.

Vielen Dank für deine schnelle und kompetente Hilfe.
Bitte warten ..
Mitglied: colinardo
06.06.2013, aktualisiert um 15:19 Uhr
gerne, noch zu Arrays - die erstellt man so:

Leeres Array erstellen
01.
$array = @()
Array schon mit Werten erstellen
01.
$array = @("wert1","wert2,"wert3")
Zu einem Array einen Eintrag hinzufügen
01.
$array += "NeuerWert"
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
VB for Applications
gelöst VBA: Wert von einer Website (pdf-Dokument) auslesen und in Excel kopieren (16)

Frage von Stern123 zum Thema VB for Applications ...

Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Batch & Shell
gelöst Appx aus Image auslesen und entfernen (9)

Frage von Markus2016 zum Thema Batch & Shell ...

Linux Desktop
Webseite aufgerufen - Linux gehackt (5)

Link von BirdyB zum Thema Linux Desktop ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Router & Routing
gelöst Empfehlung günstiges ADSL2+ nur Modem (10)

Frage von TimMayer zum Thema Router & Routing ...

Server-Hardware
Lenovo Server System X 3650 M5 Festplatten (9)

Frage von Hendrik2586 zum Thema Server-Hardware ...