penny.cilin
Goto Top

Frage zum Einsatz von Powershell, welche Version verwenden

Hallo Leute,

ich möchte mich mehr mit Powershell beschäftigen. Deshalb meine Fragen an die Community. Zunächst einmal die Systemvoraussetzungen:

Acer Aspire 7750G
16 GiB RAM
2 x 500 GiB SSD

Betriebssystem: Microsoft Windows 7 x64 Home Premium mit aktuellem Patchstand.
Virtualisierung: VMware Workstation 10.0.7 build-2844087
Virtuelle VMs: Windows 7 Pro (32 / 64bit), Windows 8, Windows 8.1, Windows 10 Insider Preview (32 / 64bit)

powershell_info

Nun meine Fragen:
Von Microsoft ist mittlerweile Windows Management Framework v5.1 verfügbar, auch für Windows 7.

1. Frage: Macht es Sinn diese zu nutzen, damit alle aktuellen Features (z. B.: Cmdlets) nutzbar sind?
2. Frage: Wenn ich auf das aktuelle WMF 5.1 aktualisiere, wie steht es mit der Entwicklung von Powershell Skripts für Windows 7, 8, und 8.1 aus, da diese ja nicht den aktuellen Umfang haben?
3. Kann ich bei der Entwicklung von Powershell Skripten beispielsweise die Versionsnummer vor Beginn abfragen / setzen, damit ein Skript, welches ich mit WMF 5.1 entwickelt habe, auch unter Powershell 2, 3 und / oder 4 läuft?
4. Macht es Sinn dazu eine VM zu nutzen? - Somit habe ich keine gravierenden Änderungen am Hauptsystem.

Das sind jetzt zunächst erste Fragen. Möglicherweise kommen weitere dazu.
Ich finde die Möglichkeiten von Powershell interessant, auch wenn ich wiederum eine neue Skriptsprache lerne.

OK, mit REXX arbeiten unter Windows so gut wie keiner. Das gleiche gilt auch für Perl. Ich hatte in der Vergangenheit die Idee, meine REXX Skriptsammlung auf Windows (sprich VB Skript) zu portieren.
ich mußte allerdings dann feststellen, daß dies stellenweise nicht möglich ist, auch wegen Inkonsistenzen beim Aufruf von Objekten.

Ich freue mich, über Eure Informationen und Tipps.


Gruss Penny

Content-Key: 333327

Url: https://administrator.de/contentid/333327

Ausgedruckt am: 19.03.2024 um 05:03 Uhr

Mitglied: colinardo
Lösung colinardo 26.03.2017 aktualisiert um 14:46:38 Uhr
Goto Top
Servus Penny,
also der Reihe nach. Die ursprünglich Powershell v1 spielt heute keine Rolle mehr. Windows 7 wird standardmäßig mit PS 2.0 ausgeliefert und lässt sich wie du schon schriebst auch auf eine aktuelle 5.x upgraden. Der größte Sprung im Funktionsumfang und Unterschiede fand von 2.0 auf 3.0 statt. Hier mal ein paar Beispiele:

Erstellen von Custom-Objects:
In PS 2.0 schrieb man dazu
New-Object PSObject -Property @{}
Ab PS 3.0 erstellt man optimalerweise ein Custom Object abgekürzt so
[pscustomobject] @{}
Das ist einerseits kürzer, aber auch erheblich schneller! Natürlich kannst du in 3.0 auch weiterhin die alte Schreibweise verwenden.

Dann z.B. die Beschleunigung der Verwendung des Parameters -include von Get-ChildItem, dieser wurde ebenfalls in 3.0 erheblich beschleunigt wie diverse andere ebenfalls.

Dann gibt es im Unterschied zwischen 2.0 und 3.0 noch diverse  nützliche Parameter die in 3.0 hinzugefügt wurden. Unter anderem sehr nützlich bei Get-ChildItem die Parameter -File und -Directory mit denen man schon vorher festlegen kann das man nur Datein oder Ordner auflisten möchte. Unter 2.0 musste man dies noch mit einer Abfrage einer Eigenschaft machen.
Get-ChildItem c:\ordner | ?{$_.PSIscontainer}
Um in diesem Beispiel nur Unterordner zurückgeliefert zu bekommen.
Auch dies ist natürlich weiterhin in 3.0 möglich und sollte man verwenden wenn 2.0 Kompatibilität gefordert ist.

Das waren nur ein paar der wichtigsten Unterschiede im Versionssprung von 2.0 auf 3.0. 
Es bleibt aber auch zu erwähnen das du deine Skripte jederzeit, auch mit einer aktuellen Version auf 2.0 Kompatibiliät checken kannst, indem du dir eine Konsole mit v2.0 öffnest powershell -Version 2.

Im Großen und Ganzen kann man sagen das der Sprung von 2 auf 3 erhebliche Vorteile bringt, einerseits die vielen neuen Parameter der häufig genutzten CMDLets und vor allem wegen der Geschwindigkeit.

