Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Voraussetzungen
Das SqlServer Das PowerShell-Modul ist für einige Beispiele in diesem Kapitel erforderlich. Weitere Informationen zum SqlServer PowerShell-Modul und Installationsanweisungen finden Sie unter SQL Server PowerShell-Übersicht. Sie wird auch in nachfolgenden Kapiteln verwendet. Laden Sie es herunter, und installieren Sie es auf Ihrem Windows Lab-Umgebungscomputer.
Rechts formatieren
In Kapitel 4 haben Sie gelernt, so weit nach links wie möglich zu filtern. Die Regel zum manuellen Formatieren der Ausgabe eines Befehls ähnelt dieser Regel, es sei denn, sie muss so weit nach rechts wie möglich erfolgen.
Die am häufigsten verwendeten Formatbefehle sind Format-Table
und Format-List
. Format-Wide
und Format-Custom
können auch verwendet werden, sind jedoch weniger verbreitet.
Wie in Kapitel 3 erwähnt, zeigt ein Befehl, der mehr als vier Eigenschaften zurückgibt, standardmäßig eine Liste an, es sei denn, es wird eine benutzerdefinierte Formatierung verwendet.
Get-Service -Name w32time |
Select-Object -Property Status, DisplayName, Can*
Status : Running
DisplayName : Windows Time
CanPauseAndContinue : False
CanShutdown : True
CanStop : True
Verwenden Sie das Cmdlet Format-Table
, um die Formatierung manuell außer Kraft zu setzen und die Ausgabe in einer Tabelle anstelle einer Liste anzuzeigen.
Get-Service -Name w32time |
Select-Object -Property Status, DisplayName, Can* |
Format-Table
Status DisplayName CanPauseAndContinue CanShutdown CanStop
------ ----------- ------------------- ----------- -------
Running Windows Time False True True
Die Standardausgabe für Get-Service
sind drei Eigenschaften in einer Tabelle.
Get-Service -Name w32time
Status Name DisplayName
------ ---- -----------
Running w32time Windows Time
Verwenden Sie das Cmdlet Format-List
, um die Standardformatierung außer Kraft zu setzen und die Ergebnisse in einer Liste zurückzugeben.
Get-Service -Name w32time | Format-List
Beachten Sie, dass durch das einfache Weiterleiten von Get-Service
an Format-List
per Pipeline zusätzliche Eigenschaften zurückgegeben wurden. Dies ist nicht bei jedem Befehl der Fall, da das Format für diesen speziellen Befehl hinter den Kulissen eingerichtet wird.
Name : w32time
DisplayName : Windows Time
Status : Running
DependentServices : {}
ServicesDependedOn : {}
CanPauseAndContinue : False
CanShutdown : True
CanStop : True
ServiceType : Win32OwnProcess, Win32ShareProcess
Das wichtigste Element, das sie mit den Format-Cmdlets beachten müssen, ist, dass sie Formatobjekte erzeugen, die sich von normalen Objekten in PowerShell unterscheiden.
Get-Service -Name w32time | Format-List | Get-Member
TypeName: Microsoft.PowerShell.Commands.Internal.Format.FormatStartData
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Obj...
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
autosizeInfo Property Microsoft.PowerShell.C...
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property string ClassId2e4f51ef...
groupingEntry Property Microsoft.PowerShell.C...
pageFooterEntry Property Microsoft.PowerShell.C...
pageHeaderEntry Property Microsoft.PowerShell.C...
shapeInfo Property Microsoft.PowerShell.C...
TypeName: Microsoft.PowerShell.Commands.Internal.Format.GroupStartData
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Obj...
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property string ClassId2e4f51ef...
groupingEntry Property Microsoft.PowerShell.C...
shapeInfo Property Microsoft.PowerShell.C...
TypeName: Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Obj...
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property string ClassId2e4f51ef...
formatEntryInfo Property Microsoft.PowerShell.C...
outOfBand Property bool outOfBand {get;set;}
writeStream Property Microsoft.PowerShell.C...
TypeName: Microsoft.PowerShell.Commands.Internal.Format.GroupEndData
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Obj...
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property string ClassId2e4f51ef...
groupingEntry Property Microsoft.PowerShell.C...
TypeName: Microsoft.PowerShell.Commands.Internal.Format.FormatEndData
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Obj...
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property string ClassId2e4f51ef...
groupingEntry Property Microsoft.PowerShell.C...
Dies bedeutet, dass Formatbefehle nicht an die meisten anderen Befehle weitergeleitet werden können. Sie können per Pipeline an einige der Out-*
-Befehle weitergeleitet werden, aber das ist es auch schon. Aus diesem Grund sollten Sie jegliche Formatierung am Ende der Zeile (rechts formatieren) vornehmen.
Aliase
Ein Alias in PowerShell ist ein kürzerer Name für einen Befehl. PowerShell enthält eine Anzahl von integrierten Aliasen, und Sie können auch eigene Aliase definieren.
Das cmdlet Get-Alias
wird verwendet, um Aliase zu finden. Wenn Sie den Alias für einen Befehl bereits kennen, wird der Name Parameter verwendet, um zu bestimmen, welchem Befehl der Alias zugeordnet ist.
Get-Alias -Name gcm
CommandType Name Version
----------- ---- -------
Alias gcm -> Get-Command
Für den Wert des Name-Parameters können mehrere Aliase angegeben werden.
Get-Alias -Name gcm, gm
CommandType Name Version
----------- ---- -------
Alias gcm -> Get-Command
Alias gm -> Get-Member
Man sieht oft, dass der Parameter Name weggelassen wird, da es sich um einen Positionsparameter handelt.
Get-Alias gm
CommandType Name Version
----------- ---- -------
Alias gm -> Get-Member
Wenn Sie Aliase für einen Befehl suchen möchten, müssen Sie den parameter Definition verwenden.
Get-Alias -Definition Get-Command, Get-Member
CommandType Name Version
----------- ---- -------
Alias gcm -> Get-Command
Alias gm -> Get-Member
Der parameter Definition kann nicht positionell verwendet werden, daher muss er angegeben werden.
Aliase können Ihnen einige Tastenanschläge sparen, und sie sind praktisch, wenn Sie Befehle in die Konsole eingeben. Sie sollten nicht in Skripts oder code verwendet werden, den Sie speichern oder für andere freigeben. Wie in diesem Buch bereits erwähnt, ist die Verwendung vollständiger Cmdlet- und Parameternamen selbsterklärend und leichter zu verstehen.
Achten Sie beim Erstellen eigener Aliase darauf, dass sie nur in Ihrer aktuellen PowerShell-Sitzung auf Ihrem Computer vorhanden sind.
Anbieter
Ein Anbieter in PowerShell ist eine Schnittstelle, die einen dateisystemähnlichen Zugriff auf einen Datenspeicher ermöglicht. Es gibt mehrere integrierte Anbieter in PowerShell.
Get-PSProvider
Wie Sie in den folgenden Ergebnissen sehen können, gibt es integrierte Anbieter für die Registrierung, Aliase, Umgebungsvariablen, das Dateisystem, Funktionen, Variablen, Zertifikate und WSMan.
Name Capabilities Drives
---- ------------ ------
Registry ShouldProcess, Transactions {HKLM, HKCU}
Alias ShouldProcess {Alias}
Environment ShouldProcess {Env}
FileSystem Filter, ShouldProcess, Cr... {C, D}
Function ShouldProcess {Function}
Variable ShouldProcess {Variable}
Die tatsächlichen Laufwerke, die diese Anbieter verwenden, um ihren Datenspeicher verfügbar zu machen, können mit dem Cmdlet Get-PSDrive
bestimmt werden. Das Get-PSDrive
Cmdlet zeigt nicht nur die von den Anbietern bereitgestellten Laufwerke an, sondern auch die logischen Windows-Laufwerke, einschließlich der Laufwerke, die den Netzfreigaben zugeordnet sind.
Get-PSDrive
Name Used (GB) Free (GB) Provider Root
---- --------- --------- -------- ----
Alias Alias
C 18.56 107.62 FileSystem C:\
Cert Certificate \
D FileSystem D:\
Env Environment
Function Function
HKCU Registry HKEY_CURRENT_USER
HKLM Registry HKEY_LOCAL_MACHINE
Variable Variable
WSMan WSMan
Module von Drittanbietern wie das ActiveDirectory PowerShell-Modul und das SqlServer PowerShell-Modul fügen jeweils ihren eigenen PowerShell-Provider und PSDrive hinzu.
Importieren Sie die ActiveDirectory und SqlServer PowerShell-Module.
Import-Module -Name ActiveDirectory, SQLServer
Überprüfen Sie, ob weitere PowerShell-Anbieter hinzugefügt wurden.
Get-PSProvider
Beachten Sie, dass in der folgenden Ergebnismenge jetzt zwei neue PowerShell-Anbieter vorhanden sind, eines für Active Directory und ein anderer für SQL Server.
Name Capabilities Drives
---- ------------ ------
Registry ShouldProcess, Transactions {HKLM, HKCU}
Alias ShouldProcess {Alias}
Environment ShouldProcess {Env}
FileSystem Filter, ShouldProcess, Credentials {C, A, D}
Function ShouldProcess {Function}
Variable ShouldProcess {Variable}
ActiveDirectory Include, Exclude, Filter, Shoul... {AD}
SqlServer Credentials {SQLSERVER}
Ein PSDrive für jedes dieser Module wurde ebenfalls hinzugefügt.
Get-PSDrive
Name Used (GB) Free (GB) Provider Root
---- --------- --------- -------- ----
A FileSystem A:\
AD ActiveDire... //RootDSE/
Alias Alias
C 19.38 107.13 FileSystem C:\
Cert Certificate \
D FileSystem D:\
Env Environment
Function Function
HKCU Registry HKEY_CURRENT_USER
HKLM Registry HKEY_LOCAL_MACHINE
SQLSERVER SqlServer SQLSERVER:\
Variable Variable
WSMan WSMan
Auf PSDrives kann genau wie ein herkömmliches Dateisystem zugegriffen werden.
Get-ChildItem -Path Cert:\LocalMachine\CA
PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\CA
Thumbprint Subject
---------- -------
FEE449EE0E3965A5246F000E87FDE2A065FD89D4 CN=Root Agency
D559A586669B08F46A30A133F8A9ED3D038E2EA8 OU=www.verisign.com/CPS Incorp....
109F1CAED645BB78B3EA2B94C0697C740733031C CN=Microsoft Windows Hardware C...
Vergleichsoperatoren
PowerShell enthält verschiedene Vergleichsoperatoren, die verwendet werden, um Werte zu vergleichen oder Werte zu finden, die bestimmten Mustern entsprechen. Die folgende Tabelle enthält eine Liste von Vergleichsoperatoren in PowerShell.
Bei allen in der Tabelle aufgeführten Operatoren ist die Groß- und Kleinschreibung nicht zu beachten. Um die Groß- und Kleinschreibung zu berücksichtigen, stellen Sie dem Operator eine c
voran. Zum Beispiel ist, -ceq
die case-sensitive Version des Vergleichsoperators für Gleichheit (-eq
).
Bediener | Definition |
---|---|
-eq |
Gleich |
-ne |
Ungleich |
-gt |
Größer als |
-ge |
Größer als oder gleich |
-lt |
Kleiner als |
-le |
Kleiner als oder gleich |
-like |
Entspricht unter Verwendung des Platzhalterzeichens * |
-notlike |
Stimmt nicht mit dem Platzhalter * überein |
-match |
Entspricht dem angegebenen regulären Ausdruck. |
-notmatch |
Stimmt nicht mit dem angegebenen regulären Ausdruck überein. |
-contains |
Bestimmt, ob eine Sammlung einen angegebenen Wert enthält. |
-notcontains |
Bestimmt, ob eine Sammlung keinen bestimmten Wert enthält. |
-in |
Bestimmt, ob sich ein angegebener Wert in einer Sammlung befindet. |
-notin |
Ermittelt, ob ein angegebener Wert nicht in einer Sammlung enthalten ist |
-replace |
Ersetzt den angegebenen Wert. |
„PowerShell“ in gemischter Schreibweise ist gleich der Variante in Kleinbuchstaben „powershell“, wenn der Vergleichsoperator „ gleich“ verwendet wird.
'PowerShell' -eq 'powershell'
True
Es ist nicht gleich, wenn die Variante des Vergleichsoperators „gleich“ mit Beachtung der Groß-/Kleinschreibung verwendet wird.
'PowerShell' -ceq 'powershell'
False
Der Vergleichsoperator „ungleich“ kehrt die Bedingung um.
'PowerShell' -ne 'powershell'
False
„Größer als“, „Größer als oder gleich“, „Kleiner als“ und „Kleiner als oder gleich“ funktionieren alle mit Zeichenfolgen- und mit Zahlenwerten.
5 -gt 5
False
Die Verwendung von „Größer als oder gleich“ anstelle von „Größer als“ im vorherigen Beispiel gibt den booleschen Wert „true“ zurück, da fünf gleich fünf ist.
5 -ge 5
True
Basierend auf den Ergebnissen der beiden vorherigen Beispiele können Sie wahrscheinlich erraten, wie die Operatoren „Kleiner als“ und „Kleiner als oder gleich“ funktionieren.
5 -lt 10
True
Die Operatoren -like
und -match
können verwirrend sein, auch für erfahrene PowerShell-Benutzer. -like
wird mit den Platzhalterzeichen *
und ?
verwendet, um „ähnliche“ Übereinstimmungen zu erzielen.
'PowerShell' -like '*shell'
True
Der -match
Operator verwendet einen regulären Ausdruck, um den Abgleich auszuführen.
'PowerShell' -match '^.*shell$'
True
Verwenden Sie den Bereichsoperator, um die Zahlen 1 bis 10 in einer Variablen zu speichern.
$Numbers = 1..10
Ermitteln Sie, ob die $Numbers
Variable 15 enthält.
$Numbers -contains 15
False
Ermitteln Sie, ob sie die Zahl 10 enthält.
$Numbers -contains 10
True
Der -notcontains
Operator kehrt die Logik um, um festzustellen, ob die $Numbers
Variable keinen Wert enthält.
$Numbers -notcontains 15
Im vorherigen Beispiel wird der boolesche Wert „true“ zurückgegeben, da es zutrifft, dass die Variable $Numbers
15 nicht enthält.
True
Es enthält jedoch die Zahl 10, sodass dies beim Test als falsch gilt.
$Numbers -notcontains 10
False
Der -in
Vergleichsoperator wurde erstmals in PowerShell, Version 3.0, eingeführt. Es wird verwendet, um zu bestimmen, ob ein Wert in einem Array ist. Die $Numbers
Variable ist ein Array, da sie mehrere Werte enthält.
15 -in $Numbers
False
Mit anderen Worten: -in
führt denselben Test wie der Vergleichsoperator „enthält“ (contains) aus, mit der Ausnahme, dass er von der entgegengesetzten Richtung aus arbeitet.
10 -in $Numbers
True
Fünfzehn befindet sich nicht im $Numbers
Array, daher wird "false" im folgenden Beispiel zurückgegeben.
15 -in $Numbers
False
Ebenso wie der Operator -contains
, kehrt not
die Logik für den Operator -in
um.
10 -notin $Numbers
Das vorherige Beispiel gibt false zurück, weil das Array $Numbers
10 enthält und die Bedingung prüft, ob es nicht 10 enthält.
False
Ermitteln Sie, ob sich fünfzehn nicht im $Numbers
Array befindet.
15 -notin $Numbers
15 befindet sich „nicht in“ dem Array $Numbers
, weshalb der boolesche Wert „true“ zurückgegeben wird.
True
Der Operator -replace
macht genau das, woran Sie denken. Es wird verwendet, um etwas zu ersetzen. Wenn Sie einen Wert angeben, wird dieser Wert durch nichts ersetzt. Im folgenden Beispiel ersetzen Sie "Shell" durch nichts.
'PowerShell' -replace 'Shell'
Power
Wenn Sie einen Wert durch einen anderen ersetzen möchten, geben Sie den neuen Wert nach dem Muster an, das Sie ersetzen möchten. SQL Saturday in Baton Rouge ist ein Ereignis, bei dem ich jedes Jahr versuche, einen Vortrag zu halten. Im folgenden Beispiel wird das Wort "Samstag" durch die Abkürzung "Sat" ersetzt.
'SQL Saturday - Baton Rouge' -replace 'saturday','Sat'
SQL Sat - Baton Rouge
Es gibt auch Methoden wie Replace(), die zum Ersetzen von Elementen verwendet werden können, die der Funktionsweise des Ersetzungsoperators ähneln. Der Operator -replace
beachtet jedoch standardmäßig nicht die Groß-und Kleinschreibung, die Replace()-Methode hingegen berücksichtigt die Groß-/Kleinschreibung.
'SQL Saturday - Baton Rouge'.Replace('saturday','Sat')
Beachten Sie, dass das Wort "Samstag" nicht ersetzt wird. Das liegt daran, dass es in einem anderen Fall als dem Original angegeben ist.
SQL Saturday - Baton Rouge
Wenn das Wort „Samstag“ im gleichen Fall wie das Original angegeben wird, führt die Methode Ersetzen() die Ersetzung wie erwartet durch.
'SQL Saturday - Baton Rouge'.Replace('Saturday','Sat')
SQL Sat - Baton Rouge
Seien Sie vorsichtig bei der Verwendung von Methoden zur Datentransformation, denn es können unvorhergesehene Probleme auftreten, wie z.B. das Nichtbestehen des Türkei-Tests. Ein Beispiel finden Sie in meinem Blogartikel Verwenden von Pester zum Testen von PowerShell-Code mit anderen Kulturen. Ich empfehle, Operatoren anstelle von Methoden zu verwenden, wenn möglich, um diese Arten von Problemen zu vermeiden.
Während die Vergleichsoperatoren verwendet werden können, wie in den vorherigen Beispielen gezeigt, verwende ich sie in der Regel mit dem cmdlet Where-Object
, um Filter durchzuführen.
Zusammenfassung
In diesem Kapitel haben Sie mehrere Themen kennengelernt, darunter Formatierungsrecht, Aliase, Anbieter und Vergleichsoperatoren.
Rezension
- Warum ist es notwendig, die Formatierung so weit nach rechts wie möglich durchzuführen?
- Wie bestimmen Sie, wie das tatsächliche Cmdlet zum Alias
%
lautet? - Warum sollten Sie in Skripts, die Sie speichern oder mit anderen teilen, keine Aliase verwenden?
- Führen Sie eine Verzeichnisauflistung auf den Laufwerken aus, die dem Registrierungsanbieter zugeordnet sind.
- Was ist einer der Hauptvorteile bei der Verwendung des replace-Operators anstelle der replace-Methode?
Referenzen
- Format-Tabelle
- Format-Liste
- Formatübergreifend
- über_Aliases
- über_Anbieter
- über_Vergleich_Operatoren
- über_Arrays
Nächste Schritte
Im nächsten Kapitel erfahren Sie mehr über Programmablaufsteuerung, Skripting, Schleifen und bedingte Logik.