Von der PowerShell ISE auf VS Code wechseln

Nachdem die PowerShell ISE schon lange nicht mehr weiterentwickelt wird und in den neuen PowerShell Core Versionen überhaupt keine Rolle mehr spielt, habe ich den Umstieg auf VS Code gewagt.
Visual Studio Code ist ein kostenfreier, plattformübergreifender Quelltext-Editor von Microsoft, der sich durch PlugIns um Unterstützung für beliebige Sprachen erweitern lässt.

Um Dir den Wechsel zu erleichtern, habe ich die ersten Schritte hier zusammengefasst:

Installation von VS Code

VS Code ist als portable Version verfügbar. So kannst Du diese z.B. auf verschiedenen Systemen mit den gleichen Einstellungen nutzen, auch wenn eine Installation mangels Adminrechten oder sonstigen Einschränkungen nicht erwünscht ist.
Die hierfür benötigte ZIP-Datei kannst Du unter https://code.visualstudio.com/Download herunterladen und anschließend in ein Verzeichnis Deiner Wahl entpacken.
Je nach Windows-Einstellung musst Du zuvor eventuell noch die ZIP-Datei entsperren:

ZIP-Datei entsperren

Anschließend legst Du noch ein ‘data’-Verzeichnis im entpackten VS Code-Verzeichnis an, in dem dann alle Deine Einstellungen und heruntergeladenen Erweiterungen gespeichert werden. Später kannst Du dann dieses Verzeichnis einfach in ein anderes (neueres) VS Code Verzeichnis verschieben.

‘Data’-Verzeichnis anlegen

Nun kannst Du die ‘Code.exe’ starten.

Deutsches Sprachpaket installieren

Wenn Du VS Code gerne in Deutsch nutzen möchtest, kannst Du das ‘German Language Pack for Visual Studio Code’ installieren.
Hierfür drückst Du entweder [STRG + UMSCHALT + X] oder klickst auf das ‘EXTENSIONS’ Icon auf der linken Seite.
Wenn Du im Suchfenster mit der Eingabe von ‘German…’ beginnst, erscheint bald das Sprachpaket ganz oben und Du kannst auf ‘Install’ klicken:

Deutsches Sprachpaket installieren

Danach möchte VS Code einen Neustart haben. Den Button dazu findest Du in der rechten unteren Ecke:

‘Restart Now’-Button

Nun meldet sich VSCode mit der deutschen Willkommen-Seite zurück:

PowerShell Erweiterung installieren

Anschließend kannst Du die PowerShell-Erweiterung hinzufügen. Also wieder [STRG + UMSCHALT + X] drücken und im Suchfenster ‘PowerShell’ eingeben.

PowerShell Erweiterung installieren

Nach der Installation und dem Neustart ist auch gleich das ‘PowerShell ISE’- Farbschema aktiv:

Farbschema auswählen

Wenn Du doch den ‘DarkMode’ bevorzugst, rufst Du einfach mit
[STRG + UMSCHALT + P] die Befehlspalette aus und gibst im Suchfenster ‘Farbdesign’ ein:

Befehlspalette
Einstellungen: Farbdesign

Hier kannst Du das gewünschte Design auswählen:

Farbdesign auswählen

Einstellungen anpassen

Bevor Du nun mit dem Scripten loslegst, solltest Du noch ein paar Einstellungen anpassen.
In die Einstellungen kommst Du mit einem Klick auf das Zahnrad am linken unteren Fensterrand oder mit der Tastenkombination [STRG + ,]:

VSCode Einstellungen

Einstellungen lassen sich entweder in der grafischen Oberfläche vornehmen (was ich viel zu umständlich finde) oder direkt in der Datei
“[VSCode-Verzeichnis]\data\user-data\User\settings.json”, in der alle Einstellungen abgespeichert werden.

VSCode Einstellungen Grafik / ‘Settings’-Datei aufrufen

Hier ist ein Auszug meiner ‘settings.json’-Datei (zum Vergrößern auf das Bild klicken):

Auszug aus ‘Settings.json’-Datei

Jetzt nur noch ein Neustart von VSCode und Du kannst mit dem Scripten loslegen 😉

Tastenkombinationen

Wenn Du gerne mit Tastaturkürzeln arbeitest, findest Du unter https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows.pdf eine Übersicht zum herunterladen.
Du kannst aber auch eigene Tastenkombinationen definieren oder vorhandene ändern.
Dazu öffnest Du mit [STRG + K] [STRG + S] in die Einstellungen und nimmst die gewünschten Änderungen vor:

