Archiv für den Monat: Juni 2017

„Virtuelle Computer“ per Hosts-Datei erzeugen

In Schulungen habe ich nicht immer ein Netzwerkumgebung zur Verfügung. Um dennoch eine Abfrage gegen mehrere Computer halbwegs realistisch vorführen zu können, trage ich eine Reihe von Computernamen in die Hosts-Datei ein und ordne ihnen jeweils 127.0.0.1 zu.

Das klappt zwar mit Ping&Co, nicht aber per ComputerName-Parameter.

Eine kleine Namensauflösung per DNS-Resolve löst das in der Regel nicht existierende Problem und zeigt nebenbei dem Schüler was mit der PowerShell so alles möglich ist:

Angenommen, die Hosts-Datei enthält Einträge für PC1, PC2, PC3 usw. dann legt der folgende Befehl für jeden dieser nicht vorhandenen Computer eine CIM-Session an.

Und dann

Die ersten Schritte mit Wireshark

Wireshark ist „das“ Tool für die Analyse von Netzwerkverbindungen, sprich von Paketen, die im Rahmen einer Netzwerkverbindung übertragen. Es gibt natürlich Alternativen, doch sind diese entweder nicht kostenlos oder nicht so komfortabel. Von Microsoft gab es vor vielen Jahren den Network Monitor, der offenbar mit der Version 3.4 eingestellt wurde. Er ist zwar noch als Download erhältlich, doch empfehle ich ihn nicht, denn Wireshark ist die deutlich flexiblere Alternative.

Ist man lediglich an HTTP/HTTPS-Paketen interessiert, wie sie z.B. bei PowerShell-Remoting anfallen, gibt es mit HttpDebuggerPro (nicht kostenlos) und Fiddler4, alternative Tools, die eventuell etwas einfacher zu bedienen sind.

Wireshark unterstützt sämtliche in Frage kommenden Protokolle, bietet eine komfortable Filtersyntax, ist bestens dokumentiert, es gibt eine große, weltweite Community (und sogar eine eigene Konferenz) und ist trotz unzähliger Einstellungen und angesichts einer Fülle von Details, die eine Paketanalyse zwangsläufig liefert, relativ einfach zu bedienen, u.a. dank einer durchdachten Benutzerführung. Es ist wirklich faszinierend, wie vielschichtig und detailreich die Internet-Protokolle sind. Vor allem angesichts der Tatsache, dass alles bereits in den 70er Jahren entstand und damit bereits über 40 Jahre alt ist.

Die Downloadresse von Wireshark ist: https://www.wireshark.org

Die Installation der Windows-Version ist schnell erledigt.

Für das allerste Kennenlernen empfehle ich den Datenverkehr zur eigenen Homepage zu analysieren. Hier kam man im Allgemeinen davon ausgehen, dass wirklich nur ein paar Seiten per HTTP abgerufen werden und keine Anfragen gegen Dutzende von Werbenetzwerken und Websites zur Datenauswertung gestartet werden, die alle im Detail in der Ausgabe erscheinen.

Tipp: Beim Betrachten einzelner Pakete fiel mir auf, dass nahezu überall der Begriff „Arcadyan_cc“ enthalten ist. Zunächst vermutete ich (natürlich;), dass mein Notebook jede Anfrage auch einen ominösen Rechner im Internet sendet und dieser sogar meinen Computer anpingt, um irgendwelche Schwachstellen zu finden. Eine kurze Internet-Recherche ergab, dass dahinter eine Firma aus Taiwan steckt, die u.a. Router und Modems herstellt. Eines dieser Produkte heißt bei uns Speedport und dürfte Telekom-Kunden bestens bekannt sein.

Das Einrichten eines Filters ist bei Wireshark sehr einfach. Gib in die Filterleiste z.B.

http.host contains „training“

ein, um nur Pakete von Http-Verbindungen zu sehen, die von einem Host stammen, in dessen Name „Training“ vorkommt. Ist der Filter in Ordnung wird er grün eingefärbt, ansonsten rot.

Es versteht sich von selber, dass man mit Wireshark Stunden verbringen kann und natürlich wissen muss, was einem da an Details präsentiert wird.

Noch ein Tipp zum Schluss, der Euch eventuell eine lästige Suche erspart. Werden auf einmal nur noch Pakete mit einem „UNKNOWN“-Protokoll angezeigt, habt ihr es irgendwie geschafft, alle Protokolle zu deaktivieren. Wer [Strg]+[Umschalt]+[E] wird die Protokollliste angezeigt und es können alle Protokolle wieder aktiviert werden.

Also, viel Spaß bei der Paketanalyse.

Immer wieder nett, Paketanalyse mit Wireshark

Neue Rolle für NanoServer – in Zukunft nur noch als Container-Host (?)

