Eine geführte Tour durch die PowerShell

Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com

Einführung

PowerShell verspricht, die Welt der Systemverwaltung und der Befehlszeilen-Shells zu revolutionieren. Von den objektbasierten Pipelines über den Fokus auf Administratoren bis hin zur enormen Reichweite in andere Microsoft-Verwaltungstechnologien verbessert die PowerShell die Produktivität von Administratoren und Power-Usern gleichermaßen drastisch.

Wenn du eine neue Technologie erlernst, ist es normal, dass du anfangs von all den unbekannten Funktionen verwirrt bist. Das gilt vielleicht ganz besonders für Benutzer/innen, die neu in der PowerShell sind, weil es ihre erste Erfahrung mit einer vollwertigen Kommandozeilen-Shell ist. Oder schlimmer noch, sie haben schon von den fantastischen integrierten Skriptfunktionen der PowerShell gehört und fürchten, in eine Welt der Programmierung gezwungen zu werden, die sie bisher aktiv gemieden haben.

Zum Glück sind diese Befürchtungen völlig unbegründet; die PowerShell ist eine Shell, die mit dir wächst und an dir wächst. Lass uns einen Rundgang machen, um zu sehen, wozu sie fähig ist:

  • PowerShell funktioniert mit den Standard-Windows-Befehlen und -Anwendungen. Du musst nicht wegwerfen, was du bereits kennst und benutzt.

  • PowerShell führt eine neue Art von Befehlen ein. PowerShell-Befehle ( Cmdlets genannt) haben eine gemeinsame Verb-Noun Syntax und bieten viele Verbesserungen gegenüber Standardbefehlen.

  • PowerShell versteht Objekte. Die direkte Arbeit mit reich strukturierten Objekten macht die Arbeit mit (und das Kombinieren von) PowerShell-Befehlen immens einfacher als die Arbeit in der Klartext-Welt der traditionellen Shells.

  • PowerShell richtet sich an Administratoren. Trotz all ihrer Fortschritte konzentriert sich die PowerShell stark auf ihre Verwendung als interaktive Shell: die Erfahrung, Befehle in einer laufenden PowerShell-Anwendung einzugeben.

  • PowerShell unterstützt Discovery. Mit drei einfachen Befehlen kannst du fast alles lernen und entdecken, was die PowerShell zu bieten hat.

  • PowerShell ermöglicht allgegenwärtiges Scripting. Mit einer vollwertigen Skriptsprache, die direkt von der Kommandozeile aus funktioniert, kannst du mit der PowerShell ganz einfach Aufgaben automatisieren.

  • PowerShell überbrückt viele Technologien. Durch die Möglichkeit, mit .NET, COM, WMI, XML und Active Directory zu arbeiten, macht PowerShell die Arbeit mit diesen zuvor isolierten Technologien einfacher als je zuvor.

  • PowerShell vereinfacht die Verwaltung von Datenspeichern. Dank des Providermodells kannst du mit der PowerShell Datenspeicher mit denselben Techniken verwalten, die du bereits für die Verwaltung von Dateien und Ordnern nutzt.

In dieser Einführungstour in die PowerShell werden wir jede dieser Säulen erkunden. Wenn du eine unterstützte Version von Windows verwendest (Windows 7 oder höher oder Windows 2012 R2 oder höher), ist Windows PowerShell bereits installiert. Allerdings ist die Open Source PowerShell Core eine deutliche Verbesserung gegenüber dieser Standardinstallation. Wenn du ein bisschen weiterkommen willst, kannst du in Rezept 1.1 mehr über das Upgrade auf PowerShell Core (oder einfach "PowerShell") erfahren.

Eine interaktive Shell

Unter ist die PowerShell in erster Linie eine interaktive Shell. Sie unterstützt zwar Skripting und andere leistungsstarke Funktionen, aber ihr Fokus als Shell liegt allem zugrunde.

Für den Einstieg in die PowerShell musst du nur powerShell.exe statt cmd.exestarten -die Shells unterscheiden sich, wenn du die mittleren und fortgeschrittenen Funktionen erkundest, aber du kannst sofort produktiv mit der PowerShell arbeiten.

Um die PowerShell zu starten, klicken Sie auf Start und geben dann PowerShell (oder pwsh wenn du vorgesprungen bist!).

