Archive for Juni 2011

Einfacher HTTP-Server in Powershell

27 Juni 2011

Ein einfacher HTTP-Server direkt in Powershell realisiert http://paws.codeplex.com/. Enthält auch einige Beispiel für Directory und Bilder-Services.

Noch einfacheres Beispiel mit httpListener hier: http://ps1.soapyfrog.com/2007/01/24/webserver-and-rsh-in-powershell/

Advertisements

Hyper-V Probleme mit eingefrorener Maus durch ausgelaufene Zertifikate

20 Juni 2011

Per Zufall bin ich auf diesen Artikel gestoßen: http://www.mcbsys.com/techblog/2011/06/hyper-v-certificate-will-expire-within-30-days/ welcher auf http://support.microsoft.com/kb/2413735 Bezug nimmt.

Da wie immer nicht ganz klar ist, ob das Probleme evtl. mit SP1 gefixt wurde, wurde die Liste der Problembehebungen mittels https://newyear2006.wordpress.com/2011/06/06/powershell-abfrage-ob-ein-bestimmter-kb-artikel-bzw-hotfix-im-service-pack-1-fr-windows-7-oder-server-2008-r2-enthalten-ist/ durchsucht und dieser KB-Artikel war nicht dabei.

Also ist davon auszugehen, dass das Problem aktuell jeden Hyper-V Server treffen kann.

Powershell und Byte Array sowie Hex Funktionen

20 Juni 2011

Sehr hilfreiche Funktionen für Byte Arrays und Hex Funktionen in Powershell findet man in diesem Blog-Eintrag. Unter anderem auch wie man mit Little- und Big-Endian umgeht, UTF-Encoding, Ausgabe als Hex-String usw. Alles sinnvolle Funktionen.

http://www.sans.org/windows-security/2010/02/11/powershell-byte-array-hex-convert

OneNote mit Powershell bearbeiten

19 Juni 2011

Mal wieder so ein Ding wo Powershell mit seinen Möglichkeiten strahlt. Wer OneNote kennt wird irgendwann auch mal den Wunsch haben, mit Powershell darauf zuzugreifen.

Nun gibt es schon seit einiger Zeit einen Powershell-Provider für OneNote. http://bdewey.com/2007/07/18/onenote-powershell-provider/. Weitere Infos gibts es hier http://powershell.com/cs/blogs/tobias/archive/2008/10/10/extending-powershell-with-snapins-and-microsoft-onenote.aspx. Aber es muss ja nicht immer gleich ein externes Snapin sein, wenn man nur mal schnell etwas probieren möchte.

In diesen Beispielen wird Onenote 2010 mit Powershell 2.0 benutzt.

Also gehts wie immer ganz einfach los:

$onenote = New-Object Microsoft.Office.Interop.Onenote.ApplicationClass

Damit enthält $oneNote ein COM-Objekt. Die in Frage kommenden Objekte deren Methoden und Properties werden hier beschrieben: http://msdn.microsoft.com/en-us/library/gg649853.aspx.

Nun kann man mittels GetHierarchy() verschiedene Dinge in Erfahrung bringen, vorher wird aber noch eine $xml-Variable mit $nil zugewiesen damit die Variable existiert, da sie per [ref] an GetHierarchy übergeben werden muss:

[xml]$xml = $null

$one.GetHierarchy($null, [Microsoft.Office.InterOp.OneNote.HierarchyScope]::hsNotebooks, [ref] $xml)

Der Enumeration-Typ [Microsoft.Office.InterOp.OneNote.HierarchyScope] wird hier erklärt: http://msdn.microsoft.com/en-us/library/ff966473.aspx und erlaubt auch den Zugriff auf Seiten und Sektionen also Register.

Durch die vorhergehende Initialisierung von $xml mittels dem [xml]-Typ, ist nun $xml direkt über die üblichen Powershell-Möglichkeiten mit XML-Objekten ansprechbar:

$xml.Notebooks.Notebook

listet alle Notizbücher auf, welche bekannt sind. Wenn man es detaillierter haben möchte, kann man auch hsPages benutzen:

$one.GetHierarchy($null, [Microsoft.Office.InterOp.OneNote.HierarchyScope]::hsPages, [ref] $xml)