Wie es aussieht, hat Microsoft die künftige Rolle von NanoServer komplett neu definiert. Anstelle einer Kombination aus Core OS und diversen Rollen soll NanoServer in Zukunft ausschließlich Anwendungscontainer ausführen. Es soll darüber hinaus keine Unterstützung für Rollen mehr geben:

https://blogs.technet.microsoft.com/hybridcloud/2017/06/15/delivering-continuous-innovation-with-windows-server/?MC=OfficeO365&MC=SecSys&MC=IoT&MC=MSAzure&MC=WinServer

Damit wird auch die Frage hinfällig, ob NanoServer als DC fungieren kann, wenn sich Microsoft entschließen würde, die AD DS-Rolle zur Verfügung zu stellen. Wer einen Server mit Minimalausstattung wünscht, muss dafür in Zukunft wieder Server Core verwenden.

Schade, ich denke, dass diese Entscheidung insofern falsch ist, dass Microsoft damit einen falschen Schwerpunkt setzt und ein weiteres Signal aussendet, dass „On Premise“-Lösungen in der strategischen Plannung keine große Rolle mehr spielen. Und: Ich habe noch niemanden getroffen, der Container einsetzt, daher kann ich diese Fokusierung auf einen Nischenbereich nicht nachvollziehen. Wenn es stimmt, dass in NanoServer 10 Jahre Entwicklungsarbeit stecken, dann ist die Reduzierung auf einen Container-Host als Ergebnis etwas dürftig. Und: Kooperiert Microsoft nicht mit Docker, die das alles bereits im Programm haben dürften?

Natürlich wird es Gründe gegeben haben. Einer dürfte die nach wie vor geringe Nutzung von NanoServer sein.

PS: Das wäre eine weitere Frage, die jemand Jeffrey Snover, der als Leiter der Windows Server-Gruppe auch für NanoServer zuständig ist, auf der letzten PowerShell-Konferenz hätte stellen können.

Tipp: Mit Subst nicht mehr existierende Laufwerke mappen

Es kommt auch im Jahr 2017 noch vor, dass Anwendungen irgendwelche absoluten Pfade speichern und sollte das Laufwerk aus irgendeinem Grund nicht mehr existieren, lästige Fehlmeldungen anzeigen. Jedes Mal. Und das nicht bei irgendwelchen „Wald&Wiesen-Apps“, sondern z.B. auch bei Visual Studio.

Ich verstehe nicht, warum Microsoft Milliarden in Machine Learning investiert, aber Visual Studio nicht einfach lernen kann, dass z.B. ein Laufwerk H: nicht existiert, auch wenn der Laufwerksbuchstabe einem nicht existierenden USB-Laufwerk zugeordnet wurde.

Abhilfe schaft das Ur-Alt-Kommando Subst. Der folgende Befehl mapt den Pfad E:\ auf das nicht mehr existierende Laufwerk H:

Der Befehl kann in der PS-Befehlszeile direkt so eingegeben. In der Regel wird es aber einen Fehler geben, der besagt, dass H: ein ungültiger Parameter ist. Der Grund ist, dass der Laufwerksbuchstabe H: einem nicht existierenden USB-Laufwerk zugeordnet ist. Abhilfe schafft die Datenträgerverwaltung (einfach „Diskmgmt.msc“ eingeben), in der ihr bei dem Laufwerk einfach den Laufwerksbuchstaben löscht. Danach klappt es auch mit Subst und es gibt keine lästigen Fehlermeldungen nach jedem Windows-Start oder bei anderen Gelegenheiten.

Managed Service Accounts (MSAs) erstellen – per Befehlszeile und mit einem GUI-Tool

Ein Managed Service Account (MSA) ist, vereinfacht, ein Dienstkonto (also ein Benutzerkonto, das ausschließlich von Systemdiensten für die Anmeldung verwendet wird), das von Windows insofern verwaltet wird, dass sich der Admin nicht mehr um das Erneuern von Kennwörter kümmern muss.

MSAs wurden mit Windows Server 2008 R2 eingeführt.

Bis zur aktuellen Windows Server-Version können MSAs nur per PowerShell angelegt werden.

Das Anlegen eines MSA besteht aus drei Schritten:

1. Anlegen des MSA per New-ADServiceAccount-Cmdlet

Bei diesem Schritt wird das Konto auf einem DC angelegt.

2. Hinzufügen des MSA auf dem jeweiligen Computer, auf dem es später verwendet werden soll, per Add-ADComputerServiceAccount-Cmdlet

$ServiceAccountHost ist der Name des Computers, $ServiceAccount Name des MSA oder gleich das ganze Objekt, das den MSA repräsentiert.