Es öffnet sich ein Eingabeaufforderungsfenster der PowerShell, das fast identisch mit der traditionellen Eingabeaufforderung ihrer Vorgänger ist. Die Eingabeaufforderung PS C:\Users\Lee> zeigt an, dass die PowerShell bereit für Eingaben ist, wie in Abbildung P-1 dargestellt.

Sobald du deine PowerShell-Eingabeaufforderung gestartet hast, kannst du Befehle im DOS- und Unix-Stil eingeben, um im Dateisystem zu navigieren, wie du es mit jeder Windows- oder Unix-Eingabeaufforderung tun würdest - wie in der interaktiven Sitzung in Beispiel P-1. In diesem Beispiel verwenden wir die Befehle pushd, cd, dir, pwd und popd, um den aktuellen Standort zu speichern, im Dateisystem zu navigieren, Elemente im aktuellen Verzeichnis aufzulisten und dann zum ursprünglichen Standort zurückzukehren. Probiere es aus!

wps4 0001
Abbildung P-1. Windows PowerShell, bereit für die Eingabe
Beispiel P-1. Die Eingabe vieler Standardbefehle zur Dateibearbeitung im DOS- und Unix-Stil führt zu denselben Ergebnissen, die du auch in jeder anderen Windows-Shell erhältst
PS C:\Users\Lee> function prompt { "PS > " }
PS > pushd .
PS > cd \
PS > dir

    Directory: C:\

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----           5/8/2007   8:37 PM                Blurpark
d----           5/15/2016  4:32 PM                Chocolatey
d----            3/8/2020 12:45 PM                DXLab
d----           4/30/2020  7:00 AM                Go
d----            4/2/2016  3:05 PM                Intel
d-r--          12/15/2020  1:41 PM                Program Files
d-r--          11/28/2020  5:06 PM                Program Files (x86)
d----           5/12/2019  6:37 PM                Python27
d----           3/25/2018  1:11 PM                Strawberry
d----          12/16/2020  8:13 AM                temp
d-r--           8/11/2020  5:02 PM                Users
da---          12/16/2020 10:51 AM                Windows

PS > popd
PS > pwd

Path
----
C:\Users\Lee

In diesem Beispiel passt unser erster Befehl die Eingabeaufforderung an. In cmd.exe sieht die Anpassung der Eingabeaufforderung wie prompt $P$G aus. In der Bash sieht sie wie PS1="[\h] \w> " aus. In derPowerShell definierst du eine Funktion, die das zurückgibt, was du angezeigt haben möchtest. Rezept 11.2 stellt Funktionen vor und zeigt, wie man sie schreibt.

Der Befehl pushd ist ein alternativer Name (Alias) für den viel aussagekräftigeren PowerShell-Befehl Push-Location. Auch die Befehle cd, dir, popd und pwd haben alle einprägsamere Gegenstücke.

Obwohl hilfreich ist, um im Dateisystem zu navigieren, ist es auch hilfreich, die Tools auszuführen, die du kennst und liebst, wie ipconfig und notepad. Gib den Befehlsnamen ein und du wirst Ergebnisse wie in Beispiel P-2 sehen.

Beispiel P-2. Windows Tools und Anwendungen wie ipconfig laufen in der PowerShell genauso wie in cmd.exe
PS > ipconfig

Windows IP Configuration

Ethernet adapter Wireless Network Connection 4:

        Connection-specific DNS Suffix .  : hsd1.wa.comcast.net.
        IP Address. . . . . . . . . . . . : 192.168.1.100
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : 192.168.1.1
PS > notepad
(notepad launches)

Wenn du ipconfig eingibst, werden die IP-Adressen deiner aktuellen Netzwerkverbindungen angezeigt. Wenn du notepad eingibst, wird - wie zu erwarten - der Notepad-Editor gestartet, der mit Windows geliefert wird. Probiere auf deinem eigenen Rechner aus.

Strukturierte Befehle (Cmdlets)

PowerShell unterstützt nicht nur herkömmliche ausführbare Dateien von Windows, sondern führt auch einen neuen Befehlstyp ein, das so genannte cmdlet (ausgesprochen "command-let"). Alle cmdlets sind nach einem Verb-Noun Muster benannt, z. B. Get-Process, Get-Content, und Stop-Process.