Einstellungen: Tastenkurzbefehle öffnen
VSCode – Tastenkombinationen
Print Friendly, PDF & Email

PowerShell & Evernote: Backup erstellen

Zu meiner großen Freude habe ich zufällig eine Möglichkeit gefunden, meine Evernote-Notizbücher automatisch zu sichern. Natürlich könnte ich das auch über die Export-Funktion der Desktop-Anwendung von Evernote erledigen, aber das war mir viel zu umständlich und ich habe zu selten daran gedacht…

Also schauen wir uns zuerst einmal an, was das Evernote Kommandozeilen-tool so bietet:

Evernote Kommandozeilentool

Eine detaillierte Beschreibung der einzelnen Funktionen gibt es unter https://dev.evernote.com/doc/articles/enscript.php

Um also alle vorhandenen Evernote-Notizbücher zu exportieren, werden zuerst mit listNotebooks alle Notizbücher ausgelesen und anschließend jedes einzelne als .enex-Datei ins Backup-Verzeichnis exportiert:

[crayon-5df31bf4a0be6468300511/]

Jetzt noch einen ScheduledTask für das Evernote-Backup anlegen und nie wieder dran denken müssen 😉

Print Friendly, PDF & Email

Passwörter in PowerShell: einfach & sicher mit Zertifikaten

Welcher Admin hat sich nicht mindestens einmal die Frage gestellt, wie er seine Passwörter sicher abspeichern kann, um sie dann möglichst ohne viel Aufwand in seinem PowerShell Script verwenden zu können?
Und am besten soll das Script dann auch auf verschiedenen Systemen oder von allen Teammitgliedern ausgeführt werden können.
Ich habe viele verschiedene Methoden ausprobiert und war mit keiner richtig glücklich.

Bei der Variante mit

[crayon-5df31bf4a0f6b112647676/]

hast Du zwar das Passwort sicher auf Deiner Festplatte abgespeichert, Du kannst aber dann das Passwort nur mit DEM Benutzer und auf DEM System, wo es erzeugt wurde, wieder entschlüsseln – für Teamarbeit gänzlich ungeeignet.

Auch das Verschlüsseln mit einem Key (wie z.B. die Seriennummer der Festplatte oder ähnlichen) ist ungünstig: entweder Du musst den Schlüssel wieder irgendwo hinterlegen werden oder Du kannst das Passwort wiederum nur auf dem System entschlüsseln, wo Du es erzeugt hast.

Auf die Lösung kam ich dann beim Lesen von Dr. Tobias Weltner’s Buch “PowerShell 5: Windows-Automation für Einsteiger und Profis” im Abschnitt “Scripte digital signieren”: diese Technik lässt sich auch wunderbar für Passwörter verwenden.

Zertifikat erstellen

Seit Windows 10 / Server 2016 verfügt das Cmdlet New-SelfSignedCertificate über erweiterte Optionen, über die z.B. auch die Gültigkeitsdauer angepasst werden kann.

Erstellen wir also zuerst ein selbstsigniertes Zertifikat:

[crayon-5df31bf4a0f6e023148860/]

Als Ergebnis erhalten wir zwei Dateien – den öffentlichen und privaten Teil des Zertifikats:

Zertifikatsdateien

Jetzt kannst Du den privaten Teil des Zertifikats auf dem System (bzw. den Systemen der Kollegen), auf dem Du die Passwörter entschlüsseln möchtest, installieren. Am einfachsten geht das mit einem Doppelklick auf die *.pxf-Datei.
Im Zertifikatimport-Assistent kannst Du alle Einstellungen beibehalten. Nach Eingabe des zuvor gewählten Passworts und Abschluss des Assistenten findest Du das Zertifikat bei den Benutzerzertifikaten: 

[crayon-5df31bf4a0f73255870237/]

Passwort verschlüsseln

Nun kannst Du das Passwort mit dem öffentlichen Teil des Zertifikats verschlüsseln und abspeichern:

[crayon-5df31bf4a0f74662291692/]

Passwort entschlüsseln

Anschließend kannst Du das Passwort ganz einfach durch Dein Script auslesen und verwenden:
Die PowerShell ist so schlau und erkennt das zur Entschlüsselung notwendige Zertifikat automatisch.
So kannst Du auch mehrere Zertifikate zum Beispiel für unterschiedliche Bereiche und Anforderungen erstellen und diese dann nur an den berechtigten Personenkreis weitergeben.

[crayon-5df31bf4a0f75769322895/]