3. Installieren des MSA auf dem Computer, auf dem es später verwendet werden soll, per Install-ADServiceAccount-Cmdlet.

Das war im Prinzip alles. In der Praxis kann allerdings eines „schief gehen“, so dass die im Grunde einfachen Cmdlets zu Fehlermeldungen führen.

Ein Aspekt ist, dass auf dem DC ein „Kds Rootkey“ angelegt werden muss, der sofort wirksam wird.

Ein weiterer Aspekt ist ein Bug, der inzwischen behoben werden sollte, durch den der Name eines MSA nicht länger als 16 Zeichen werden dürfte.

Alles ein wenig umständlich. Zum Glück gibt es ein geniales GUI-Tool von Cjwdev, mit dessen Hilfe das Anlegen eines MSA sehr einfach wird:

http://cjwdev.co.uk/Software/MSAGUI/Info.html

Die aktuelle Version ist 1.6.

DSC – geplante Neuerungen

Auf der PoshConf Eu 2017 hat Jeffrey Snover in einer Folie die für DSC geplanten Neuerungen als Teil einer „Cloud Command Console“ zusammengestellt:

  • Ein portabler LCM für Windows und für Linux
  • Mehrere LCM-Instanzen
  • Ein Native Code-LCM (in C) für Umgebungen mit wenig Hardwareressourcen
  • Ein LCM als Bibliothek
  • Der LCM soll als Systemdienst ausführen (?)

Auch wenn diese Neuerungen auf der Folie „Core PowerShell in Azure“ aufgeführt wurden, gehe ich davon aus, dass sie allgemein verfügbar sein werden. Wann? Dieser Punkt ist noch offen.

Nuget-Packages direkt laden

Nuget-Packages sind Paketdateien, die in der Regel Assembly-Dateien enthalten, die von Entwicklern für ihre Projekte verwendet werden. Seit Visual Studio 2012 werden solches Packages über die Paketverwaltung oder über das PowerShell-Konsolenfenster per Install-Package hinzugefügt.

In einem PowerShell-Skript benötigt man im Allgemeinen keine Packages. Wie immer gibt es Ausnahmen. Eine solche Ausnahme ist das sehr nützliche HtmlAgilityPack, das aus einer Assembly-Datei besteht, mit deren Hilfe sich die Inhalte einer Html-Seite per XPath und vertrauten XML-Methoden wie SelectNodes und SelectSingleNode ansprechen lassen.

Lee Holmes beschreibt die Technik des „Html Scraping“ mit Hilfe des HtmlAgilityPack sehr schön unter der folgenden Adresse:

http://www.leeholmes.com/blog/2010/03/05/html-agility-pack-rocks-your-screen-scraping-world/

Ich habe darüber auch bereits etwas geschrieben, aber wer den Artikel von Lee Holmes liest, weiß damit alles Wissenswerte und kann sich das Lesen anderer Blog-Einträge erst einmal sparen.

Bis auf eine Kleinigkeit eventuell: Normalerweise lädt man die Assembly-Datei von der Codeplex-Projektseite herunter. Es gibt zwei Gründe, die dagegen sprechen: Das Codeplex-Portal soll irgendwann in naher Zukunft eingestellt werden. Die Methode ist nicht besonders elegant, wozu gibt es das PackageManagement-Modul seit PowerShell 5.0?

Damit auch Nuget-Packages geladen werden, muss eine Package Source für die Adresse https://www.nuget.org/api/v2 existieren (dies ist zwar die „alte“ Adresse, sie funktioniert natürlich nach wie vor). Das Get-PackageSource-Cmdlet fragt diese ab:

Sollte die Package Source wider Erwarten noch nicht dabei sein, muss sie zuerst per Register-PackageSource angelegt werden:

Dabei muss auch der Providername, in diesem Fall Nuget angegeben werden. Das Ergebnis ist eine neue Package Source mit dem Namen „NugetP“.

Damit kann das HtmlAgilityPack-Package per Install-Package-Cmdlet heruntergeladen werden:

Abgelegt wird das „Package“ mit seinen Dateien unter C:\Program Files\PackageManagement\NuGet\Packages. Die entscheidende Datei HtmlAgilitypack.dll befindet sich in einem der zahlreichen Unterverzeichnisse, z.B. unter HtmlAgilityPack.1.4.9.5\lib\Net45. Sie wird per Add-Type-Cmdlet und dessen Path-Parameter geladen.

Eine Alternative ist der direkte Aufruf von Nuget.exe, das zuerst per dir lokalisiert werden muss.

Sollte das aus irgendeinem Grund nicht funktionieren, kann es erforderlich sein, die Nuget-Paketquelle zuerst zu aktivieren:

Ein Nuget sources list listet alle vorhandenen Sources auf, ein Nuget list alle verfügbaren Pakete.