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!
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.Process
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...}
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.