PS > Get-Process -Name lsass

Handles  NPM(K)    PM(K)    WS(K) VM(M)   CPU(s)    Id ProcessName
-------  ------    -----    ----- -----   ------    -- -----------
    668      13     6228     1660    46            932 lsass

In gibst du in diesem Beispiel einen Wert für den Parameter ProcessName an, um einen bestimmten Prozess anhand seines Namens abzurufen.

Hinweis

Wenn du erst einmal die Handvoll gängiger Verben in der PowerShell kennst, wird es viel einfacher zu lernen, wie man mit neuen Substantiven arbeitet. Auch wenn du noch nie mit einem bestimmten Objekt gearbeitet hast (z. B. einem Dienst), gelten die Standardaktionen Get, Set, Start und Stop. Eine Liste dieser gängigen Verben findest du in Tabelle J-1 in Anhang J.

Du musst diese Cmdlet-Namen aber nicht immer vollständig eingeben. Mit der PowerShell kannst du die Taste Tab verwenden, um Cmdlet-Namen und Parameternamen automatisch zu vervollständigen:

PS > Get-Pro<TAB> -N<TAB> lsass

Für die schnelle interaktive Nutzung kann selbst das zu viel Tipparbeit sein. Um deine Effizienz zu steigern, definiert die PowerShell Aliasnamen für alle gängigen Befehle und lässt dich deine eigenen definieren. Zusätzlich zu den Alias-Namen verlangt die PowerShell nur, dass du genug vom Parameternamen eingibst, um ihn von den anderen Parametern in diesem Cmdlet zu unterscheiden. PowerShell unterscheidet auch nicht zwischen Groß- und Kleinschreibung. Wenn du, den eingebauten Alias gps (der für das Cmdlet Get-Process steht), zusammen mit der Parameterkürzung verwendest, kannst du stattdessen eingeben:

PS > gps -n lsass

Unter unterstützt die PowerShell sogar Positionsparameter für Cmdlets. Mit Positionsparametern kannst du Parameterwerte an einer bestimmten Position in der Befehlszeile angeben, anstatt sie namentlich zu nennen. Das Cmdlet Get-Process benötigt einen Prozessnamen als ersten Positionsparameter. Dieser Parameter unterstützt sogar Wildcards:

PS > gps l*s

Tiefe Integration von Objekten

Die PowerShell zeigt ihre Stärken, wenn du die Art und Weise erkundest, wie sie mit strukturierten Daten und funktionalen Objekten umgeht. Der folgende Befehl erzeugt zum Beispiel eine einfache Textzeichenfolge. Da diese Ausgabe nicht erfasst wird, zeigt PowerShell sie dir an:

PS > "Hello World"
Hello World

Der String, den du gerade erzeugt hast, ist tatsächlich ein voll funktionsfähiges Objekt aus dem .NET Framework. Für das Beispiel kannst du auf die Eigenschaft Length zugreifen, die dir sagt, wie viele Zeichen die Zeichenkette enthält. Um auf eine Eigenschaft zuzugreifen, setzt du einen Punkt zwischen das Objekt und seinen Eigenschaftsnamen:

PS > "Hello World".Length
11

Alle PowerShell-Befehle, die eine Ausgabe erzeugen, generieren diese Ausgabe auch als Objekte. Beispiel: Das Cmdlet Get-Process erzeugt ein System.Diagnostics.​Pro⁠cess Objekt, das du in einer Variablen speichern kannst. In PowerShell beginnen die Variablennamen mit einem $ Zeichen. Wenn du eine Instanz von Notepad laufen hast, speichert der folgende Befehl einen Verweis auf sie:

$process = Get-Process notepad

Da es sich bei um ein voll funktionsfähiges Process Objekt aus dem .NET Framework handelt, kannst du Methoden für dieses Objekt aufrufen, um Aktionen damit durchzuführen. Dieser Befehl ruft die Methode Kill() auf, die einen Prozess anhält. Um eine Methode aufzurufen, setzt du einen Punkt zwischen das Objekt und den Namen der Methode:

$process.Kill()

PowerShell unterstützt diese Funktion direkter durch das Cmdlet Stop-Process, aber dieses Beispiel zeigt einen wichtigen Punkt über deine Fähigkeit, mit diesen umfangreichen Objekten zu interagieren.