Wenn Du nun die verschlüsselten Passwort-Dateien auf einem freigegebenen Laufwerk ablegst, kannst Du bzw. Deine Kollegen von verschiedenen Systemen darauf zugreifen, ohne dass Ihr bei der Ausführung des Scriptes ein Passwort eingeben müsst.
Vorausgesetzt natürlich, der ausführende Benutzer hat das entsprechende Zertifikat vorab installiert.

Print Friendly, PDF & Email

PowerShell & OneNote: Seiten (Vorlagen) kopieren

Neulich erhielt ich von einem Leser eine sehr interessante Anfrage zum Thema ‘Seite aus Vorlage erstellen’.
Da ich bisher noch keinen Weg gefunden habe, eine “OneNote Seitenvorlage” als neue Seite einzufügen, verwende ich folgenden Workaround:
Zuerst lege ich einen neuen Abschnitt “Vorlagen” an, um dort eine Seite als Vorlage mit dem gewünschten Inhalt zu erstellen. Der Inhalt dieser Seite lässt sich dann in die neu erstellte Seite kopieren.

Vorlagen-Abschnitt
[crayon-5df31bf4a107f839938091/]
Notizen Abschnitt mit der kopierten Seite
Print Friendly, PDF & Email

PowerShell & OneNote: ein Tagebuch erstellen

Ich nutze für meine täglichen Notizen ein “OneNote-Tagebuch”, welches als Notizbuch-Name das jeweilige Jahr trägt. Dieses hat 12 Abschnitte – für jeden Monat einen – und jeweils pro (Arbeits-)Tag eine Seite:

OneNote-Tagebuch
OneNote Tagebuch

Da es überhaupt keinen Spaß macht, so ein Tagebuch jedes Jahr manuell anzulegen, habe ich mir folgendes PowerShell-Script dafür gebastelt:

[crayon-5df31bf4a11f3998262286/]

So kann ich auch Jahre später noch nachvollziehen, wann ich was gemacht habe oder an welchem Datum es welches Problem mit einem bestimmten System gab…

Print Friendly, PDF & Email

PowerShell & OneNote: Notizbuch, Abschnitte und Seiten anlegen

Natürlich lassen sich mit der PowerShell auch neue OneNote-Notizbücher und darin Abschnitte und Seiten anlegen. 

Zuerst starten wir mit einem leeren Notizbuch.

Der hierfür benötigte “NotebookPath” ist wie folgt aufgebaut:
$NotebookPath = “https://d.docs.live.net/[OneDrive-ID]/Dokumente/[NotizbuchName]/”
oder alternativ bei lokaler Ablage:
“C:\Temp\MeinNotizbuch\”

[crayon-5df31bf4a1341983467133/]

Danach können Abschnitte (Tabs) zum Notizbuch hinzugefügt werden. Der “SectionPath” setzt sich wie folgt zusammen:
SectionPath = [NotebookPath] + [Abschnitts-Name] + “.one”

Also z.B. “https://d.docs.live.net/0123456789abcdef/Dokumente/MeinNotizbuch/ErsterAbschnitt.one
oder alternativ lokal:
“C:\Temp\MeinNotizbuch\ErsterAbschnitt.one”

[crayon-5df31bf4a1344220676072/]

Mit der $xmlSection wird die ID des neu angelegten Abschnitts zurückgeliefert – diese wird benötigt, um Seiten in den Abschnitt einzufügen:

[crayon-5df31bf4a1346100057183/]

Nun noch den Seitentitel ($title.Value) anpassen und fertig:

[crayon-5df31bf4a1347909154526/]

Das Ergebnis sieht dann so aus:

MeinNotizbuch

MeinNotizbuch

 
Print Friendly, PDF & Email

OneNote: vorhandene Notizbücher & Speicherorte per PowerShell auslesen

Seit es OneNote gibt, nutze ich das Programm sowohl geschäftlich als auch privat als mein 2. Gehirn, also um meine Notizen, Protokolle, Planungen, Checklisten und vieles mehr abzulegen und vor allem: wiederzufinden 😉
Und so war es naheliegend, mir mal anzuschauen, was hier mit der PowerShell alles anzustellen ist. Ein guter Einstieg dafür war Richard Siddaway’s Artikel “OneNote and XML-finding notebooks” sowie die MSDN OneNote Developer Reference unter https://msdn.microsoft.com/en-us/library/office/jj680120.aspx.
Zuerst machte es also Sinn, mir mal meine vorhandenen Notebooks inkl. deren Speicherort aufzulisten:
[crayon-5df31bf4a14dc789075064/]
Als Ergebnis erhalte ich folgende Ausgabe:

