scripting

Powershell

Written by  on Juli 27, 2015

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

Die Bash austricksen

Written by  on Januar 30, 2015

Folgende Problemstellung: In einem Shellscript soll eine Variable unter einfachen Hochkomma eingefügt werden. Von Haus aus geht das nicht, weil das einfache Hochkomma die Variable vor dem Auflösen durch die Shell schützt. Durch doppelte Hochkomma ersetzen geht auch nicht, weil die ebenfalls schon vorkommen und erhalten bleiben sollen weil diese Syntax noch vom nächsten Tool an diesen Stellen nötig sind.

> X=xy
> echo '"ab" "cd" "$X"'
"ab" "cd" "$X"

So klappt es schon mal nicht. Statt $X hätten wir gerne “xy” da stehen. Was liegt also näher, als mit dem gut alten sed zu ersetzen?

echo $(echo '"ab" "cd" "$X"' | sed s/\$X/$X/g)
"ab" "cd" "xy"

Schon klappt die Ersetzung.
Wie funktioniert das jetzt genau? Im sed wird der String “$X” mit dem Inhalt von $X ersetzt. Wichtig ist dabei das $-Zeichen mit einem \ zu quoten.