Archive for the ‘Coding’ Category

Powershell für den einfachen Webzugriff um Dienste im Web aufzurufen oder XML-Dokumente zu laden

24 Mai 2011

Bei einem Kunden sollte in regelmäßigen Abständen eine bestimmte Webseite aufgerufen werden um einen bestimmten Prozess anzustoßen. Gleichzeitig sollte später hin und wieder ein XML-Dokument abgeholt werden. Dank Powershell und dem .Net-Framework lässt sich die Aufgabe sehr einfach realisieren.

Serverdienst aufrufen, einfache Methode

$url = "http://www.service-site-im-internet.de/blabla?usw"
# Endlosschleife
do {
  $html = "";
  $html = (New-Object  System.Net.WebClient).DownloadString($url);
  Write-Host($html.Replace("<BR>", "`n"));
  Start-Sleep –Seconds 360
} while ($true)

Der Aufruf bei Replace ersetzt einen HTML-Umbruch durch einen Zeilenumbruch in Powershell. Näheres zu den Escape-Sequenzen und Zeichen in Powershell findet man unter

get-help about_escape_charachters

und

get-help about_special_characters

Serverdienst aufrufen, mit mehr Kontrolle

Ein Problem mit der einfachen Methode über die WebClient-Klasse http://msdn.microsoft.com/de-de/library/tt0f69eh.aspx ist, dass man nicht so einfach bestimmte sinnvolle Parameter setzen kann. Es gibt noch eine bessere Möglichkeit den Dienst aufzurufen. Mittels WebRequest-Klasse: http://msdn.microsoft.com/de-de/library/5t9y35bd(v=VS.80).aspx

$request = [System.Net.WebRequest]::Create($url)

Jetzt bekommt man jede Menge Infos in $request zurück. Wichtig: $request ist vom Typ HttpWebRequest und nicht mehr WebRequest! Genauso bekommt man FtpWebRequest, wenn man anstatt http: eben ftp: verwendet. Nun kann man zusätzlich jede Menge Parameter für den Aufruf setzen, wie UserAgent oder Passwörter usw.

Mittels

$response = $request.GetResponse()

erfolgt der eigentliche Aufruf. In $response gibt das Property Statuscode den HTTP-Statuscode zurück. Allerdings ist jetzt OK nicht so prickelnd, also verwendet man [int] vorneweg um den Code in einem schönen Zahlenwert zu bekommen.

$response.Statuscode
[int]$response.Statuscode

Hinweis: Wenn es Probleme gibt und das Script scheint zu hängen, bitte den $request.Timeout Wert beachten, dieser ist in der Vorgabe auf 100 Sekunden eingestellt! Also Geduld oder den Wert vor dem Aufruf runtersetzen.

Noch etwas mehr Kontrolle bei Fehlern

Tja leider ist das aber nur die halbe Wahrheit, denn wenn nun die durch $url angesprochene Ressource nicht verfügbar ist, dann wirbelt einem eine WebException entgegen und dann sieht ein Script schnell alt aus. Dies betrifft übrigens auch die erste einfache Variante.

Aus diesem Grund kapselt man den Aufruf von GetResponse() oder DownloadString() in einen try-catch Block.

Somit könnte obiger Aufruf so aussehen:

try {
  $response = $request.GetResponse()
}
catch [System.Net.WebException] {
  if ($_.Exception.Response.StatusCode –eq "404")
        {Write-Host "Seite nicht gefunden " + $_.Exception.Status}
}

#wichtig mit Close die Verbindung wieder freigeben!
$response.Close()

Nicht offensichtlich aber doch vorhanden, kann man die Response- sowie Status-Eigenschaften http://msdn.microsoft.com/de-de/library/system.net.webexception.response(v=VS.80).aspx bzw. http://msdn.microsoft.com/de-de/library/system.net.webexception.status(v=VS.80).aspx abfragen. Damit hat man die volle Kontrolle und kann auf alles reagieren.

XML-Dokument abholen

Ein XML-Dokument aus dem Internet abzuholen ist genauso einfach und erlaubt sogar den direkten Zugriff auf die einzelnen Elemente des XML-Dokuments.

$url = "http://www.infos-aus-dem-internet.de/hole-mir-die-datei.xml"
[xml]$xmldoc=(Net-Object System.Net.WebClient).DownloadString($url)

Wenn man z. B. folgendes XML-Dokument hat

<?xml version="1.0"?>
<COMPUTERNAME>
    TESTER
    <IP-ADDRESS>91.12.31.250</IP-ADDRESS>
    <PUBLISHED>
        <DATE>20.05.2011</DATE>
        <TIME>14:55:16</TIME>
    </PUBLISHED>
