Daten|teiler
Kopieren als Kulturtechnik

Batch und PowerShell in einer Datei

7. Januar 2012 von Christian Imhorst

Zwischen den Jahren — wie man so schön sagt — habe ich das wirklich gute aber leider nicht mehr verfügbare Buch Windows 2003 Shell Scripting. Abläufe automatisieren ohne Programmierkenntnisse von Armin Hanisch gelesen. Alternativ kann man noch das etwas sehr teure und leider auch DRM geschützte eBook bei Addison-Wesley herunterladen. Auch wenn das Buch für Windows-Server 2003 geschrieben wurde, ist es auch für Windows Server 2008 R2 und Windows 7 ein klasse Einstieg in das Skripten mit der Windows Shell cmd.exe. Dabei lernt man die automatisierte Administration von Windows mit vergleichsweise einfachen Shell-Befehlen und ohne umfassende Programmierkenntnisse kennen. Man erfährt aber nicht nur von den Möglichkeiten, sondern auch von Grenzen der Windows Shell.

Den restlichen Eintrag lesen »

Geschrieben in Batch, Powershell, Windows | Kommentare deaktiviert für Batch und PowerShell in einer Datei

Wie man in der Batch professionelle Fenster erzeugt

29. Dezember 2011 von Christian Imhorst

Trotz Powershell wird es noch einige Zeit dauern, bis das Batch Scripting mit der cmd.exe ausstirbt. Bis dahin eignet es sich gut dazu, kleine Programme für die Steuerung von Windows zu erstellen. Als Systemverwalter, Entwickler oder Power-User kann man durch den Einsatz von Batch-Skripten einfach und schnell Zeit sparen. Da wir in einer Welt wunderbarer Aufklapp- und Popup-Menüs leben, wünschen sich viele Anwender diese Funktionen auch in der Shell, was die cmd.exe aber nicht bietet. Es gibt allerdings einen Trick, indem man ein temporäres VBScript erstellt, das dann ein Fenster erzeugt. Damit sorgt man in seinem Batchprogramm nicht nur für mehr Übersicht und mehr Professionalität in den Augen des Anwenders, man kann auch Variablen zwischen dem VBScript umd dem Batchprogramm austauschen.

Den restlichen Eintrag lesen »

Geschrieben in Windows | Kommentare deaktiviert für Wie man in der Batch professionelle Fenster erzeugt

Sicher in die Wolke mit EncFS

27. November 2011 von Christian Imhorst

Mit EncFS kann man unter Linux wichtige Dateien verschlüsseln, die aus irgendeinen Grund über Ubuntu One oder Dropbox in die Cloud sollen, und sie können auf Linux-Systemen wie Ubuntu oder Android, aber auch unter Windows, MacOS X und zukünftig unter iOS wieder entschlüsselt werden. In diesem Punkt bietet EncFS einen klaren Vorteil gegenüber anderen Verschlüsselungstools wie Truecrypt oder GnuPG.

Den restlichen Eintrag lesen »

Geschrieben in Android, Gnu/Linux, Windows | Kommentare deaktiviert für Sicher in die Wolke mit EncFS

MPlayer2 unter Ubuntu installieren

10. November 2011 von Christian Imhorst

Mit MPlayer2 gibt es schon seit einiger Zeit einen Fork meines Lieblingsplayers für Multimedia, der ohne MEncoder auskommt. Da der Fork entscheidende Verbesserungen und viele Bugfixes mitbringt, sich aber abgesehen davon bedienen lässt, wie der gute alte MPlayer, bin ich umgestiegen.

Seit Ubuntu 10.11 Oneiric Ocelot ist MPlayer2 im Repository vorhanden und kann einfach im Terminal oder über das Ubuntu Software-Center installiert werden, so dass man kein PPA wie für Ubuntu 10.04 Lucid und höher mehr benötigt:

sudo add-apt-repository ppa:ripps818/coreavc
sudo apt-get update
sudo apt-get install mplayer

Ab Oneiric installiert man dann MPlayer2 wie folgt:

$ sudo apt-get install mplayer2
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut       
Status-Informationen einlesen... Fertig
Die folgenden Pakete werden ENTFERNT:
  mplayer
Die folgenden NEUEN Pakete werden installiert:
  mplayer2
0 aktualisiert, 1 neu installiert, 1 zu entfernen und 0 nicht aktualisiert.
Es müssen 1.328 kB an Archiven heruntergeladen werden.
Nach dieser Operation werden 1.942 kB Plattenplatz freigegeben.
Möchten Sie fortfahren [J/n]?

Wie man sieht, wird das alte MPlayer-Paket entfernt und dafür MPlayer2 installiert. Der Start erfolgt nach der erfolgreichen Installation allerdings immer noch über den bekannten Befehl:

$ mplayer
MPlayer2 UNKNOWN (C) 2000-2011 MPlayer Team
Usage:   mplayer [options] [url|path/]filename

Man kann Mplayer ohne grafische Oberfläche auf der Konsole benutzen. Wer es ausprobieren möchte, kann sich das Ergebnis mit folgendem Befehl anschauen:

sudo mplayer -vo fbdev /Pfad/zum/Video

Die Rechte eines Superusers werden in diesem Testfall benötigt, weil sonst der Zugriff auf /dev/fb0 nicht gewährt wird.

Schöner ist es, MPlayer in einer Konsole innerhalb einer grafischen Oberfläche zu starten. Dazu reicht einfach

mplayer /Pfad/zum/Video

Für den Schnelleinstieg in die simple grafische Oberfläche reichen die Pfeiltasten zum Vor- und Zurückspulen, die Leertaste für Pausen, die Taste F für den Vollbildmodus und die Tasten 0 und 9 zum lauter und leiser stellen. Weitere Tasten sind:

 

Taste Funktion
Esc Ende
Leertaste Pause
10 Sekunden vorspulen
10 Sekunden zurückspulen
1 Minute vorspulen
1 Minute zurückspulen
Bild ↑ 10 Minuten vorspulen
Bild ↓ 10 Minuten zurückspulen
0 Lauter
9 Leiser
M Audio stumm schalten
F Vollbild
# Audiospur wechseln
J Untertitel wechseln
O On-Screen-Display wechseln
 

Wer eine komfortablere Benutzeroberfläche benötigt, sollte SMPlayer aus dem Software-Center probieren. Wenn man aber ein bisschen mit der Konsole zurecht kommt und Spaß daran hat, braucht man keine andere Benutzeroberfläche. Radio geht wunderbar:

mplayer http://208.80.54.28/FUTUROAAC

und DVB-T klappt auch:

mplayer dvb://arte -cache 30720 -cache-min 5

Falls das Paket youtube-dl installiert ist, kann man mit MPlayer2 auch Youtube-Videos gucken, vorausgesetzt, man hat mit der Suchmaschine seines Vertrauens eine passende URL zum Video ermittelt:

sudo apt-get install youtube-dl
mplayer $(youtube-dl -g http://www.youtube.com/watch?v=u7Dg3LrhmIY)

Geschrieben in Gnu/Linux | Kommentare deaktiviert für MPlayer2 unter Ubuntu installieren

Kleiner Bug in Tomboy Notes

16. Oktober 2011 von Christian Imhorst

Tomboy Notes, ein kleines Tool zum erstellen von Desktop-Notizen unter Ubuntu, macht erst so richtig Spaß, wenn man alle seine Einträge mit Ubuntu One synchronisieren kann, damit man sie auch auf anderen Rechnern zur Verfügung hat. Um so ärgerlicher, dass die neue Ubuntu-Version 11.10 Oneiric Ocelot einen kleinen Bug mitbringt, der das Einrichten von Tomboy für neue User unnötig erschwert.

Wenn man in den „Einstellungen“ unter „Abgleichen“ den Eintrag „Tomboy im Internet“ wählt und anschließend „Connect“ klickt, öffnet sich ein Browser-Fenster zum eigenen Ubuntu One-Konto, um Tomboy-Web zu legitimieren. Wenn das erfolgreich ist, steht dort: „Tomboy-Web-Legitimierung erfolgreich. Drücken Sie im Einstellungsfenster von Tomboy die Eingabetaste und klicken Sie auf »Speichern«, um mit dem Abgleich zu beginnen.“ Nur kann man nicht auf „Speichern“ klicken, weil der Button, anders als in der Abbildung unten, ausgegraut ist.

Der Fehler ist bekannt und wird hoffentlich bald behoben. Damit der Button nicht mehr ausgegraut ist, muss man im Feld mit der Adresse zum Server einfach etwas hinzufügen, oder den letzten Schrägstrich (Slash) von https://one.ubuntu.com/notes/ löschen. Danach kann man die Konfiguration speichern und der Abgleich der Notizen kann starten.

Geschrieben in Gnu/Linux | Kommentare deaktiviert für Kleiner Bug in Tomboy Notes

PowerShell-Workshop: Dateilisten erzeugen und auch drucken

22. September 2011 von Christian Imhorst

Das aktuelle Heft 04/2011 von Ubuntu User feiert eine Premiere: Im ersten Bash-Workshop erfährt man, wie man in der Konsole Dateien in einem Verzeichniss auflistet, zurechtschnitzt und ausdruckt. Bash-Skripte erstellen kann ich schon, ich will aber PowerShell lernen. Also habe ich den Workshop etwas abgewandelt.

Die Suche nach einem Editor mit integrierter Shell kann man bei der PowerShell etwas abkürzen, da man im Zielverzeichnis der Installation PowerShell ISE findet. Die drei Buchstaben stehen für Integrated Scripting Environment, eine grafische Benutzeroberfläche, mit der man im selben Fenster nicht nur Befehle, sondern auch Skripte ausführen, schreiben und bearbeiten kann. Ziel des Workshops ist es, eine Liste von MP3-Dateien ohne Dateiendung zu erzeugen. Um eine Dateiliste auszugeben gibt es dank der Aliase viele Möglichkeiten. So kann man wie in der Bash ls nehmen, oder auch dir. Dahinter verbirgt sich jedes Mal das Cmdlet get-childitem, kurz gci.

.

Wie man auf der Abbildung sieht, listet get-childitem mehr Parameter auf, als man vielleicht möchte. Ich will zum Beispiel nur den Namen und nicht die anderen drei Parameter Mode, LastWriteTime und Length. Um die anderen Parameter auszuschließen, braucht man nur den eingeben, den man möchte. In meinem Fall also:

gci -Name

Um die MP3-Endungen der Auflistung zu entfernen, wird im Workshop der Befehl sed benutzt, den es leider in einer Standard-Installation von Windows nicht gibt. Anstelle von sed und einem regulären Ausdruck verwende ich eine ForEach-Schleife mit dem Replace-Parameter, die durch eine Liste von Objekten geht und dabei jedes Objekt einzeln abarbeitet. Das jeweilige Objekt wird in der Schleife mit $_ angesprochen, ein Platzhalter in der aktuellen Pipeline. Eine Eigenschaft eines Objekts wird dann mit $_.NameDerEigenschaft angesprochen. Solche Platzhalter heißen Automatische Variable. Wer genau wissen möchte, welche Automatische Variable es in der PowerShell gibt, kann sich mit folgendem Befehl einen Überblick verschaffen:

get-help about_automatic_variables

Eine Auflistung der MP3-Dateien im Verzeichnis, aber ohne die Dateiendungen, sähe dann folgendermaßen aus:

gci -Name | foreach {$_ -replace ".mp3", ""} > titelliste.txt

Mit der Umleitung in die Textdatei titelliste.txt wird die Dateiliste nicht in die Konsole geschrieben, sondern gleich in die Textdatei hinein, die für die CD-Hülle ausgedruckt werden soll. Führt man den Befehl ein zweites Mal aus, stößt man allerdings auf ein Problem: In der Textdatei stehen nicht nur die Titel, sondern auch der Name der Textdatei, weil die sich nun ebenfalls im Verzeichnis befindet. Damit sie nicht angezeigt wird, kann man alle Dateien mit der Endung TXT von der Liste ausschließen.

gci -Name -Exclude *.txt | foreach {$_ -replace ".mp3", ""} > titelliste.txt

Ich möchte auch gerne überprüfen, welche Infos in die Textdatei geschrieben werden und zur Kontrolle die Dateien zusätzlich auch noch in der Konsole ausgeben. Im Workshop von Ubuntu User wird dazu der Befehl tee benutzt, der wie ein T-Stück die Ausgabe in zwei Richtungen lenkt. Das Commandlet Tee-Object bewirkt in der PowerShell dasselbe und die Kurzform ist wie in der Bash tee. Das vollständige Kommando zur Ausgabe des Verzeichnisses mit den MP3-Dateien auf der Konsole und in eine Textdatei sieht dann so aus:

gci -Name -Exclude *.txt | foreach {$_ -replace ".mp3", ""} | tee titlliste.txt
01 sad robot
02 take me to the bonuslevel because i need an extralife
03 lemmings in love
04 space invaders
05 i want to be a machine
06 1_2 player game
07 game over
08 rock'n'roll hall of fame

Den Inhalt der Textdatei kann man dann auch ausdrucken, falls man schnell mal ein CD-Cover mit den Songs drauf braucht. Dazu muss man aber erstmal wissen, welche Drucker am Rechner überhaupt angeschlossen sind. In der Bash klappt das mit dem Befehl lpstat -a, in der PowerShell benötigt man dazu ein WMI-Objekt wie win32_printer.
Das Cmdlet für die WMI-Objekte heißt Get-WmiObject oder kurz gwmi. Mit der Umleitung in das Select-Objekt wird dann nur der Name des Druckers angezeigt:

gwmi win32_printer | select name
 
name
----
Brother HL-2030 series
Microsoft XPS Document Writer

Wenn man den Drucker weiß, kann man den Inhalt der Textdatei zum Drucker umleiten, wofür in der Bash der Befehl lp zuständig ist:

Get-Content titlliste.txt | Out-Printer -name "Brother HL-2030 series"

Geschrieben in Powershell, Windows | Kommentare deaktiviert für PowerShell-Workshop: Dateilisten erzeugen und auch drucken

Wenn Anwendungen unter Windows nerven

9. September 2011 von Christian Imhorst

Wenn Anwendungen unter Windows Vista oder Windows 7 nerven, weil sie ständig nach dem Passwort eines Benutzers mit Administrationsrechten verlangen, dann liegt das an der Benutzerkontensteuerung oder auch User Account Control (UAC). Ganz schlimm fand ich es auf einem Netbook von Samsung. Wie es sich gehört, habe ich ein Benutzerkonto mit Administrationsrechten, nennen wir es Ruth, und ein einfaches Benutzerkonto für mich eingerichtet. Nach jedem Neustart und Einloggen verlangten 5 Anwendungen von Samsung Ruths Passwort, was sehr anstrengend sein kann.

Windows selbst bietet keine Bordmittel, um einzelne Anwendungen von der Benutzerkontensteuerung herauszunehmen. Man kann zwar Anwendungen über die Aufgabenplanung mit höheren Privilegien starten, aber nur über eine Verknüpfung. Das fand ich für diesen Fall zu fummelig. In den „Eigenschaften“ der einzelnen Anwendung kann man zwar die Option „Programm als Administrator ausführen“ setzen, was aber nur funktioniert, wenn man die Benutzerkontensteuerung deaktiviert hat, wovon abzuraten ist.

Letztendlich habe ich das Tool Microsoft Application Compatibility Toolkit installiert, um die UAC für bestimmte Anwendungen zu deaktivieren. Ich habe dazu zwei Anleitungen gefunden, die beide behaupten, man könne beim Compatibility Administrator den Punkt „Als Administrator ausführen“ mittels rechter Maustaste aus dem Startmenü anklicken. Bei mir ging es seltsamerweise nicht. Es klappt aber, wenn ich im Ordner „C:\Program Files\Microsoft Application Compatibility Toolkit\Compatibility Administrator“ mit der rechten Maustaste auf die Anwendung klicke, um sie mit Administrationsrechten zu starten. So wie in der Anleitung beschrieben konnte ich dann die folgenden Anwendungen aus der Benutzerkontensteuerung heraus nehmen:

  • C:\Program Files\Samsung\BatteryLifeExtender\BatteryLifeExtender.exe
  • C:\Program Files\Samsung\BatteryLifeExtender\StartUpSetup.exe
  • C:\Program Files\Samsung\Samsung Update Plus\SUPBackground.exe
  • C:\Program Files\Samsung\EasySpeedUpManager\EasySpeedUpManager2.exe
  • C:\Program Files\Samsung\SamsungFastStart\SmartRestarter.exe

Geschrieben in Windows | Kommentare deaktiviert für Wenn Anwendungen unter Windows nerven

„I don’t like spam“, oder wie man einen Mailserver testet

5. September 2011 von Christian Imhorst

Dieser Artikel erschien erstmals in freiesMagazin 09/11: Es begann mit einem Irrtum. Im Werbebrief vom Google für den AdWords-Dienst befand sich ein Gutschein über 75 Euro, der auf einen völlig fremden Menschen ausgestellt war. Wenn man Sandra Fründt, Head of Business Marketing Google Deutschland, auf ihren Fehler aufmerksam machen will, immerhin hat sie diesen Brief unterschrieben, stößt man auf ein Problem: Im Schreiben ist überhaupt keine E-Mail-Adresse angegeben. Das Unternehmen, das mit Suchmaschine und E-Mail-Dienst im Internet groß geworden ist, zeigt sich in seiner Werbung ganz schön verschlossen.

Den restlichen Eintrag lesen »

Geschrieben in Gnu/Linux | Kommentare deaktiviert für „I don’t like spam“, oder wie man einen Mailserver testet

Windows-Programme mit Python steuern

4. September 2011 von Christian Imhorst

Im Blog Der Bayer und der Würschtlmann bin ich auf den Beitrag Windows-(GUI-)Programme mit Python fernsteuern von Sebastian gestoßen. Für die Automatisierung der Windows-Programme benutzt er pywinauto, das einen sehr interessanten Eindruck macht, aber leider etwas durch die Abwesenheit von Dokumentation glänzt. Trotzdem soll man laut Sebastian schnell zu guten Ergebnissen kommen. Pywinauto ist sicherlich ein Vesuch wert, weil es objektorientierter und pythonmäßiger sein soll. Wenn man sich aber schon etwas mit dem Windows Script Host (WSH) oder dem Component Object Model (COM) auskennt, liegt einem Win32com vielleicht mehr.

Um überhaupt etwas mit Pywinauto oder Win32com zu machen, muss man Python unter Windows installiert haben. Ich habe mich zum Beispiel für Python 3.2 entschieden. Alternativ gibt es auch noch die Communuty Edition von ActivePython, das schon extra Module wie Win32com mitbringt. Beim original Python muss man auf jeden Fall noch die Erweiterung Pywin32 herunterladen, wenn man das Modul Win32com nutzen möchte. Allerdings kann es passieren, dass der erste Versuch, das Modul zu importieren, auf einen Fehler hinaus läuft:

>>> import win32com.client 
Traceback (most recent call last):
File "D:\EQ\InventoryDumps\testScript1.py", line 1, in <module>
import win32com.client as win32
File "D:\Python32\lib\site-packages\win32com\__init__.py", line 5, in <module>
import win32api, sys, os
ImportError: DLL load failed: The specified module could not be found.

Ist das der Fall, kann man das Problem mit folgendem Befehl beheben:

C:\Python32\Scripts\pywin32_postinstall.py

Wenn die Installation erfolgreich ist, steht einem die Welt der Windows-Objekte wie COM oder WSH mehr oder weniger offen. So kann man mit COM Anwendungen aus dem Microsoft Office-Paket oder den Internet Explorer automatisieren. COM dient dabei zur Interprozesskommunikation und dynamische Objekterzeugung unter Windows. Bevor man die Funktionen von COM-Objekten nutzen kann, muss man sie instanzieren, wofür die COM-Komponenten Schnittstellen anbieten. Im folgenden Beispiel wird eine Instanz des Internet Explorers durch die Angabe seiner ProgID („InternetExplorer.Application“) erzeugt:

import win32com.client
ie = win32com.client.Dispatch("InternetExplorer.Application")
ie.Visible = 1
ie.Navigate("http://www.datenteiler.de")
ie.GoHome()
ie.quit()

Nach der Instanzierung steht ein Internet Explorer bereit, der allerdings noch nicht zu sehen ist, außer als Prozess im Taskmanager oder mit dem Cmdlet Get-Process in der PowerShell. Der Prozess ist unabhängig vom Python-Interpreter. Wird die Konsole geschlossen, bleibt der Prozess erhalten und aktiv. Erst wenn man der Eigenschaft von Visible auf wahr setzt, wird diese Instanz des Internet Explorers sichtbar.
Wenn man sich mit dem Einsatz von COM-Anwendungen in der PowerShell auskennt, kommt einem der Quelltext doch bekannt vor:

$ie = New-Object -ComObject InternetExplorer.Application
$ie.Visible = $true
$ie.Navigate("http://www.datenteiler.de")
$ie.GoHome()
$ie.Quit()

Das folgende SendKey-Beispiel mit dem WSH kann auch zu einem Déjà-vu führen, wenn man den Python-Quelltext mit dem VBScript-Code vergleicht. Erstmal das Beispiel um Tastendrücke zu simulieren in Python:

import win32api
import win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
shell.Run("Notepad") 
win32api.Sleep(1500) 
shell.AppActivate("Notepad") 
win32api.Sleep(1500) 
shell.SendKeys("Hallo Welt!{ENTER}") 
shell.SendKeys("^s")
shell.SendKeys("{ENTER}")
win32api.Sleep(1500)
shell.SendKeys("Hallo.txt{ENTER}")

Das Äquivalent in VBScript sieht dann so aus:

' SendkeyBeispiel.vbs
Option Explicit
Dim objWScriptShell
Set objWScriptShell = CreateObject("WScript.Shell")
objWScriptShell.Run "notepad"
Wscript.Sleep 1500 ' Warte bis Notepad fertig ist
objWScriptShell.SendKeys "Hallo Welt!{ENTER}"
objWScriptShell.SendKeys "^s"
objWScriptShell.SendKeys "{ENTER}"
Wscript.Sleep 1500
objWScriptShell.SendKeys "Hallo.txt{ENTER}"
WScript.Quit

Man kann mit dem Win32Com-Modul in Python noch einiges mehr anfangen, zum Beispiel die Maus positionieren und Mausklicks senden. Damit sind die Möglichkeiten von Python im Component Object Model oder des Windows Script Host bei weitem noch nicht ausgeschöpft.

Geschrieben in Python, Windows | Kommentare deaktiviert für Windows-Programme mit Python steuern

Tanz den Bubblesort

29. August 2011 von Christian Imhorst

Endlich habe ich mal verstanden, wie der Bubblesort funktioniert! Nicht schlecht was die Jungs und Mädels dort Vortanzen. Hier zum Beispiel der Tanz in Python implementiert, allerdings nur mit dem unsortierten Anfang, dem sortierten Ende und ohne das Ganze im Mittelteil:

# Bubblesort in Python
 
def bubblesort(a):
    for j in range(len(a) - 1):
        for i in range(len(a) - j - 1):
            if a[i] > a[i+1]:
                tmp = a[i]
                a[i] = a[i+1]
                a[i+1] = tmp
    return a
 
a = [3, 0, 1, 8, 7, 2, 5, 4, 6, 9]
print("Unsortiert: ", a)
 
result = bubblesort(a)	
print("Sortiert  : ", result)

Ich hoffe nur, dass ich die Musik auch wieder aus meinem Kopf bekomme. ;-)

[via zipfelmaus.com]

Geschrieben in Programmieren, Python | Kommentare deaktiviert für Tanz den Bubblesort

« Previous Entries Next Entries »