Administratoren als Benutzer erster Klasse

Während PowerShells Unterstützung für Objekte aus dem .NET Framework den Puls der meisten Benutzer/innen beschleunigt, konzentriert sich PowerShell weiterhin stark auf administrative Aufgaben. So unterstützt die PowerShell zum Beispiel MB (für Megabyte) und GB (für Gigabyte) als einige ihrer administrativen Standardkonstanten. Wie viele GIF-Memes passen zum Beispiel auf eine 800-GB-Festplatte?

PS > 800GB / 2.2MB
372363.636363636

Obwohl das .NET Framework traditionell eine Entwicklungsplattform ist, enthält es eine Fülle von Funktionen, die auch für Administratoren nützlich sind! Tatsächlich macht es PowerShell zu einem großartigen Kalender. Ist 2096 zum Beispiel ein Schaltjahr? PowerShell kann es dir sagen:

PS > [DateTime]::IsLeapYear(2096)
True

Wie könntest du außerdem herausfinden, wie viel Zeit bis zur Epochalypse im Jahr 2038 bleibt? Der folgende Befehl wandelt "01/19/2038" (das Datum des Jahres 2038) in ein Datum um und subtrahiert dann das aktuelle Datum davon. Er speichert das Ergebnis in der Variablen $result und greift dann auf die Eigenschaft TotalDays zu.

PS > $result = [DateTime] "01/19/2038" - [DateTime]::Now
PS > $result.TotalDays
6242.49822756465

Zusammensetzbare Befehle

Immer wenn ein Befehl eine Ausgabe erzeugt, kannst du ein Pipelinezeichen (|) verwenden, um diese Ausgabe direkt an einen anderen Befehl als Eingabe zu übergeben. Wenn der zweite Befehl die vom ersten Befehl erzeugten Objekte versteht, kann er mit den Ergebnissen arbeiten. Auf diese Weise kannst du viele Befehle miteinander verknüpfen und aus ein paar einfachen Operationen mächtige Kompositionen erstellen. Der folgende Befehl ruft zum Beispiel alle Objekte im Verzeichnis Pfad1 ab und verschiebt sie in das Verzeichnis Pfad2:

Get-Item Path1\* | Move-Item -Destination Path2

Du kannst noch komplexere Befehle erstellen, indem du der Pipeline zusätzliche Cmdlets hinzufügst. In Beispiel P-3 ruft der erste Befehl alle Prozesse ab, die auf dem System laufen. Er übergibt diese an das Cmdlet Where-Object, das einen Vergleich mit jedem eingehenden Element durchführt. In diesem Fall ist der Vergleich $_.Handles -ge 500, der prüft, ob die Eigenschaft Handles des aktuellen Objekts (dargestellt durch die Variable $_ ) größer oder gleich 500 ist. Für jedes Objekt, bei dem dieser Vergleich zutrifft, übergibst du die Ergebnisse an das Cmdlet Sort-Object und bittest es, die Objekte nach ihrer Handles Eigenschaft zu sortieren. Schließlich übergibst du die Objekte an das Cmdlet Format-Table, um eine Tabelle zu erstellen, die die Handles, Name und Description des Prozesses enthält.

Beispiel P-3. Du kannst komplexere PowerShell-Befehle erstellen, indem du Pipelines verwendest, um Cmdlets zu verknüpfen, wie hier mit Get-Process, Where-Object, Sort-Object und Format-Table gezeigt
PS > Get-Process |
    Where-Object { $_.Handles -ge 500 } |
    Sort-Object Handles |
    Format-Table Handles,Name,Description -Auto

Handles Name     Description
------- ----     -----------
    588 winlogon
    592 svchost
    667 lsass
    725 csrss
    742 System
    964 WINWORD  Microsoft Office Word
   1112 OUTLOOK  Microsoft Office Outlook
   2063 svchost

Techniken, um dich vor dir selbst zu schützen

Aliase, Wildcards und zusammensetzbare Pipelines sind zwar mächtig, aber ihre Verwendung in Befehlen, die Systeminformationen verändern, kann leicht nervenaufreibend sein. Denn was macht dieser Befehl eigentlich? Überlege es dir, aber probiere es noch nicht aus:

PS > gps [b-t]*[c-r] | Stop-Process