</COMPUTERNAME>

kann nachdem das Dokument geladen wurde, mittels

$xmldoc.COMPUTERNAME

auf das Element COMPUTERNAME zugegriffen werden. Auf die Ip-Adresse kann man mittels

$xmldoc.COMPUTERNAME.’IP-ADDRESS‘

zugreifen. Ein Zugriff auf

$xmldoc.COMPUTERNAME.IP-ADDRESS

ist nicht möglich, da der Bindestrich von Powershell anders interpretiert wird und sozusagen -ADDRESS als Parameter gesehen wird.

Daten zum Leben erwecken

Da die Daten aus der XML-Datei einfach nur leblose Daten, also Strings sind, kann man sie mittels einfachen Konvertierungsfunktionen zur vollen Blüte bringen.

Mittels

[DateTime]::Parse($xmldoc.COMPUTERNAME.PUBLISHED.DATE)

oder gleich

[DateTime]::Parse($xmldoc.COMPUTERNAME.PUBLISHED.DATE + " " + $xmldoc.COMPUTERNAME.PUBLISHED.TIME)

bekommt man ein Datumsobjekt geliefert, mit dem man nach Herzenslust danach arbeiten kann. Info zu Parse: http://msdn.microsoft.com/en-us/library/1k1skd40.aspx

Das gleiche Spiel kann man auch mit der IP-Adresse anstellen:

[IPAddress]::Parse($xml.COMPUTERNAME.’IP-ADDRESS‘)

Weitere Infos zu IPAddress.Parse() http://msdn.microsoft.com/de-de/library/system.net.ipaddress.parse(v=VS.80).aspx

Advertisements

Top Einführung in PNRP per NETSH

22 Mai 2011

Was man mit den Clouds von PNRP bei IPv6 alles anstellen, zeigt sehr einfach dieser Screencast: http://channel9.msdn.com/Blogs/SlickThought/Peer-to-Peer-Series-Part-1-Intro-to-PNRP

Daneben wird auch die komplette Programmierung über das .Net-Framework gezeigt:
http://channel9.msdn.com/Blogs/SlickThought/Peer-to-Peer-Series-Part-2-Registering-Names-with-PNRP-API

Datei Hashes wie CRC-32, MD5, SHA1 oder SHA256 unter Windows erstellen

8 Dezember 2010

Dieses Tool erstellt erstellt Datei Hashes für beliebige Dateien unter Windows und da es in C# geschrieben wurde, steht es auch auf anderen Plattformen wie Mono zur Verfügung: http://blogs.msdn.com/b/delay/archive/2010/12/06/hash-for-the-holidays-managed-implementation-of-crc32-and-md5-algorithms-updated-new-release-of-computefilehashes-for-silverlight-wpf-and-the-command-line.aspx

Interessante Icon Sets

22 Juli 2010

Wird mal wieder für einen Link zu interessanten Iconsets: http://www.aha-soft.com/index.htm. Hier finden sich vor allem ziemlich vielfältige Icons und nicht immer das eine in tausend Varianten.

Frühere Links: https://newyear2006.wordpress.com/2010/06/21/openclipart-icons-und-grafiken/

neue Icon Sammlungen

28 März 2010

Hier gibt es eine neue, freie Iconsammlung: http://www.centigrade.de/en/blog/article/free-medical-icons/. In einem anderen Beitrag wird auf Aspekte bei XAML Icons eingegangen: http://www.centigrade.de/en/blog/article/resolution-independent-icon-design-part-4-modern-tool-support/

Früher Iconsammlungen: https://newyear2006.wordpress.com/2009/05/18/icon-sammlungen-2/

Tabellen oder Bereiche aus Excel vorlesen lassen

11 Januar 2010

Hier ein Stückchen Code welcher beliebige Zahlen- bzw. Datenreihen aus Excel vorließt:

Option Explicit

Public Sub Vorlesen()

    Dim objSpeaker As Object
    Dim cell As Range
    Set objSpeaker = CreateObject("SAPI.SpVoice")
    Set objSpeaker.Voice = objSpeaker.GetVoices("Name=Microsoft Anna").Item(0)
    objSpeaker.Volume = 100
    For Each cell In Range("C2:C180")   ‚ hier steht der Zellenbereich
        objSpeaker.Speak cell.Text
    Next
    Set objSpeaker = Nothing
End Sub

Einfach ein Modul hinzufügen und den Code einfügen und über das Direktfenster Vorlesen aufrufen. Der Code wurde auf Excel 2007 unter Windows 7 getestet und hat problemlos funktioniert. Sollte eigentlich bis hinunter zu Excel 2000 funktionieren, solange der Rechner mit SAPI ausgestattet ist.