Damit ist ein kompletter Durchgriff mittels

$page=$xml.Notebooks.Notebook[0].section[0].Page[0]

bis auf die Seite möglich.

Also wieder eine Variable als XML-Typ initialisieren:

[xml]$pagexml = $null

und direkt den Seiteninhalt holen:

$one.GetPageContent($page.ID, [ref] $pagexml)

und

$pagexml.Page

fördert dann die Seite zutage. Ja und hier bekommt man dann die interessanten Sachen zu Gesicht, wie InkDrawing oder Image.OCRData.OCRText, nicht zu vergessen die Möglichkeiten mittels Audio-Aufzeichnungen Transkriptionen zu bekommen! Aber das sind Spielereien für einen späteren Blogeintrag…

Was sehr hilfreich werden kann, bei tiefergehenden Geschichten: http://htmlagilitypack.codeplex.com/

Abwesenheitsbenachrichtigung oder Out of Office Mails bei Outlook und Exchange Server

10 Juni 2011

Alles wichtige zum Thema in Exchange Server und Outlook hier:

Allgemein erklärt von alt bis aktuell 2010: http://www.msxfaq.de/konzepte/oof.htm

Exchange Team mit Möglichkeiten ab 2007:
http://blogs.technet.com/b/exchange/archive/2006/10/06/3395024.aspx

Wie man Outlook 2010 und Outlook 2007 scharf stellt:
http://support.microsoft.com/kb/290846

Nicht vergessen, damit es ohne Outlook funktioniert muss die Sache am Exchange Server aktiviert werden.

QNAP NAS per Remotebefehl herunterfahren

9 Juni 2011

Schön wäre es per URL-Aufruf aber das scheint nicht zu gehen, statt dessen muss man per SSH auf die NAS zugreifen und das Shutdown Kommando geben.

Schöne Schritt für Schritt Anleitung:
http://www.turbonas.com/phpBB3/viewtopic.php?f=9&t=869

AutoIt-Programm
http://forum.qnapclub.de/viewtopic.php?f=46&t=9267&p=72428&hilit=fernbedienung#p66866

Huawei E5 oder Trekstore Portable Hotspot

9 Juni 2011

Eine klasse Sache um unkompliziert bis zu fünf Benutzer mobil ins Internet zu bekommen sind die Geräte von Huawei E5 Serie und darauf aufbauende OEM-Geräte.

Hier einige interessante Ressourcen dazu:

Sourcecode http://blog.knecht-ruprecht.info/2010/01/quellcodesource-code-des-huawei-e5.html

direkter Link: http://forum.huawei.com/jive4/thread.jspa?threadID=330286&tstart=0&orderStr=9

Hier die Huawei Foren: http://forum.huawei.com/jive4/category.jspa?categoryID=3, dort findet man unter Access Network den Broadband Access unter welchem dann die üblichen USB-Sticks und der E5 diskutiert werden.

Generell findet man einige brauchbare Infos unter: http://blog.knecht-ruprecht.info/2010/02/tipps-und-tricks-zum-webinterface-des.html

Test Lab Guides – Microsoft Technologien Schritt für Schritt nachvollziehen

8 Juni 2011

Eine tolle Möglichkeit sich aktuellen Microsoft Server Technologien auseinanderzusetzen sind die sogenannten Technet Test Lab Guides (TLG). Dabei liegt der Fokus auf dem Schritt für Schritt einrichten der jeweiligen Funktion, weniger auf dem Hintergrund zur jeweiligen Technologie. http://social.technet.microsoft.com/wiki/contents/articles/test-lab-guides.aspx

Benötigt dazu wird ein Windows Server 2008 R2 Enterprise Image: http://www.microsoft.com/windowsserver2008/en/us/trial-software.aspx

Hier ein Abriss der aktuellen Guides:

Powershell-Abfrage ob ein bestimmter KB-Artikel bzw. Hotfix im Service Pack 1 für Windows 7 oder Server 2008 R2 enthalten ist

6 Juni 2011

Die Microsoft Knowledge Base enthält viele wichtige Informationen. Allerdings wird die Qualität seit Jahren immer schlechter. Ich könnte jetzt wieder stundenlang ablästern aber lassen wir das. Fakt ist, entweder es fehlt Manpower oder sie haben einfach keine Lust mehr.

