Power Shell Kommandos


Es gibt ausgefeilte Power Shell Skripte, die großartige Ausgaben erzeugen. Da ich öfter in Umgebungen unterwegs bin wo man nicht „mal eben ein Skript auf den Rechner werfen darf“, bin ich darauf angewiesen was die Kommandozeile hergibt. Das ist erstaunlich viel, wenn auch von der Syntax her gewöhnungsbedürftig. Aber das mag daher kommen, dass ich mit UNIX „sozialisiert“ wurde. Hier ein paar Beispiele.

Zwei Dateien miteinander vergleichen

Datei 1:
Status Medium Label                   Location                                Full Protected
======================================================================
Good   [030199L1] 030199L1              [HP:MSL G3 Series_porsche:     5]   No   07/07/16 14:12:48
Good   [030195L1] Default LTO-Ultri     [HP:MSL G3 Series_porsche:     9]   No   None
Good   [030196L1] 030196L1               [HP:MSL G3 Series_porsche:    10]   No   06/15/16 14:46:22
Good   [030197L1] Default LTO-Ultri     [HP:MSL G3 Series_porsche:    11]   No   11/07/14 16:16:26
Good   [030194L1] Default LTO-Ultri     [HP:MSL G3 Series_porsche:     8]   No   None
Good   [030192L1] 030192L1               [HP:MSL G3 Series_porsche:     1]   No   None
Good   [030198L1] Default LTO-Ultri     [HP:MSL G3 Series_porsche:     4]   No   12/25/15 15:56:20

Datei 2:
Status Medium Label                   Location                                Full Protected
=======================================================================
Good   [030199L1] 030199L1               [HP:MSL G3 Series_porsche:     5]   No   07/07/16 14:12:48
Good   [030195L1] Default LTO-Ultri     [HP:MSL G3 Series_porsche:     9]   No   None
Good   [030196L1] 030196L1               [HP:MSL G3 Series_porsche:    10]   No   06/15/16 14:46:22
Good   [030197L1] Default LTO-Ultri     [HP:MSL G3 Series_porsche:    11]   No   11/07/14 16:16:26
Good   [030194L1] Default LTO-Ultri     [HP:MSL G3 Series_porsche:     8]   No   None
Good   [030198L1] Default LTO-Ultri     [HP:MSL G3 Series_porsche:     4]   No   12/25/15 15:56:20

Kommando und Ausgabe:
> compare-object (get-content datei1.txt) (get-content datei2.txt)
InputObject                                                                      SideIndicator
———–                                                                   ————-
Good   [030192L1] 030192L1              [HP:MSL G3 Series_porsche:     1]   … <=

Erklärung des „SideIndicators“:

<= Bedeutet, dass das InputObject in der ersten Datei vorhanden ist, aber nicht in der zweiten Datei.
=> Bedeutet, dass das InputObject in der zweiten Datei vorhanden ist, aber nicht in der ersten Datei.

Finden von Dateien

Beispiel:
Finde alle Dateien mit der Endung .dat im Verzeichnis C:\ProgramData\OmniBack\server\db80\dcbf
> Get-ChildItem -Path „C:\ProgramData\OmniBack\server\db80\dcbf“ -Filter *.dat -Recurse

Beispielausgabe:

Directory: C:\ProgramData\OmniBack\server\db80\dcbf\dcbf0

Mode LastWrite Time Length Name
—- ————- —— —-
-a— 4/29/2014 5:46 PM 86016 f75c3410_535fbb40_0a84_0003_45BB5F53.dat
-a— 4/29/2014 5:46 PM 45056 f75c3410_535fbb40_0a84_0006_45BB5F53.dat
-a— 5/20/2014 9:56 AM 151552 f75c3410_537afc99_084c_0015_A0FC7A53.dat
-a— 5/20/2014 9:56 AM 106496 f75c3410_537afc9a_084c_0018_A0FC7A53.dat

Directory: C:\ProgramData\OmniBack\server\db80\dcbf\dcbf1

Mode LastWrite Time Length Name
—- ————- —— —-
-a— 4/10/2014 12:58 PM 135168 f75c3410_53466afc_1760_0003_286B4653.dat
-a— 5/27/2014 3:05 PM 16384 f75c3410_53847f0e_0f54_0003_867F8453.dat
-a— 5/28/2014 10:26 AM 16384 f75c3410_53858f3f_06ac_0003_B08F8553.dat
-a— 5/28/2014 10:31 AM 32768 f75c3410_5385906c_06ac_0006_C8908553.dat
-a— 5/28/2014 6:23 PM 86016 f75c3410_5385ff41_05f0_0003_44FF8553.dat
-a— 5/28/2014 6:23 PM 49152 f75c3410_5385ff41_05f0_0006_45FF8553.dat