Ob du auf Windows 7 die PS 5.x haben willst ist eher eine Frage ob du bestimmte Features intensiv nutzen willst. Ab der 5er finde ich als wichtigstes Feature die Möglichkeit "Klassen" zu erstellen. Obwohl sich auch das ebenfalls mit c# Code in PS 3.0 abfackeln lässt, ist halt dort jetzt einfacher nutzbar.

Wichtig zu wissen ist aber auch das du nicht alle neuen Features und CMDLets der 5er unter Windows 7 nutzen kannst, denn der Großteil der neuen CMDLets lässt sich erst ab WIN 8.(1)/10 nutzen.
Ein Upgrade der Windows 7 Maschinen auf min. 3.0/4.0 sehe ich aber als Pflichtprogramm an! Ist das z.B. bei Kunden nicht möglich hast du natürlich sicherzustellen as deine Skripte kompatibel sind.
Wie immer sollte man bei Zweifeln vorher die Doku zum CMDLet heranziehen um zu sehen wie es mit der Kompatibilität steht wenn man darauf angewiesen ist das das Skript auch auf älteren Versionen/Win7/XP lauffähig sein muss.

Dann zu deiner Frage ob man die PS Version abfragen kann: Eindeutige Antwort: JA natürlich, Gott sei Dank face-smile
Wenn man es manuell machen will um zu prüfen ob z.B. mindestens 3.0 installiert ist:
if ($PSVersionTable.PSVersion.Major -lt 3){write-host "ERROR: Minimum Powershell Version 3.0 is required!" -F Yellow; return
Das gleiche erreichst du aber auch noch einfacher mit einer #Requires Direktive im Kopf des Skripts
#Requires -Version <N>[.<n>]
https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powe ...

Im allgemeinen kann man aber sagen das man die meisten der neuen CMDLets in den Versionen 3.0 Aufwärts auch selbst nachbauen kann indem man die nativ verfügbaren .NET Framework  Bestandteile nutzt. Damit lässt sich so ziemlich alles erledigen was auch die neu hinzugekommenen CMDLets können. Hinzu kommt das du in Powershell die Möglichkeit hast nativen c# oder VB.net Code im Skript zu nutzen und die damit natürlich all das zur Verfügung steht was du mit einer richtigen Programmiersprache machen kannst.
Ich selbst nutze die neuen CMDLets nur in Ausnahmefällen und nur dann wenn ich sicher gehen kann das alle Maschinen auf dem neuesten Stand sind.

Zur Frage ob du eine VM zur Entwicklung nutzen sollst oder nicht, kann ich sagen "kannst du, musst du aber nicht unbedingt". Klar, bestimmte Skripte lassen
sich ja nur in einer bestimmten Umgebung entwickeln wie z.B. Exchange oder Hyper-V, da ist es natürlich sinnvoll sich seine virtuelle Umgebung passend einzurichten.

Hoffe das beantwortet dir erst mal deine wichtigsten Fragen.

Grüße Uwe
Mitglied: Penny.Cilin
Penny.Cilin 26.03.2017 um 14:53:49 Uhr
Goto Top
Hallo colinardo,

danke für Deine Rückmeldung und der Beantwortung meiner Fragen. face-smile
Ja, mir ist klar, daß ich untern Windows 7 nicht alle Features von Powershell 5 zur Verfügung habe.
Es geht auch im Hinblick auf Windows Server 2008 bis 2016. Somit bin ich nicht nur auf die Clientseite beschränkt, sondern nutze auch die Server Seite.
Ich werde in einer VM das WMF 5.1 installieren.
Somit kann ich mich dann in der VM mit Powershell 5.0 beschäftigen bzw. nutze dazu auch Microsoft Virtual Academy.

Danke für Deine Hilfe, mal schauen, was noch an Kommentaren / Meinungen in den Beitrag reinkommt.

Einen schönen sonnigen Sonntag noch


Gruss Penny
Mitglied: colinardo
Lösung colinardo 26.03.2017 aktualisiert um 19:33:28 Uhr
Goto Top
Somit bin ich nicht nur auf die Clientseite beschränkt, sondern nutze auch die Server Seite.
Das ist ja bei den grundlegenden Powershell-Kenntnissen erst mal irrelevant. Die sind gleich ob auf Client oder Serverseite. Das Schema der CMDLets ist ja überall das selbe nur das sie andere Aufgaben erledigen.
Wichtiger ist es das man das Thema Piping und die Objektorientiertheit der Powershell verinnerlicht und sich mit den Namespaces des NET-Framework vertraut macht , wenn man das drauf hat ist der Rest ein Kinderspiel und wie Vokabeln lernen.
Es hilft auch sehr viel wenn man c# lernt, davon kann man sehr viel in die Powershell übertragen.

bzw. nutze dazu auch Microsoft Virtual Academy.
Nur als Tipp. Video und Co. gut und schön. Für die Basis würde ich mir aber auch die Textdokumentation zu Powershell im Technet durchlesen und die ganzen about_** Titel. Ist zwar trocken geschrieben, aber du lernst viele Details die man sonst in den meisten Tutorials nicht mitbekommt, die aber essentiell sind. So habe ich mir zumindest Powershell damals angeeignet und dann zu jedem Topic einfache Beispiele programmiert bis es gesessen hat.