In diesem Zusammenhang war enttäuschend zu sehen, das Microsoft auch bei Windows 7 immer noch keinen Codec für eine deutsche Stimme mitliefert. So verhilft dies der Technologie nie zum Durchbruch, von Texterkennung per Spracheingabe ganz zu schweigen.

Debugging von .Net Framework Anwendungen wie WPF und WinForms und sogar Silverlight

7 Januar 2010

Immer mehr Programme verwenden das .Net Framework in seinen verschiedenen Ausprägungen. Was aber tun wenn ein Programm nicht funktioniert und sich nur mit einem Fehlerreport an MS verabschiedet?

Man kann mit dem Debugger WinDBG auf das betreffende Programm losgehen.

Eine kleine Einführung mit Beispiel wird hier beschrieben: http://blog.codemurai.de/2009/09/04/WinDbgTutorialFehlerursachenFin
denTeil1EinerSerie.aspx
. Das Beispiel geht aber von einer laufenden Anwendung aus, auf die man sich aufschalten möchte.

Oftmals hat man jedoch den Fall, dass man eine Anwendung startet und es kommt gleich die entsprechende Crashmeldung. Bei dieser Situation startet man zuerst WinDBG und ruft dann das zu startende Programm über File->Open Executable auf. In diesem Fall bekommt man bei Aufruf von

.loadby sos mscorwks

allerdings die Meldung “unable to find module” angezeigt.

Das laden des Moduls kann man mit dem Befehl

sxe ld:mscorlib
g
.loadby sos mscorwks

erzwingen.

Danach funktioniert das Debuggen wie unter obigem Blogeintrag beschrieben.

Hinweis: Diejenigen mit langsamer Internetverbindung müssen sich aber beim ersten Aufruf der Funktionen in WinDBG gedulden, da zuerst die nötigen Symboldateien heruntergeladen werden müssen.

Weitere nützliche WinDBG Befehle für SOS findet man hier:
http://geekswithblogs.net/.netonmymind/archive/2006/03/14/72262.aspx

sowie in der offiziellen Referenz unter: http://msdn.microsoft.com/de-de/library/bb190764.aspx

Man kann sogar Silverlight Anwendungen damit debuggen: http://debuggingblog.com/wp/2009/06/02/silverlight-with-better-production-debugging-support-sosdll-in-coreclr-better-than-mscorwks/

Open Source Icon Library

28 September 2009

Viele Open Source Projekte benötigen auch Icons. Dazu gibt es die Tango Icon Library aus der sich viele Open Source Programme bedienen: http://tango.freedesktop.org/Tango_Desktop_Project.

Andere kommerzielle Icon Sammlungen sind hier verlinkt: https://newyear2006.wordpress.com/2009/05/18/icon-sammlungen-2/

Noch mehr Preview Handler für Windows Vista und Windows 7

12 August 2009

Im Artikel https://newyear2006.wordpress.com/2009/07/24/xps-zip-xml-sowie-xaml-im-vorschaufenster-unter-windows-vista-oder-windows-7/ hab ich schon Mal über die Möglichkeit der Erweiterung der des Vorschaufenster zur schnellen Dateiinhaltansicht geschrieben.

Mit diesem Download werden noch mehr Formate unterstützt: http://blog.tatham.oddie.com.au/2006/12/20/vista-and-office-2007-preview-handler-pack-released/

XPS, ZIP, XML sowie XAML im Vorschaufenster unter Windows Vista oder Windows 7

24 Juli 2009

Nachdem nun unter Windows 7 das Vorschaufenster offensichtlicher zu sehen ist, wird wohl der eine oder andere das Vorschaufenster häufiger nutzen, als noch unter Windows Vista.

Warum Microsoft gerade aber bei der Unterstützung von Formaten für das Vorschaufenster so geschlampt hat, ist ein Rätsel.

Auf jeden Fall kann man die fehlenden Formate ganz einfach nachrüsten, indem man (blöderweise) die J# 2.0 Runtime und die eigentlichen Previewhandler installiert.

J# Runtime: http://msdn.microsoft.com/en-us/vjsharp/bb188598.aspx

Previewhandler: http://download.microsoft.com/download/f/2/7/f279e71e-efb0-4155-873d-5554a0608523/PreviewHandlers2007_01.exe

Den Sourcecode dazu gibts unter http://msdn.microsoft.com/en-us/magazine/cc163487.aspx.

Wer noch mehr braucht: http://blogs.msdn.com/toub/archive/2007/03/27/dllpreviewhandler-for-windows-vista.aspx#comments