Freigeben über


Kapitel 5 - Formatierung, Aliase, Provider, Vergleich

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

  1. Warum ist es notwendig, die Formatierung so weit nach rechts wie möglich durchzuführen?
  2. Wie bestimmen Sie, wie das tatsächliche Cmdlet zum Alias % lautet?
  3. Warum sollten Sie in Skripts, die Sie speichern oder mit anderen teilen, keine Aliase verwenden?
  4. Führen Sie eine Verzeichnisauflistung auf den Laufwerken aus, die dem Registrierungsanbieter zugeordnet sind.
  5. Was ist einer der Hauptvorteile bei der Verwendung des replace-Operators anstelle der replace-Methode?

Referenzen

Nächste Schritte

Im nächsten Kapitel erfahren Sie mehr über Programmablaufsteuerung, Skripting, Schleifen und bedingte Logik.