Problem
Früher war es üblich, wenn ein Service Pack für eine Windows Version herauskam, dass in den Knowledge Base Artikeln darauf hingewiesen wurde, in welchem Service Pack das Problem behoben wurde. Nehmen wir uns als Beispiel http://support.microsoft.com/kb/941158/en-us, dies ist ein Artikel der Probleme im Internet Explorer 7 und 8 beschreibt. Zum aktuellen Zeitpunkt, als dieser Blogeintrag geschrieben wurde, sind als Revisionsdaten angegeben

Last Review: April 11, 2011 – Revision: 6.0

Hier wird im Statusbereich klar erklärt:

Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the "Applies to" section. This problem was first corrected in Windows Vista Service Pack 1.

Damit ist klar, wenn in irgendeinem Zusammenhang auf Probleme hingewiesen wird, nachschauen ob unter Windows Vista schon SP1 installiert wurde.

Soweit so gut. Aber dieser Knowledge Base Artikel gilt auch für Windows 7 und Server 2008 R2! Der Service Pack 1 für die beiden Systeme war eine halbe Ewigkeit als Beta und RC im Umlauf und trotzdem ist kein Status für die aktuellen Windows Systeme erfasst!

Noch besser: Im KB-Artikel ist die Rede von einem Hotfix für Windows 7 und Server 2008 R2, allerdings die “Applies to” Sektion sieht so aus:

APPLIES TO
  • Windows Internet Explorer 7 for Windows XP
  • Windows Internet Explorer 7 for Windows Server 2003
  • Windows Internet Explorer 7 in Windows Vista
  • Windows Internet Explorer 7
  • Windows Internet Explorer 8

OK, jeder weiß, Internet Explorer ist Bestandteil von Windows 7 und Server 2008 R2, also müssen diese nicht explizit aufgeführt werden, aber umgekehrt muss man sich fragen, warum taucht dann der Eintrag IE7 mit Vista auf? IE7 war Bestandteil von Vista. Einfach unlogisch.

Also weiter, wie kann man nun feststellen, ob ein bestimmtes Problem oder Hotfix im Service Pack 1 behoben wurde? Früher gab es dazu dann noch ebenfalls KB-Artikel: http://support.microsoft.com/kb/946480. Aber das wie gesagt, war früher!!

Eine Lösung besteht nun darin auf dieser Seite http://www.microsoft.com/downloads/en/details.aspx?FamilyID=61924cea-83fe-46e9-96d8-027ae59ddc11&displaylang=en eine Datei herunterzuladen. Denn hier gibt es eine schöne Excel-Datei, wo alle KB-Artikel die im SP1 abgehandelt werden schön verzeichnet sind. Ach übrigens früher war alles besser, deshalb ist die Excel-Datei auch brav im XLS und nicht XLSX-Format gehalten Zwinkerndes Smiley. Bei MS im Support scheint noch nicht durchgedrungen zu sein, dass man mittlerweile Excel im Web betreiben kann.

Lösung
Nun zur Lösung. Die nennt sich Get-Sp1Articles und ist ein Powershell Skript. Der Vorteil dieser Lösung ist, sie funktioniert sogar in einem Windows Server Core oder beim Hyper-V Server in der Commandline.

Hier erst mal das Skript:

function Get-Sp1Articles()
{
    $web = New-Object System.Net.WebClient
    # Microsoft XLS-Datei über google herunterladen, damit kommt die XLS-Datei als in HTML konvertierte Datei
    $html = $web.DownloadString(‚http://webcache.googleusercontent.com/search?q=cache:trZowCK8jvcJ:download.microsoft.com/download/8/B/3/8B37425B-AB6E-4C9C-9361-ECC15771BC5C/Hotfixes%2520and%2520Security%2520Updates%2520included%2520in%2520Windows%25207%2520and%2520Windows%2520Server%25202008%2520R2%2520Service%2520Pack%25201.xls‘)
    # zuerst den Google Header und das unnötige Blabla wegbekommen
    $html = $html.Substring($html.IndexOf("KBTitle"))
    # jetzt das nächste <tr> finden
    $html = $html.Substring($html.IndexOf("<tr"))
    # einzelne Zeile mit KB-Eintrag erkennen
    $regex = ‚<tr([\s\S]*?)</tr>‘

    # HTML in Objektauflistung überführen
    ($html |Select-String -Pattern $regex -AllMatches).matches |foreach {
                    # durch überführen in ein XML-Objekt läßt sich die Zeile leichter verarbeiten
                    [xml]$tmp = $_
                    # neues Objekt erzeugen, dem die 4 wichtigen Eigenschaften zugeordnet werden, wenn eine KB-Nummer eingetragen ist
                    if ($tmp.tr.td[0].font.’#text‘ -gt 0)
                    {
                        $obj = New-Object psobject
                        $obj |Add-Member -MemberType NoteProperty -Name KBArticle -Value $tmp.tr.td[0].font.’#text‘
                        $obj |Add-Member -MemberType NoteProperty -Name Classification -Value $tmp.tr.td[1].font.’#text‘
                        $obj |Add-Member -MemberType NoteProperty -Name KBTitle -Value $tmp.tr.td[2].font.’#text‘
                        $obj |Add-Member -MemberType NoteProperty -Name Link -Value $tmp.tr.td[3].a.href
                        $obj
                    }
                }
}

Der knifflige Aufgabe dabei war, wie bekommt man die XLS-Datei mit den KB-Artikeln in Powershell? Eigentlich ganz einfach, dank Google-HTML-Cache. D. h. der Link http://webcache.googleusercontent.com/search?q=cache:trZowCK8jvcJ:download.microsoft.com/download/8/B/3/8B37425B-AB6E-4C9C-9361-ECC15771BC5C/Hotfixes%2520and%2520Security%2520Updates%2520included%2520in%2520Windows%25207%2520and%2520Windows%2520Server%25202008%2520R2%2520Service%2520Pack%25201.xls verweist auf eine HTML-Version der XLS-Datei bei Google.

Alles andere war dann nur noch unnötige Daten abschneiden um an den interessanten Bereich zu kommen und dann die enthaltenen Daten über die KB-Artikel in Objekte zu überführen. Aber dadurch das es sich nun um Objekte handelt, lassen sich tolle Dinge damit anstellen.

Damit man nicht jedes Mal die Exceldatei herunterladen muss wird für die folgenden Beispiele diese Zeile vorausgesetzt:

$sp1 = Get-Sp1Articles

Um z. B. zu erfahren wie viele Fixe dabei sind, die sich um das Thema EFI oder UEFI kümmern, schreibt man

$sp1 | where {$_.KBTitle –cmatch "EFI"} | fl *

schon bekommt man die entsprechenden Artikel aufgelistet.

Oder wie wärs mit Artikel die sich explizit auf 64Bit beziehen:

$sp1 | where {$_.KBTitle –match "64-bit"} | fl *

Oder wie ist das Verhältnis zwischen Hotfix und Security Fix:

$sp1 | group -Property classification

Oder wieviel Fixe sind überhaupt enthalten:

$sp1.count

Zum Abrufen weiterer Informationen von Artikel 11:

start $sp1[10].link

Wer einfach mal nur so etwas durchscrollen möchte, verwendet einfach dies:

$sp1 | Out-GridView

Nun kann man mit der Filterfunktion komfortabel suchen.

Achso, fast wieder das Thema verpasst, es ging ja eigentlich darum, festzustellen, ob ein bestimmter KB-Artikel enthalten ist:

$sp1 | where {$_.KBarticle -eq 941158}

Windows Server 2008 R2 Server Backup Cmdlets

3 Juni 2011

Wenn man das ungewöhnliche erreichen möchte, welches mit der normalen GUI oder mit WBAdmin nicht zu erreichen ist, dann verwendet man einfach die Windows Server Backup Cmdlets für Powershell.

Doku der einzelnen Cmdlets: http://technet.microsoft.com/en-us/library/ee706683.aspx

Leider sind sie auf dem Microsoft Hyper-V Server R2 nicht verfügbar.

Hier noch eine Beschreibung mit Beispielbildern: http://certcollection.org/forum/topic/99672-windows-server-2008-r2-and-windows-backup/