Archiv für den Monat: Juni 2015

Tipp: Zone Identifier bei Dateien auslesen und übersichtlich anzeigen

Dateien, die aus dem Internet geladen werden, werden von der Anwendung, von der sie heruntergeladen wurde, mit einem „Zone.Identifier“-ADS (Alternate Data Stream) markiert. Per Unblock-File-Cmdlet wird der Eintrag aus einer Datei entfernt, per Get-Content und dessen Stream-Parameter wird der Eintrag angezeigt (wenngleich der Inhalt selber uninteressant ist, da er immer denselben Inhalt besitzt).

Der folgende Befehl listet die ADS-Zone.Identifier-Inhalte für alle Dateien zusammen mit deren Namen im Downloads-Verzeichnis übersichtlich auf.

PowerShell 5: Ein lokales Modul-Repository mit ProGet einrichten

Die kommende PowerShell 5 ist für mich mehr als nur ein weiteres Update mit interessanten, aber doch für den Adminalltag viel zu speziellen Neuerungen. Es ist für mich aus verschiedenen Gründen (mehr dazu in einem anderen Post) das wichtigste Update seit der Version 2.0 mit teilweise richtungsweisenden Neuerungen. Eine dieser Neuerungen ist die Modulverwwaltung. Wer einmal

eingibt und dabei die DSC-Ressourcen ausklammert, erhält eindrucksvoll ein Gefühl für die reichhaltige Auswahl an Modulen, die alleine in der von Microsoft initiierten PowerShell Gallery zur Verfügung stehen. Bei mir sind es aktuell 123 Module.

Doch da Komfort immer auf Kosten der Sicherheit geht, hat diese neue Leichtigkeit auch ihren Preis. Viele Administratoren werden ein Problem mit dem Umstand haben, dass ein Install-Module Programmcode aus einer grundsätzlich nicht sicheren Quelle lädt und auf dem lokalen Computer, in der Regel mit Administratorberechtigungen, ausführt.

Doch das bedeutet natürlich nicht, dass man auf eine Paketverwaltung verzichten muss. Die naheliegende Lösung besteht darin, eine Paketverwaltung im Firmennetzwerk einzurichten, in der nur getestete Pakete bereitgestellt werden. In diesem Fall erhält man den Komfort, ohne dass das Internet eine Rolle spielt. Der Aufwand für das Zusammenstellen und Pflegen der Pakete darf zwar nicht unterschätzt werden, doch auch Sicherheit hat bekanntlich ihren Preis. Auch wenn es grundsätzlich mit vertretbarem Aufwand möglich ist, einen lokalen Nuget-Paketmanager einzurichten, sehr viel einfacher geht es mit Hilfe von ProGet. ProGet ist eine kommerzielle Software der Firma Inedo, die es dankenswerterweise aber auch in einer kostenlosen „Free Edition“ gibt:

http://inedo.com/proget/download

Nach dem Ausführen des Installers und der Wahl der „Free Edition“ müssen ein paar allgemeine Angaben gemacht werden.

ProGet-Installation

ProGet-Installation

Unter anderem wird eine SQL Server Express-Datenbank angelegt. Als Webserver stehen der IIS, sofern installiert, oder ein Webserver zur Auswahl, der Teil von ProGet ist. Als Port ist 81 voreinstellt. ProGet läuft als Dienst, daher muss ein Systemkonto ausgewählt werden. Sind alle Angaben gemacht, läuft die Installation durch und ist, je nachdem, ob der SQL Server Express (aus Platzgründen verwendet ProGet noch die „Uralt-Version“ 2005) nachinstalliert werden muss, in ein paar Minuten erledigt. Anschließend ist das Repository einsatzbereit. Es wird über eine einfache, aber vollkommen ausreichende Weboberfläche administrieren.

ProGet - die Weboberfläche

ProGet – die Weboberfläche

Für den Benutzernamen und Kennwort für das Webverwaltungstool sind „Admin:Admin“ eingestellt.

Die Pakete werden über Feeds zur Verfügung gestellt. Von Anfang an gibt es den Feed „Default“, der bereits eine Reihe von Paketen umfasst, die aber nur für Entwickler interessant sind. Ich habe mir einen weiteren Feed mit dem Namen „PSModules“ angelegt.

Der folgende Befehl registriert das neue Repository:

Im nächsten Schritt wird per Publish-Module ein beliebiges Modul in das neue Repository veröffentlicht:

Für den Parameter NugetApiKey wird entweder jener API-Key eingetragen, der im Rahmen der Weboberfläche für den Feed eingetragen wurde (in diesem Fall muss der Benutzer „Anonymous“ als Berechtigungsstufe „Developer“ erhalten, damit ein nicht authentifizierter Benutzer Module veröffentlichen kann), oder es wird „Admin:Admin“ übergeben, was der voreingestellten Kombination aus Benutzername und Kennwort entspricht.

Damit befindet sich das Modul im Repository und kann über Find-Module lokalisiert und per Install-Module auf anderen Computern „installiert“ werden:

Weitere Angaben sind nicht erforderlich. Voraussetzung ist natürlich, dass das Repository auf dem Computer zuvor per Register-PSRespository registriert wurde. Eine kleine Einschränkung ist aktuell, dass Install-Module automatisch das Programmeverzeichnis verwendet (es gibt offenbar keinen Parameter, über den dies geändert werden könnte) und daher der Befehl nur in einer Admin-Shell ausgeführt werden kann. Bemerkenswert ist auch, dass auch ein lokales Repository als „untrusted“ eingestuft wird. Wahrscheinlich muss eine Https-Adresse verwendet werden.

