powershell
Windows und die Bash
Spannende Zeiten! Microsoft gibt die Powershell frei für Linux. Und gleichzeitig gibt’s die Bash unter Windows 10.
Wie kommt man zur Shell? Die Installation geht recht einfach laut Anleitung.
Man braucht zumindest Windows 10 Anniversary Update build 14316, das prüft man am einfachsten mit „winver.exe“
Dann aktiviert man den Entwicklermodus. Einfach Windows Taste -> „Entwicklerfunktionen verwenden“
Als nächstes „Windows Features aktivieren oder deaktivieren“ und „Windows Subsystem for Linux (beta)“ wählen. Neustarten. Installation abschließen, indem der Befehl „bash“ ausgeführt wird.
Powershell Variablen schützen
Weiß jemand, wann sich das Verhalten von Powershell verändert hat? Ich habe in ein paar älteren Scripten Abschnitte ähnlich wie
$X="blabla" write-output "$X"
Hängt man im Output jetzt einen Doppelpunkt an, passiert auf Windows 2012 R2:
write-output "$X:" In Zeile:1 Zeichen:15 + write-output "$X:" + ~~~ Ungültiger Variablenverweis. Nach ":" folgte kein Zeichen, das für einen Variablennamen gültig ist. Verwenden Sie ggf. "${}", um den Namen zu begrenzen. + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : InvalidVariableReferenceWithDrive
Die Lösung ist einfach:
write-output "${X}:"
Aber warum sich das Verhalten auf einmal ändert ist unklar.
Powershell Switch
Wie geht ein select-case auf der Powershell?
switch ($(hostname)) { hosta { [string]$Config="hostA.example.com" } hostb { [string]$Config="hostB.example.com" } default { write-output "Script not configured for $(hostname)!" exit 1 } } write-output $Config
Von Batch zu PowerShell
Ein guter Grund Scripte zu migrieren könnte sein, dass viele Konstrukte einfacher und lesbarer geworden sind.
Es ist eher schwierig auf einen Blick genau zu sagen, was hier für Dateinamen erzeugt werden. Weil scheinbar Strings an festen Positionen zerschnitten werden. Das könnte ausserdem Probleme geben, wenn verschiedene Sprachversionen zum Einsatz kommen:
"%PATH%\%DATE%_%HOUR: =0%.%TIME:~3,2%.%TIME:~6,2%.zip"
Eleganter auf der Powershell
"$PATH\$(get-date -format dd.mm.yyyy_HH.mm.ss).zip"
Zwei Mal Powershell
Einfache Übung – den Inhalt einer Datei am Bildschirm ausgeben.
Dazu eine Datei test.txt
das ist ein test zeile 2
Und jetzt mal probieren, ein paar einfache Befehle auf der Shell einzugeben:
PS C:\tmp> $Input= get-content .\test.txt PS C:\tmp> foreach ($line in $Input){ >>> write-output $line >>> } PS C:\tmp>
Seltsam, es kommt überhaupt kein Output raus? Was habe ich nur falsch gemacht? In dem Script vorhin hat das doch exakt genau so ausgeschaut!
Also ein Script daraus erstellen test.ps1
$Input= get-content .\test.txt foreach ($line in $Input){ write-output $line }
Und ausführen:
PS C:\tmp> .\test.ps1 das ist ein test zeile 2
Schön – wer könnte auch erwarten, dass eine Shell zwei Mal das gleiche tun kann, mit exakt dem gleichen Input?
Powershell
Microsoft macht einem das Scripten mit Powershell schon mal ziemlich schwer:
PS C:\tmp> .\test.ps1 Die Datei "C:\tmp\test.ps1" kann nicht geladen werden, da die Ausführung von Sk ripts auf diesem System deaktiviert ist. Weitere Informationen erhalten Sie mit "get-help about_signing". Bei Zeile:1 Zeichen:11 + .\test.ps1 <<<< + CategoryInfo : NotSpecified: (:) [], PSSecurityException + FullyQualifiedErrorId : RuntimeException
So soll man das Ausführen von Scripten erlauben können:
Set-ExecutionPolicy Unrestricted
Das hilft aber auch nicht immer:
Set-ExecutionPolicy : Der Zugriff auf den Registrierungsschlüssel "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\Shel lIds\Microsoft.PowerShell" wurde verweigert. Bei Zeile:1 Zeichen:20 + Set-ExecutionPolicy <<<< Unrestricted + CategoryInfo : NotSpecified: (:) [Set-ExecutionPolicy], UnauthorizedAccessException + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand
Um das zu lösen, müssen wir den Registrierungseditor bemühen:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell] "ExecutionPolicy"="Unrestricted"
Update: Quelle
Grep Dingsda
Aufgabe: Beschreiben Sie Grep wie bei Dingsda… ohne das Wort Grep zu benutzen
Lösung: Microsoft Windows Powershell