Archive for the ‘Coding’ Category

Powershell Webclient DownloadString

Tuesday, June 4th, 2013

Ich beschäftige mich momentan auf der Arbeit ein wenig mit Powershell und ich muss sagen als alter .Net’er es gefällt mir echt sehr gut. Erinnert mich stark an C# hat allerdings wesentlich weniger Overhead für kleinere Anwendungen.

Außerdem finde ich das Powershell für eine Scriptsprache echt sehr mächtig ist.

So nun zum Thema wie lese ich eine Webseite mit einer Webclient in Powershell aus.

Eigentlich eine sehr einfache Sache:


$webclient = new-object System.Net.WebClient

$webpage = $webclient.DownloadString( "url")

Wir erstellen einen Webclient und laden mit Hilfe von webclient.DownloadString dem wir als Parameter die URL geben den Text der Webseite herunter.

Nun gehen wir aber einen Schritt weiter. Wir haben einen Webservice der eine Authentifizierung fordert und wollen auf die Daten die dahinter liegen mit unserem Powersehllscipt zu greifen:

$webclient = new-object System.Net.WebClient
$credCache = new-object System.Net.CredentialCache
$creds = new-object System.Net.NetworkCredential("Benutzername","Password")

$credCache.Add( "URL", "Basic", $creds)
$webclient.Credentials = $credCache

$webpage = $webclient.DownloadString( URL")

Was in diesem Fall hinzu gekommen ist, ist der CrendetialCache dem mit der Add Methode einfach die URL den Authentifizierungstyp und ein Object vom Typ System.Net.NetworkCrendential mit den Parametern unserer Anmeldung zugewiesen wird.

Anschließend müssen wir unseren CrendetialCache nur noch dem WebClient zuweisen um dann auf die Webseite zugreifen zu können.

Zum Schluss komme ich noch zu einem Problem, dass mich eine Zeit lang Beschäftigt hat. Wenn ihr beim Aufrufen der Webseite den folgenden Fehler bekommt:

Ausnahme beim Aufrufen von “DownloadString” mit 1 Argument(en): “Der Server hat eine Protokollverletzung ausgeführt..
Section=ResponseHeader Detail=Auf CR muss LF folgen”

Hab ich für euch auch eine Lösung gefunden:

if($netAssembly)
{
 $bindingFlags = [Reflection.BindingFlags] "Static,GetProperty,NonPublic"
 $settingsType = $netAssembly.GetType("System.Net.Configuration.SettingsSectionInternal")

 $instance = $settingsType.InvokeMember("Section", $bindingFlags, $null, $null, @())

 if($instance)
 {
 $bindingFlags = "NonPublic","Instance"
 $useUnsafeHeaderParsingField = $settingsType.GetField("useUnsafeHeaderParsing", $bindingFlags)

 if($useUnsafeHeaderParsingField)
 {
 $useUnsafeHeaderParsingField.SetValue($instance, $true)
 }
 }
}

Einfach den Code vor eueren WebClient kopieren.
Dadurch wird das useUnsafeHeaderPasing für die Laufzeit des Scriptes auf True gesetzt wodurch der Fehler nicht mehr auf tritt.

Nagios 2.0 Teil 2

Tuesday, July 3rd, 2012

Erst mal gibt es dazu zu sagen ES FUNKTIONIERT!!!111

Die Kommunikation von der Website die momentan mit PHP läuft und dem WPF / C# Server läuft sehr geschmeidig. Sobald der Server gestartet ist kann man mit der Website momentan folgende Daten auslesen

Die CPU auszulesen ist meiner Meinung nach ein bisschen hakelig und Funktioniert auch erst nach dem Zweitem aktualisieren. Das liegt daran, dass die Funktion die ich zum auslesen verwende mindestens zwei Ergebnisse braucht um eine Korrekte CPU-Auslastung an zu zeigen. Das sollte aber mit einer schleife schnell zu lösen sein.

Die Anzahl der Prozesse ist relativ leicht ausgelesen. Was ich da allerdings noch gerne hinzu fügen würde, ist die Funktionalität, dass wenn man auf die Spalte “Anzahl der Prozesse” klickt die Prozesse angezeigt werden.

Das ganze will ich so lösen, dass eine TCP-Anfrage gesendet wird sobald man die Spalte anklickt und dann erst die Prozesse abgefragt werden. Das macht die ganze Geschichte dann auch schön interaktiv.

Ein weiteres ToDo ist die Oberfläche des Servers so gestallten das man einstellen kann was ausgelesen wird und ähnliches.

Also in dem Sinne Lets Code!!!!11

 

 

 

Nagios 2.0 Teil 1

Tuesday, June 26th, 2012

So das hier ist mein erstes Projekt-Tagebuch.

Es geht um ein Programm, das ich jetzt erst mal Nagios 2.0 nenne. Mir fällt einfach kein treffender Name ein. Für alle, die Nagios noch nicht kennen, das ist ein Tool mit dem man einen Server bzw. einen Rechner überwachen kann. Dabei geht es nicht um eine Überwachung im Staatstrojaner Style, sondern um das einfache überwachen von CPU Temperatur, Festplattenspeicher und ist der Job auch wirklich gelaufen, auf einem Server.

Da ich eh schon immer mal eine Wollmilch legende Eiersau basteln wollte, die ein Programm im Hintergrund laufen hat, während die Ergebnisse des Programms in einer Webfront angezeigt wrden, habe ich mir gedacht, dass ist ein schönes Projekt für so ein Thema.

Weil ich mir aber gedacht habe diese ganze Sache, dass die Daten in eine SQL Tabelle rein geschrieben und anschließend auf der Webfront nur noch abgerufen werden ist langweilig. Deshalb habe ich mir ein anderes Konzept ausgedacht:

Konzeptzeichnung

Das ganze soll komplett ohne Datenbank auskommen und mit Hilfe von Sockets miteinander kommunizieren. Wie gut das ganze funktioniert sehe ich dann wohl im Laufe des Projektes. Was alles ausgelesen wird, ist wohl eine Frage der Zeit die ich in das Projekt investieren will. Aber wohl auf jeden Fall Dinge wie CPU-Last, Festplattenspeicher, …. Ich glaube da sind meiner Fantasy keine Grenzen gesetzt.

Also dann lets Code!!!111