Es scheint alle Prozesse zu stoppen, die mit den Buchstaben b bis t beginnen und mit den Buchstaben c bis r enden. Wie kannst du dir sicher sein? Lass es dir von PowerShell sagen. Für Befehle, die Daten ändern, unterstützt PowerShell die Parameter -WhatIf und -Confirm, mit denen du sehen kannst, was ein Befehl tun würde:

PS > gps [b-t]*[c-r] | Stop-Process -whatif
What if: Performing operation "Stop-Process" on Target "ctfmon (812)".
What if: Performing operation "Stop-Process" on Target "Ditto (1916)".
What if: Performing operation "Stop-Process" on Target "dsamain (316)".
What if: Performing operation "Stop-Process" on Target "ehrecvr (1832)".
What if: Performing operation "Stop-Process" on Target "ehSched (1852)".
What if: Performing operation "Stop-Process" on Target "EXCEL (2092)".
What if: Performing operation "Stop-Process" on Target "explorer (1900)".
(...)

Unter kannst du mit dem Parameter -WhatIf und dem Pipeline-Befehl Stop-Process sehen, welche Prozesse auf deinem System angehalten werden, bevor du den Vorgang ausführst.

Beachte, dass dieses Beispiel keine Mutprobe ist! In den Worten eines Rezensenten:

Es hat nicht nur alles gestoppt, sondern auf einem meiner alten Rechner hat es das Herunterfahren mit nur einer Minute Vorwarnung erzwungen!

Es war aber sehr lustig... Wenigstens hatte ich genug Zeit, alles vorher zu speichern!

Gemeinsame Discovery-Befehle

Auch wenn das Durchlesen einer geführten Tour hilfreich ist, finde ich, dass das meiste Lernen ad hoc geschieht. Um alle Befehle zu finden, die mit einem bestimmten Platzhalter übereinstimmen, verwende das cmdlet Get-Command. Wenn du zum Beispiel Folgendes eingibst, kannst du herausfinden, welche PowerShell-Befehle (und Windows-Anwendungen) das Wort process enthalten:

PS > Get-Command *process*