OneNote Notizbücher & Speicherpfad

OneNote Notizbücher & Speicherpfad

Alternativ auch nur ausgewählte Notizbücher:

Ausgewählte OneNote Notizbücher & Speicherpfad

Ausgewählte OneNote Notizbücher & Speicherpfad

Print Friendly, PDF & Email

ISESteroids auf aktuellem Stand halten

Nachdem ich wieder mal feststellen musste, dass ich eine “veraltete” Version der ISESteroids nutze und aufgrund Richtlinien leider kein Update-Module verwenden kann, lasse ich mir nun beim Start der ISESteroids die installierte Version sowie die aktuellste Version laut http://www.powertheshell.com/isesteroids2-2/isesteroids-version-history/  anzeigen:

ISESteroids Versionsvergleich

ISESteroids Versionsvergleich

Hierfür habe ich mir folgenden Script-Part ins Profil gepackt:
[crayon-5df31bf4a1586369941648/]
So kann ich dann direkt entscheiden, wie dringend ein Update für mich ist…
Print Friendly, PDF & Email

ISESteroids – Doping für die PowerShell ISE

Wer intensiv mit der PowerShell arbeitet, hat sich bestimmt schon über die eine oder andere Grenze des Standard-ISE-Editors geärgert. Und wie ich vielleicht auch schon den einen oder anderen Versuch mit einem Drittanbieter-Tool gestartet.
Spätestens, wenn man aber auf unterschiedlichen Kundensystemen entwickelt, muss man früher oder später wieder auf die ISE zurückgreifen, da eine Zusatz-Installation nicht gewünscht ist oder an den Lizenzkosten scheitert.
Also – in den sauren Apfel beißen, die Grenzen der ISE akzeptieren und das Beste draus machen – oder wie ich über die ISE Steroids stolpern und begeistert sein!

Was sind die ISESteroids?

Hierbei handelt es sich um ein Add-On für die Windows PowerShell ISE vom PowerShell Experten Dr. Tobias Weltner, welches zahlreiche nützliche Erweiterungen für den Standard-Editor bringt.

Download und Installation

Die ISESteroids können unter http://www.powertheshell.com/isesteroids2/download/ heruntergeladen werden und erfordern für die Installation keine spezielle Berechtigungen. Voraussetzung für die Nutzung ist PowerShell Version 3 oder höher. PowerShell 5 – User können diese direkt aus der ISE via PsGet installieren (alle anderen laden das ZIP-File):
[crayon-5df31bf4a171e101572193/]
Gestartet werden die Tools einfach mit Start-Steroids.

Erster Eindruck

Als erstes fällt die geänderte Darstellung auf:

Aussehen Standard-ISE

Standard-ISE

ISE mit ISESteroids

ISE mit ISESteroids

Neben den vielen neuen Icons finden sich die zahlreichen Erweiterungen in zusätzlichen Menüpunkten – zu viele, um sie alle hier aufzählen zu können.

Meine Highlights:

  • File Version History – (automatische) Versionierung von Scripten
  • Create Application – erstellt aus dem Script eine eigenständig lauffähige EXE-Datei
  • MyCommands – erlaubt die Erstellung eigener Menüeinträge inkl. Keyboard-Shortcut
  • Simulate – führt die cmdlets im Simulationsmodus aus – es werden keine Änderungen vorgenommen
  • Refactoring Add-On – formatiert das Script nach verschiedenen Best-Practice-Vorlagen, die je nach Gefallen an- und abgewählt werden können
  • WinMerge File Compare – 3rd Party Tool zum Unterscheiden und Zusammenführen von Dateien und Ordnern
  • Variable Monitor Add-On – zeigt alle benutzerdefinierten Variablen inkl. Inhalt an
Obwohl ich bereits vor 26 Jahren das Programmieren (damals noch Basic, Turbo Pascal und C) gelernt habe und seit vielen Jahren mit der PowerShell arbeite, erwische ich mich immer wieder dabei, “schlampig” zu scripten. Ist halt doch bequemer, “schnell mal” ‘nen Alias zu verwenden (der es einem selbst und Anderen erschwert, das Script zu lesen), oder die Kommentare gleich ganz wegzulassen.
Hier bieten die ISESteroids eine großartige Unterstützung: bereits während der Erstellung erhält man Vorschläge für “besseres Scripting” – alles, was nicht den Best Practices entspricht, wird z.B. mit einer Lampe oder einem Ausrufezeichen markiert. Der Tooltip erklärt dann das jeweilige Problem:

