Shell Scripting

Shellp Programmierung, Pattern Matching, Kornshell, Regular Expressions

  • PowerShell,  Windows

    Umgebungsvariablen in der PowerShell

    Abfragen von Umgebungsvariablen Die Anzeige der Umgebungsvariablen war in der “alten” Kommandozwile (cmd) einfach per env durchzuführen. Die PowerShell bietet einen ähnlich einfachen Aufruf mit Get-ChildItem oder per Alias gci. Zu beachten ist, dass Get-ChildItem einen Pfad erwartet: Get-ChildItem env: Eine bestimmte Variable kann mit env: abgefragt werden: gci env:PATH Einfacher kann die Variable auch wie jeder Variable in Powershell angezeogt werden. $Env:Path Dieser Weg eignet sich besonders gut für Skripte. An dieser Stelle zeigt die PowerShell ihre Stärke. Die Variable kann mit Zeichenkettenoperationen weiter verarbeitet werden, da es ein STRING Objekt ist. Beispielsweise kann -replace zum Bearbeiten von Teilen der Variable verwendet werden: $Env:myVar=”Toast” $Env:myVar Toast $Env:myVar = $Env:myVar…

  • PowerShell,  Windows

    Powershell Test offener Ports auf einem Host

    Unter Unix ist der Test offener Ports mit telnet <hostname> <port> beispielsweise: telnet slomka.biz 443 eine übliche Vorgehensweise. Unter Windows ist ein telnet Client meist nicht installiert. Die Powershell bietet mit dem Kommando Test-NetConnection eine sehr starken Alternative: Test-NetConnection -ComputerName slomka.biz -Port 443 ComputerName : slomka.biz RemoteAddress : 81.169.145.68 RemotePort : 443 InterfaceAlias : vEthernet (Virtueller Switch Qualcomm Atheros AR9485WB-EG Wireless Network Adapter) SourceAddress : 192.168.4.202 TcpTestSucceeded : True Für Skripte ist der Parameter -InformationLevel quiet sehr nütlich. Sie gibt nur ein True oder False zurück und kann damit in Abfragen einfach ausgewertet werden. Test-NetConnection -ComputerName slomka.biz -CommonTCPPort http -InformationLevel quiet True

  • Korn Shell / Bash

    Zeichen aus Zeichenketten mit bash/ksh schneiden

    Mit bash oder Korn Shell kann man auf einfachem Wege Zeichen in Zeichenketten ermitteln, bzw. herausschneiden. Dazu ist einfach nach einer Variable mit : getrennt die erste zu ermittlende Position anzugeben, gefolgt von einem weiteren : mit der Anzahl der auszugebenden Zeichen. ${VARIABLENAME:<erstes Zeichen>:<Anzahl>} Beispiel: TEXT="Holger Slomka" echo ${TEXT:2:3} lge Ein Beispiel für eine mögliche Verwendung, ist die Ausgabe aller Zeilen einer Datei, die nicht mit # beginnen. for Zeile in `cat inifile| cut -d’ ‘ -f1`; do if [[ ${Zeile:0:1} != “#” ]]; then   echo $Zeile/span> fi done Es werden also Kommentarzeilen ausgeblendet, analog grep -v ^#.

  • Korn Shell / Bash,  Shell Scripting

    Sehr nützliche grep Funktionen

    grep wird von Linuxx/Unix Administratoren zwar sehr oft genutzt, einige sehr mächtige Optionen werden aber zu Unrecht wenig genutzt oder sind den Administratoren nicht bekannt. 1. Zeilen vor und nach der Fundstelle des Suchbegriffs ausgeben. grep bietet die äusserst nützliche Funktion, Zeilen vor und nach dem gefundenen Suchbegriff anzuzeigen. Um die Funktionen der grep Optionen darzustellen, verwende ich als Beispiel ein IBM Skript mit folgendem Inhalt, das von grep durchsucht wird: cat collector.sh #!/bin/sh binDir=`dirname ${0}` . ${binDir}/setupCmdLine.sh ${WAS_HOME}/bin/collector.sh “$@” Die Option -A zeigt n Zeilen nach der Fundstelle an. grep -A 1 setup collector.sh . ${binDir}/setupCmdLine.sh ${WAS_HOME}/bin/collector.sh “$@” Die Option -B zeigt n Zeilen vor der Fundstelle an. grep…

  • PowerShell,  SAP,  Windows

    PowerShell CmdLets für Microsoft Active Directory

    Bei einer SAP Installation unter Windows sind bestimmte Gruppen und Benutzerzuordnungen im Active Directory Voraussetzung (siehe SAP Installation Guide). Ein SAP Administrator sollte nicht Mitglied der Windows AD Administratoren Gruppe sein. Bei einer SAP Installation muss er aber sicherstellen, dass die vorausgesetzten Gruppen und Benutzer angelegt wurden. Ein Beispiel: Bei der Installation des SAP Systems HSL sind die globale Gruppe SAP_HSL_GlobalAdmin und die Benutzer hsladm und SAPServiceHSL erforderlich. Die Benutzer müssen der Gruppe zugeordnet sein. Mit folgenden Abfragen kann dies überprüft werden: Abfrage des Benutzers Get-ADUser -properties MemberOf SAPServiceHSL DistinguishedName :CN=SAPServiceHSL,CN=Users,DC=slomka,DC=biz GivenName : MemberOf : {} Name : SAPServiceRPR ObjectClass : user ObjectGUID : 11111111-11a1-1111-a1111-aaa111aaa111 SamAccountName : sapservicerpr SID :…

  • PowerShell,  SAP,  Windows

    Passwort eines Windows Service Accounts per PowerShell zurücksetzen

    Um das Passwort eines Windows Service Benutzer zu ändern, kann in der PowerShell das CmdLet Reset-ADServiceAccountPassword verwendet werden. Reset-ADServiceAccountPassword -Identity SAPServiceHSL Das Kommando funktioniert nur bei standalone manage service accounts, nicht bei group managed service accounts (gMSA).

  • PowerShell

    Auflösung von Variablen in der PowerShell gezielt steuern

    In diesem Tipp geht es um das Maskieren von Variablen und deren Auflösung in der PowerShell. Wie kann ich also zum Beispiel den Text $VAR ausgeben, ohne dass der Inhalt der Variable $VAR angezeigt wird? (Unter Auflösung einer Varibale wird die Anzeige des Inhaltes/Wertes der Variablen verstanden.) Beispiel 1 $a = "Das ist die Variable a" $b = "DAS IST b""$a und $b werden aufgelöst" Das ist die Variable a und DAS IST b werden aufgelöst Beispiel 2 In Literalstrings (umgeben mit einfachen Hochkomma) sollen Variablen nicht aufgelöst werden. '$a und $b werden nicht aufgelöst' $a und $b werden nicht aufgelöst "`$a wird nicht aufgelöst, $b schon" $a wird nicht…

  • PowerShell

    Powershell Befehle mit bestimmten Parametern ermitteln

    Ich möchte kurz erläutern, wie ein PowerShell Befehl gefunden werden kann, der einen bestimmten Parameter besitzt. Dieser Tipp erscheint auf den ersten Blick nicht sonderlich sinnvoll. An einem Beispiel wird aber schnell die sinnvolle Verwendung deutlich. Insbesondere Anfänger, welche die PowerShell erlernen, werden diese Abfrage schnell zu schätzen wissen. Ich möchte zum Beispiel alle Befehle finden, die etwas rekursiv durchsuchen (Dateien/Verzeichnisse/Regitry/etc): Get-Command|where { $_.Parameters.Keys -contains "recurse" } CommandType Name Definition ———– —- ———- Alias copy Copy-Item Cmdlet Copy-Item Copy-Item [-Path] [[-Destination]

  • PowerShell,  Windows

    Die Ausführung von PowerShell Skripten zulassen

    PowerShell Skripte dürfen in Windows standardmäßig nicht ausgeführt werden. Windows verweigert die Ausführung. Öffnen Sie die Windows PowerShell mit dem Kontextmenübefehl Als Administrator ausführen (rechter Mausklick auf das PowerShell Icon) und geben Sie den Befehl PS> Set-ExecutionPolicy RemoteSigned ein. Ich empfehle grundsätzlich die Eingabe von RemoteSigned anstatt Unrestricted. RemoteSigned erlaubt im Gegensatz zu Unrestricted die Ausführung von lokal erstellten PowerShell Skripten. Diese Skriptdateien müssen nicht signiert werden. Achtung: Sollten die Skripte auf einem anderen Rechner erstellt worden sein, so verweigert Windows die Ausführung unter Umständen (wenn der Rechner nicht in einer vertrauenwürdigen Umgebung war (siehe Internet Explorer Zones). Mit dem Befehl Set-ExecutionPolicy Allsigned müssen alle Skripte digital signiert werden. Ob…

  • PowerShell

    Zugriff auf Active Directory mit PowerShell

    Um Zugriff auf das Microsoft Windows Active Directory zu bekommen, ist das Modul ActiveDirectory erforderlich. Dieses kann über den Server Manager eingefügt werden. Vorgehensweise: Microsoft Windows Server Manager starten, im Baum links Features auswählen, dann im Hauptfenster Add Features anklicken. Im folgenden Dialogfenster Remote Server Administration Tools Role Administration Tools AD DS and AD LDS Tools aufklappen. Active Directory module for Windows PowerShell anklicken (Haken setzen) Next anklicken. Eventuell ist der Installation des .Net Frameworks zuzustimmen. Fertig. Das Modul ActiveDirectory ist jetzt verfügbar: PS > Get-Module -ListAvailable ModuleType Name ExportedCommands ———- —- —————- Manifest ActiveDirectory {}