CommandType     Name                     Definition
-----------     ----                     ----------
Cmdlet          Get-Process              Get-Process [[-Name] <Str...
Application     qprocess.exe             c:\windows\system32\qproc...
Cmdlet          Stop-Process             Stop-Process [-Id] <Int32...

Um zu sehen, was ein Befehl wie Get-Process bewirkt, verwende das Cmdlet Get-Help, etwa so:

PS > Get-Help Get-Process

Da PowerShell die Arbeit mit Objekten aus dem .NET Framework ermöglicht, gibt es das Cmdlet Get-Member, um Informationen über die Eigenschaften und Methoden abzurufen, die ein Objekt, z. B. ein .NET System.String, unterstützt. Wenn du eine Zeichenkette an den Befehl Get-Member übergibst, werden der Name des Typs und seine Mitglieder angezeigt:

PS > "Hello World" | Get-Member

   TypeName: System.String

Name             MemberType            Definition
----             ----------            ----------
(...)
PadLeft          Method                System.String PadLeft(Int32 tota...
PadRight         Method                System.String PadRight(Int32 tot...
Remove           Method                System.String Remove(Int32 start...
Replace          Method                System.String Replace(Char oldCh...
Split            Method                System.String[] Split(Params Cha...
StartsWith       Method                System.Boolean StartsWith(String...
Substring        Method                System.String Substring(Int32 st...
ToCharArray      Method                System.Char[] ToCharArray(), Sys...
ToLower          Method                System.String ToLower(), System....
ToLowerInvariant Method                System.String ToLowerInvariant()
ToString         Method                System.String ToString(), System...
ToUpper          Method                System.String ToUpper(), System....
ToUpperInvariant Method                System.String ToUpperInvariant()
Trim             Method                System.String Trim(Params Char[]...
TrimEnd          Method                System.String TrimEnd(Params Cha...
TrimStart        Method                System.String TrimStart(Params C...
Chars            ParameterizedProperty System.Char Chars(Int32 index) {...
Length           Property              System.Int32 Length {get;}

Ubiquitäres Skripting

PowerShell macht keinen Unterschied zwischen den Befehlen, die in der Befehlszeile eingegeben werden, und den Befehlen, die in einem Skript geschrieben sind. Deine bevorzugten Cmdlets funktionieren in Skripten und deine bevorzugten Skripttechniken (z. B. die Anweisung foreach ) funktionieren direkt in der Befehlszeile. Zum Beispiel, um die Anzahl der Handles für alle laufenden Prozesse zu addieren:

PS > $handleCount = 0
PS > foreach($process in Get-Process) { $handleCount += $process.Handles }
PS > $handleCount
19403

PowerShell bietet zwar einen Befehl ( ), um Statistiken über Sammlungen zu messen, aber dieses kurze Beispiel zeigt, wie du mit PowerShell Techniken anwenden kannst, die normalerweise eine separate Skript- oder Programmiersprache erfordern.Measure-Object

Neben der Verwendung von PowerShell-Schlüsselwörtern für die Skripterstellung kannst du auch direkt mit Objekten aus dem .NET Framework arbeiten, mit denen du vielleicht schon vertraut bist. PowerShell ist fast wie der C# Sofortmodus in Visual Studio. Beispiel P-4 zeigt, wie du mit PowerShell ganz einfach mit dem.NET Framework interagieren kannst.

Beispiel P-4. Objekte aus dem .NET Framework verwenden, um eine Webseite abzurufen und ihren Inhalt zu verarbeiten
PS > $webClient = New-Object System.Net.WebClient
PS > $content = $webClient.DownloadString(
                "https://devblogs.microsoft.com/powershell/feed/")
PS > $content.Substring(0,1000)
<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
        xmlns:content="http://purl.org/rss/1.0/modules/content/"
        xmlns:wfw="http://wellformedweb.org/CommentAPI/"
        xmlns:dc="http://purl.org/dc/elements/1.1/"
        xmlns:atom="http://www.w3.org/2005/Atom"
        xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
        xmlns:slash="http://purl.org/rss/1.0/modules/slash/" >
<channel>
        <title>PowerShell</title>
        <atom:link href="https://devblogs.microsoft.com/powershell/feed/"
        <link>https://devblogs.microsoft.com/powershell</link>
        <description>Automating the world one-liner at a time...</description>
(...)

Ad-hoc-Entwicklung

Da die Grenzen zwischen interaktiver Verwaltung und dem Schreiben von Skripten verschwimmen, werden die Verlaufspuffer von PowerShell-Sitzungen schnell zur Grundlage für die Ad-hoc-Skriptentwicklung. In diesem Beispiel rufst du das Cmdlet Get-History auf, um den Verlauf deiner Sitzung abzurufen. Für jedes Element erhältst du die Eigenschaft CommandLine (das, was du eingegeben hast) und sendest die Ausgabe an eine neue Skriptdatei.

PS > Get-History | ForEach-Object { $_.CommandLine } > c:\temp\script.ps1
PS > notepad c:\temp\script.ps1
(save the content you want to keep)
PS > c:\temp\script.ps1
Hinweis

Wenn du zum ersten Mal ein Skript in der PowerShell ausführst, musst du deine Ausführungsrichtlinie konfigurieren. Weitere Informationen zur Auswahl einer Ausführungsrichtlinie findest du in Rezept 18.1.

Weitere Informationen zum Speichern deines Sitzungsverlaufs in einem Skript findest du in Rezept 1.22.

Brückentechnologien

Wir haben gesehen, wie du mit PowerShell das .NET Framework bei deinen Aufgaben voll ausnutzen kannst, aber die Unterstützung für gängige Technologien geht noch weiter. Wie Beispiel P-5 (Fortsetzung von Beispiel P-4) zeigt, unterstützt PowerShell XML.

Beispiel P-5. Arbeiten mit XML-Inhalten in der PowerShell
PS > $xmlContent = [xml] $content
PS > $xmlContent

xml                       xml-stylesheet            rss
---                       --------------            ---
version="1.0" encoding... type="text/xsl" href="... rss

PS > $xmlContent.rss

version : 2.0
content : http://purl.org/rss/1.0/modules/content/
wfw     : http://wellformedweb.org/CommentAPI/
dc      : http://purl.org/dc/elements/1.1/
atom    : http://www.w3.org/2005/Atom
sy      : http://purl.org/rss/1.0/modules/syndication/
slash   : http://purl.org/rss/1.0/modules/slash/
channel : channel

PS > $xmlContent.rss.channel.item | select Title

title
-----
PowerShell 7.2 Preview 2 release
Announcing PowerShell Crescendo Preview.1
You’ve got Help!
SecretManagement preview 6 and SecretStore preview 4
Announcing PowerShell 7.1
Announcing PSReadLine 2.1+ with Predictive IntelliSense
Updating help for the PSReadLine module
PowerShell Working Groups
(...)

Mit PowerShell kannst du auch mit Windows Management Instrumentation (WMI) und Common Information Model (CIM) arbeiten:

PS > Get-CimInstance Win32_Bios

SMBIOSBIOSVersion : ASUS A7N8X Deluxe ACPI BIOS Rev 1009
Manufacturer      : Phoenix Technologies, LTD
Name              : Phoenix - AwardBIOS v6.00PG
SerialNumber      : xxxxxxxxxxx
Version           : Nvidia - 42302e31

Oder, wie Beispiel P-6 zeigt, kannst du mit Active Directory Service Interfaces (ADSI) arbeiten.

Beispiel P-6. Arbeiten mit Active Directory in der PowerShell
PS > [ADSI] "WinNT://./Administrator" | Format-List *

UserFlags                  : {66113}
MaxStorage                 : {-1}
PasswordAge                : {19550795}
PasswordExpired            : {0}
LoginHours                 : {255 255 255 255 255 255 255 255 255 255 255
                             255 255 255 255 255 255 255 255 255 255}
FullName                   : {}
Description                : {Built-in account for administering the computer/domain}
BadPasswordAttempts        : {0}
LastLogin                  : {5/21/2007 3:00:00 AM}
HomeDirectory              : {}
LoginScript                : {}
Profile                    : {}
HomeDirDrive               : {}
Parameters                 : {}
PrimaryGroupID             : {513}
Name                       : {Administrator}
MinPasswordLength          : {0}
MaxPasswordAge             : {3710851}
MinPasswordAge             : {0}
PasswordHistoryLength      : {0}
AutoUnlockInterval         : {1800}
LockoutObservationInterval : {1800}
MaxBadPasswordsAllowed     : {0}
RasPermissions             : {1}
objectSid                  : {1 5 0 0 0 0 0 5 21 0 0 0 121 227 252 83 122
                             130 50 34 67 23 10 50 244 1 0 0}

Wie Beispiel P-7 zeigt, kannst du die PowerShell auch für das Skripting traditioneller COM-Objekte verwenden.

Beispiel P-7. Arbeiten mit COM-Objekten in der PowerShell
PS > $firewall = New-Object -com HNetCfg.FwMgr
PS > $firewall.LocalPolicy.CurrentProfile

Type                                         : 1
FirewallEnabled                              : True
ExceptionsNotAllowed                         : False
NotificationsDisabled                        : False
UnicastResponsesToMulticastBroadcastDisabled : False
RemoteAdminSettings                          : System.__ComObject
IcmpSettings                                 : System.__ComObject
GloballyOpenPorts                            : {Media Center Extender Service,
                                               Remote Media Center Experience,
                                               Adam Test Instance, QWAVE...}
Services                                     : {File and Printer Sharing,
                                               UPnP Framework, Remote Desktop}
AuthorizedApplications                       : {Remote Assistance, Windows
                                               Messenger, Media Center, Trillian...}

Namensraum-Navigation über Provider

Ein weiterer Weg, den PowerShell für die Arbeit mit dem System bietet, sind Provider. Mit PowerShell-Providern kannst du Datenspeicher mit denselben Techniken navigieren und verwalten, die du bereits für die Arbeit mit dem Dateisystem verwendest, wie in Beispiel P-8 gezeigt.

Das funktioniert auch mit der Registry, wie in Beispiel P-9 gezeigt.

Und funktioniert sogar mit dem Zertifikatspeicher des Rechners, wie Beispiel P-10 veranschaulicht.

Viel, viel mehr

So aufregend diese Führung auch war, sie kratzt kaum an der Oberfläche, wie du die PowerShell nutzen kannst, um deine Produktivität und deine Systemmanagementfähigkeiten zu verbessern. Weitere Informationen zu den ersten Schritten mit der PowerShell findest du in Kapitel 1.

Get PowerShell Kochbuch, 4. Auflage now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.