Dateirechte ausgeben lassen:

Die Berechtigungen können überprüft werden, indem man mit der rechten Maustaste auf die Datei klickt „Eigenschaften“ auswählt und dann zu „Sicherheit“ wechselt. Mit der Kommandozeile geht das auch:

> get-acl C:\ProgramData\OmniBack\log\AppServer\server.log | fl

Path : Microsoft.PowerShell.Core\FileSystem::C:\ProgramData\OmniBack\log\AppServer\server.log
Owner : BUILTIN\Administrators
Group : DPAD\Domain Users
Access : DPAD\Administrator Allow Modify, Synchronize
NT AUTHORITY\SYSTEM Allow FullControl
BUILTIN\Administrators Allow FullControl
BUILTIN\Users Allow ReadAndExecute, Synchronize
Audit :
Sddl : O:BAG:DUD:AI(A;ID;0x1301bf;;;S-1-5-21-282433711-2664887063-3675453912-500)(A;ID;FA;;;SY)(A;ID;FA;;;BA)(A;ID;0x
1200a9;;;BU)

Durch eine Datei „greppen“

Grep ist ein UNIX-Befehl, der es ermöglicht Dateien zu durchsuchen. Windows PowerShell kann das aber auch, und das sogar recht schnell.

Suche nach einem Stichwort in einer Datei:

> Get-Content -path „C:\debug\datei.txt“ | select-string -pattern „postgresql.conf“ – casesensitive

[ 32] CatAppend_DARecObjAttr: [01:0588] 1392211596 411/109 0:0019187 /var/opt/omni/server/db80/pg/postgresql.conf
[332] Catalog_Debug: [1:588] daID=1392211596; UID/GID=[411/109] size=[0:19187] /var/opt/omni/server/db80/pg/postgresql.conf
[332] Catalog_Debug: [1:588] daID=1392211596; UID/GID=[411/109] size=[0:19187] /var/opt/omni/server/db80/pg/postgresql.conf

Zähle wie oft ein Stichwort in einer Datei vorkommt:

> Get-Content -path „C:\debug\datei.txt“ | select-string -pattern „postgresql.conf“ – casesensitive | Measure-Object –Line

Lines Words Characters Property
—– —– ———- ——–
3

Zeige die Anzahl, ihre minimale, maximale und durchschnittliche Größe der Dateien die auf .txt enden in einem Verzeichnis an:

> ls -Filter *.txt | Measure-Object -Property length -Maximum -Minimum -Average -Sum

Count : 14
Average : 81894571,7857143
Sum : 1146524005
Maximum : 953609553
Minimum : 5607
Property : Length

Zum besseren Verständnis, hier der Inhalt:

> ls

Directory: C:\debug

Mode LastWriteTime Length Name
—- ————- —— —-
-a— 23.01.2014 12:07 61797617 OB2DBG_1.txt
-a— 23.01.2014 12:09 953609553 OB2DBG_2.txt
-a— 23.01.2014 12:04 14286295 OB2DBG_3.txt
-a— 23.01.2014 12:04 17203143 OB2DBG_4.txt
-a— 23.01.2014 12:04 13824311 OB2DBG_5.txt
-a— 23.01.2014 12:04 13987725 OB2DBG_6.txt
-a— 23.01.2014 12:04 13703561 OB2DBG_7.txt
-a— 23.01.2014 12:04 13232630 OB2DBG_8.txt
-a— 23.01.2014 12:04 30447 OB2DBG_9.txt
-a— 23.01.2014 12:04 24245773 OB2DBG_10.txt
-a— 23.01.2014 12:04 20227215 OB2DBG_11.txt
-a— 23.01.2014 12:04 300786 OB2DBG_12.txt
-a— 23.01.2014 12:04 5607 OB2DBG_13.txt
-a— 23.01.2014 12:04 69342 OB2DBG_14.txt

MD5 Prüfsummer einer Datei ausgeben:

> [BitConverter]::ToString((new-object Security.Cryptography.MD5CryptoServiceProvider).ComputeHash((new-object IO.FileInfo(„C:\dell.sdr„)).OpenRead())).Replace(„-„,““).ToLower()

Ausgabe:
4cb0488b4ee681394fb46ec6f3d80d67

Zeige die 10 letzten Zeilen einer Datei an (tail -n):

> Get-Content -path „C:\debug\OB2DBG_500.txt“ -tail 10

Zeige die letzten 10 Zeilen einer Datei und verfolge die Datei bei Änderungen (tail -f):

> Get-Content -path „C:\debug\OB2DBG_8500.txt“ -tail 10 -wait