ProGet - Das Modul PSServer wurde veröffentlicht

ProGet – Das Modul PSServer wurde veröffentlicht

Insgesamt ist ProGet eine tolle Sache, da es mit seiner Hilfe einfacher nicht sein könnte im Firmenetzwerk ein Repository für PowerShell-Module einzurichten. Natürlich kommt man auch ohne ProGet zum Ziel, sollte dann aber einen Tag einplanen und erhält keine Weboberfläche, in der auch ein Modul angelegt werden kann. Die kommerzielle Variante kostet lautet Webseite 595 US$ pro Jahr (alle Preisangaben ohne Gewähr) und bietet u.a. die Möglichkeit, das Repository auf mehrere Webserver zu verteilen. Das dürfte aber nur für eine echte Paketverwaltung interessant sein, geht es lediglich um ein „paar“ PowerShell-Module ist die Free Edition vollkommen ausreichend.

Neue Cmdlets bei Windows Server 2016 TP2

Seit Mai gibt es eine erste offizielle Preview des Nachfolgers von Windows Server 2012 R2, der vermutlich irgendwann im nächsten Jahr offiziell werden wird.

José Baretto hat sich die Mühe gemacht und die PowerShell-Module von Windows Server 2012 mit der Preview verglichen:

http://blogs.technet.com/b/josebda/archive/2015/05/26/new-powershell-cmdlets-in-windows-server-2016-tp2-compared-to-windows-server-2012-r2.aspx

Tipp: Eigenschaften mit eckigen Klammern im Namen ansprechen

Es kommt selten vor, aber es kann vorkomen (z.B. durch einen CSV-Import): Eigenschaften mit Sonderzeichen wie z.B. eckigen Klammern: CPU-Temperatur [°C]. Insbesondere per Select-Object lässt sich diese Eigenschaft nicht ansprechen. Ich habe leider keine andere Lösung gefunden als die Eigenschaft noch einnal zu bilden und dabei dem Namen in geschweifte Klammern zu setzen.

SWR-Hitparade „scratchen“ mit dem HTMLAgilityPack

Wer in Baden Württemberg wohnt kennt sie, die SWR-Hitparade, bei der jedes Jahr im Herbst die von den Hörern am meisten gewünschten Musiktitel von Platz 1100 bis 1 gspielt werden. Nonstop (natürlich unterbrochen von Nachrichten, Verkehr und Werbung), über mehrere Tage. Für die einen ist sie Kult, für anderen ein wenig nervig (ich liege irgendwo in der Mitte mit Tendenz zu „nervig“). Platz 1 und 2 machen seit Jahren (oder schon immer) Stairway to Heaven und Bohemian Rapsody unter sich aus, auch bei den übrigen Top 100-Plätzen gibt es eher wenig Bewegung. Die Hitparade lebt von ihren „Kultelementen“ (Stairway to Heaven, der Anrufer, der bei „Child in time“ darum bittet man möge ihm doch das „Gejaule“ ersparen), den Moderatoren natürlich, der Party-Stimmung im Studio, der Abschlussparty in der Hans Martin Schleyer-Halle mit Status Quo und der bunten Mischung an Musik. Wenn aber auf AC/DC Andreas Bourani, auf Pink Floyd City, auf John Miles Metallica und auf Dire Straits mit Brother in Arms Helene Fischer folgen, ist das schon etwas viel Abwechslung für meinen Geschmack und für mich daher etwas schwer verdaulich.

Ein großer Nachteil ist, dass es der SWR einfach nicht schafft, alle Titel auf einmal in einem einheitlichen Format zur Verfügung zu stellen (oder nicht will oder nicht darf). Die aktuellen Titel muss man sich jeweils 20 Titel Seite für Seite aufrufen oder einzeln danach suchen, die Platzierungen der anderen Jahre gibt es als Pdf (!). Eine Auswertung oder eine Abfrage nach dem Motto „Wie oft wurde Bruce Springsteen gespielt und was war seine beste Platzierung?“ oder „Wie oft kam auf Helene Fischer Metallica ?“ waren damit bislang nicht möglich.

Doch das ist jetzt vorbei. Mein kleines PowerShell-Skript ruft alle Seiten vom Swr-Server einzeln ab, zerlegt das Html mit Hilfe des genialen HTMLAgilityPacks und legt pro Internet/Iitel/Platzierung ein Objekt an, so dass man anschließend die Platzierungen über die Variable $Hitparade nach Herzenslust auswerten kann.

Die daraus abgeleitete Html-Seite gibt es unter SWRHitparade2014

Wichtig: Damit das Skript funktioniert, benötigt ihr das HtmlAgilityPack und müsst die Datei HtmlAgilityPack.dll in ein Verzeichnis kopieren und diesen pfad auf Add-Type folgen lassen.

Wer in XPath richtig fit ist, kann sich auch die Schleife sparen und direkt in einem Ausdruck auf das span-Element zugreifen, in dem Internet und Titel enthalten sind. Sollte jemand das hinbekommen haben, bitte ich natürlich um die Lösung (der erste Einsender erhält von mir ein PowerShell-Buch).