Beispiel: Syntax Error

Beispiel: Syntax Error

Beispiel: Hinweis auf doppelte Anführungszeichen

Beispiel: Hinweis auf doppelte Anführungszeichen

Beispiel: Hinweis auf Alias

Beispiel: Hinweis auf Alias

Diese Funktionen sind sowohl für Einsteiger wie auch für Profis super hilfreich. Speziell Einsteiger, welche noch nicht so sicher sind, können hier eine Menge lernen. Und den Profis wird einfach lästige Arbeit abgenommen.
Mit dem Refactoring AddOn kann man bequem vorhandene Scripte automatisch nach Best-Practice-Vorgaben formatieren lassen – dies ist vor allem hilfreich, wenn man Scriptteile aus dem Internet verwendet.

Beispiel Script unformatiert

Beispiel: Script unformatiert

Beispiel Script mit Refactoring Add-On formatiert

Beispiel: Script mit Refactoring Add-On formatiert

Einzig die Tatsache, die TAB-weite nicht anpassen zu können, stört mich hier etwas. TABs werden hier mit 2 Leerzeichen umgesetzt – mir persönlich gefallen 4 Leerzeichen besser.

 

Bevor ich die ISESteroids kannte, habe ich meine Funktionen hauptsächlich in einem einzigen Textfile gesammelt und per Copy / Paste dann in jedes Script gepackt, in dem ich sie verwenden wollte. Hat den Vorteil, dass das jeweilige Script weitergegeben werden kann, ohne dass man sich Gedanken machen muss, was z.B. an Modulen noch dazugehört, wird aber bei größeren Projekten sehr unübersichtlich und ist bei der Pflege eine Katastrophe.

 

Stell Dir vor, Du willst in Deiner ‘Haus-und-Hof Write-Log-Funktion’ etwas ändern und musst jedes Script einzeln anpacken… Horror…
Da kommt “Export function to module” gerade recht:

Beispiel: Funktion in PowerShell Modul exportieren

Beispiel: Funktion in PowerShell Modul exportieren

Hiermit können direkt aus dem Script heraus neue Module erstellt oder die Funktion in bestehende Module eingefügt werden.

Snippets

Zugegeben, ich habe nicht alles aus meiner Textdatei kopiert – irgendwann habe ich meine meist-verwendeten Script-Parts in Snippets gepackt. Aber auch das war recht umständlich: Snippet für die Erstellung eines neuen Snippets aufrufen, Script-Block einfügen, Snippet erstellen. Wird mit wachsender Anzahl auch schnell unübersichtlich.

 

Da ist die Snippet-Verwaltung der ISESteroids deutlich bequemer:

Beispiel: Snippet Manager

Beispiel: Snippet Manager

Versionierung

… bestand bei mir seither darin, das Script zu kopieren, das Datum in den Dateinamen zu packen und bestenfalls noch einen Kommentar mit der jeweiligen Änderung zu hinterlassen. Auch hier helfen die ISESteroids:

Beispiel Versionierung

Beispiel Versionierung

Entweder man nutzt gleich den “Auto Mode”, durch den bei jeder Speicherung automatisch ein Snapshot des Scriptes erstellt wird oder man erstellt die gewünschte Version nach Bedarf manuell. Zusätzlich können noch Notizen zur jeweiligen Version hinzugefügt werden. Sehr hilfreich ist die Vergleichsfunktion, mit der die Unterschiede zwischen dem aktuellen Stand und z.B. der letzten lauffähigen Version dargestellt werden können.

Lizenzierung / Kosten

Die ISESteroids sind je nach Funktionsumfang ab 99,- € zzgl. MwSt. zu haben (Stand Mai 2016). Für den Mehrwert, den sie bieten, absolut gerechtfertigt. Diese Investition rechnet sich innerhalb kürzester Zeit.
Die Einzeluserlizenz darf auf drei unterschiedlichen Systemen gleichzeitig genutzt und kann auf andere Systeme übertragen werden.

Fazit

Zuerst mal ein ganz dickes Lob an den Entwickler Tobias Weltner! Mit den ISESteroids habe ich viele Funktionen bekommen, die ich bei der ISE schmerzlich vermisst habe. Ich kann die ISESteroids wirklich jedem, der regelmäßig mit der PowerShell arbeitet, uneingeschränkt weiterempfehlen.

Print Friendly, PDF & Email