<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Daten&#124;teiler</title>
	<atom:link href="http://www.datenteiler.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.datenteiler.de</link>
	<description>Kopieren als Kulturtechnik</description>
	<lastBuildDate>Thu, 03 May 2012 19:50:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Powershell-Skript mit erhöhten Rechten von einem Netzlaufwerk aus starten</title>
		<link>http://www.datenteiler.de/powershell-skript-mit-erhoehten-rechten-von-einem-netzlaufwerk-aus-starten/</link>
		<comments>http://www.datenteiler.de/powershell-skript-mit-erhoehten-rechten-von-einem-netzlaufwerk-aus-starten/#comments</comments>
		<pubDate>Thu, 03 May 2012 19:50:40 +0000</pubDate>
		<dc:creator>Christian Imhorst</dc:creator>
				<category><![CDATA[Powershell]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.datenteiler.de/?p=7282</guid>
		<description><![CDATA[Was sich erstmal nach einer leichten Übung anhört, ein Powershell-Skript von einem Netzlaufwerk aus starten, wird kompliziert, wenn man das Skript mit erhöhten Rechten ausführen will, das Administrator-Konto aber nichts von dem Netzlaufwerk weiß. Der Hintergrund ist folgender: Das Skript liegt für den normalen Benutzer sichtbar auf dem Netzlaufwerk F, das mit dem Share \\Server01\Public [...]]]></description>
			<content:encoded><![CDATA[<p>Was sich erstmal nach einer leichten Übung anhört, ein Powershell-Skript von einem Netzlaufwerk aus starten, wird kompliziert, wenn man das Skript mit erhöhten Rechten ausführen will, das Administrator-Konto aber nichts von dem Netzlaufwerk weiß. Der Hintergrund ist folgender: Das Skript liegt für den normalen Benutzer sichtbar auf dem Netzlaufwerk F, das mit dem Share <code>\\Server01\Public</code> verbunden ist. Damit das Skript sich ausführen lässt, benötigt es die erhöhten Rechte, des Administrationskontos, was mit einem Skript <a href="http://www.heise.de/ct/hotline/PowerShell-Skript-mit-Admin-Rechten-1045393.html">von der c&#8217;t</a> geht (eine <a href="http://blogs.msdn.com/b/virtual_pc_guy/archive/2010/09/23/a-self-elevating-powershell-script.aspx">ausführlichere Version bietet Ben Armstron</a> in seinem Blog).</p>

<div class="wp_syntax"><div class="code"><pre class="powershell" style="font-family:monospace;"><span style="color: #008000;"># Prüfe, ob der User Admin-Rechte hat:</span>
<span style="color: #800080;">$identity</span> <span style="color: pink;">=</span> <span style="color: #000000;">&#91;</span>System.Security.Principal.WindowsIdentity<span style="color: #000000;">&#93;</span>::GetCurrent<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>  
<span style="color: #800080;">$principal</span> <span style="color: pink;">=</span> <span style="color: #008080; font-weight: bold;">New-Object</span> System.Security.Principal.WindowsPrincipal<span style="color: #000000;">&#40;</span><span style="color: #800080;">$identity</span><span style="color: #000000;">&#41;</span>  
<span style="color: #0000FF;">if</span><span style="color: #000000;">&#40;</span><span style="color: pink;">!</span><span style="color: #800080;">$principal</span>.IsInRole<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span>System.Security.Principal.WindowsBuiltInRole<span style="color: #000000;">&#93;</span>::Administrator<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>  
<span style="color: #000000;">&#123;</span>  
    <span style="color: #800080;">$powershell</span> <span style="color: pink;">=</span> <span style="color: #000000;">&#91;</span>System.Diagnostics.Process<span style="color: #000000;">&#93;</span>::GetCurrentProcess<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>  
    <span style="color: #800080;">$psi</span> <span style="color: pink;">=</span> <span style="color: #008080; font-weight: bold;">New-Object</span> System.Diagnostics.ProcessStartInfo <span style="color: #800080;">$powerShell</span>.Path 
&nbsp;
    <span style="color: #800080;">$script</span> <span style="color: pink;">=</span> <span style="color: #800080;">$MyInvocation</span>.MyCommand.Path
&nbsp;
    <span style="color: #800080;">$prm</span> <span style="color: pink;">=</span> <span style="color: #800080;">$script</span> 
    <span style="color: #0000FF;">foreach</span><span style="color: #000000;">&#40;</span><span style="color: #800080;">$a</span> <span style="color: #0000FF;">in</span> <span style="color: #000080;">$args</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span> 
        <span style="color: #800080;">$prm</span> <span style="color: pink;">+=</span> <span style="color: #800000;">' '</span> <span style="color: pink;">+</span> <span style="color: #800080;">$a</span> 
    <span style="color: #000000;">&#125;</span> 
    <span style="color: #800080;">$psi</span>.Arguments <span style="color: pink;">=</span> <span style="color: #800080;">$prm</span> 
    <span style="color: #800080;">$psi</span>.Verb <span style="color: pink;">=</span> <span style="color: #800000;">&quot;runas&quot;</span> 
    <span style="color: #000000;">&#91;</span>System.Diagnostics.Process<span style="color: #000000;">&#93;</span>::Start<span style="color: #000000;">&#40;</span><span style="color: #800080;">$psi</span><span style="color: #000000;">&#41;</span> <span style="color: pink;">|</span> <span style="color: #008080; font-weight: bold;">Out-Null</span> 
    <span style="color: #0000FF;">return</span>; 
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #008000;"># Hier folgt der Code, der die erhöhten Rechte benötigt:</span>
&nbsp;
<span style="color: #800080;">$wshshell</span> <span style="color: pink;">=</span> <span style="color: #008080; font-weight: bold;">new-object</span> <span style="color: #008080; font-style: italic;">-comobject</span> wscript.shell
<span style="color: #800080;">$Answer</span> <span style="color: pink;">=</span> <span style="color: #800080;">$wshshell</span>.popup<span style="color: #000000;">&#40;</span><span style="color: #800000;">&quot;Du bist User $env:USERNAME&quot;</span><span style="color: pink;">,</span><span style="color: #804000;">5</span><span style="color: pink;">,</span><span style="color: #800000;">&quot;Der Test hat geklappt!&quot;</span><span style="color: pink;">,</span><span style="color: #804000;">0</span><span style="color: #000000;">&#41;</span></pre></div></div>

<p><a href="http://www.powershellpraxis.de/Pfade.1172.0.html#c4166">Durch die &#8220;automatic variable&#8221; $MyInvocation</a> erhält man den vollen Namen des aufrufenden Skripts. Der wird benötigt, damit sich das Skript nochmal selbst aufruft, wenn es beim ersten Durchlauf feststellt, dass der Benutzer, der das Skript gestartet hat, kein Administrator ist. In diesem Fall fordert das Skript erhöhte Rechte an und lässt sich selbst nochmal laufen, wenn es sie erhalten hat. </p>
<p>Wenn der Pfad zum Skript auf <code>F:\MyShare</code> liegt, der für den normalen Benutzer bekannt ist, der Administrator das Laufwerk F: aber nicht kennt, da ihm der Pfad in der Variablen <code>$MyInvocation.MyCommand.Path</code> fremd ist, läuft das Skript auf einen Fehler. Um diesen Fehler zu vermeiden, gehe ich daher einen Umweg:</p>

<div class="wp_syntax"><div class="code"><pre class="powershell" style="font-family:monospace;"><span style="color: #008000;"># Der Speicherort F:\MyShare\ ist dem Administrator nicht bekannt, </span>
<span style="color: #008000;"># weshalb ich den Laufwerksnamen durch den UNC-Pfad ersetze:</span>
&nbsp;
<span style="color: #008000;"># Anstatt ein einfaches ...  </span>
<span style="color: #008000;"># $script = $MyInvocation.MyCommand.Path  </span>
&nbsp;
<span style="color: #008000;"># ... gehe ich einen Umweg: </span>
<span style="color: #800080;">$path</span> <span style="color: pink;">=</span> $<span style="color: #000000;">&#40;</span><span style="color: #800080;">$MyInvocation</span>.MyCommand.Path<span style="color: #000000;">&#41;</span>
<span style="color: #800080;">$script</span> <span style="color: pink;">=</span> <span style="color: #800080;">$path</span>.replace<span style="color: #000000;">&#40;</span><span style="color: #800000;">&quot;F:&quot;</span><span style="color: pink;">,</span> <span style="color: #800000;">&quot;\\Server01\Public&quot;</span><span style="color: #000000;">&#41;</span></pre></div></div>

<p>Flexibel ist die Lösung leider nicht, sie funktioniert aber, wenn Laufwerksbuchstabe, Share und Netzwerkpfad bekannt sind.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.datenteiler.de/powershell-skript-mit-erhoehten-rechten-von-einem-netzlaufwerk-aus-starten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interview mit on3-radio zum Document Freedom Day</title>
		<link>http://www.datenteiler.de/interview-mit-on3-radio-zum-document-freedom-day/</link>
		<comments>http://www.datenteiler.de/interview-mit-on3-radio-zum-document-freedom-day/#comments</comments>
		<pubDate>Thu, 29 Mar 2012 16:04:47 +0000</pubDate>
		<dc:creator>Christian Imhorst</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Publikationen]]></category>

		<guid isPermaLink="false">http://www.datenteiler.de/?p=7242</guid>
		<description><![CDATA[Zum Document Freedom Day habe ich gestern on3-radio, das ist ein Jugendradio des Bayerischen Rundfunks, ein Interview zu Freie Software und Open Source gegeben. Den Podcast der gestrigen Sendung kann man online hören, aber auch als MP3 herunterladen. Ich habe zwar Philosophie studiert, aber warum ich zum Schluss des Interviews als Philosoph bezeichnet werde, damit [...]]]></description>
			<content:encoded><![CDATA[<p>Zum <a href="http://documentfreedom.org/">Document Freedom Day</a> habe ich gestern <a href="http://on3.de/">on3-radio</a>, das ist ein Jugendradio des Bayerischen Rundfunks, ein <a href="http://on3.de/e/13555">Interview zu Freie Software und Open Source</a> gegeben. Den Podcast der gestrigen Sendung kann man online hören, aber auch <a href="http://cdn-storage.br.de/on3/words/80/60dbe7775450344c89e568da30c5ab9674d5010c.mp3">als MP3 herunterladen</a>. Ich habe zwar Philosophie studiert, aber warum ich zum Schluss des Interviews als Philosoph bezeichnet werde, damit habe ich nichts zu tun. :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.datenteiler.de/interview-mit-on3-radio-zum-document-freedom-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://cdn-storage.br.de/on3/words/80/60dbe7775450344c89e568da30c5ab9674d5010c.mp3" length="18440192" type="audio/mpeg" />
		</item>
		<item>
		<title>Eine neues Design für die FreeDOS-Homepage</title>
		<link>http://www.datenteiler.de/eine-neues-design-fuer-die-freedos-homepage/</link>
		<comments>http://www.datenteiler.de/eine-neues-design-fuer-die-freedos-homepage/#comments</comments>
		<pubDate>Sun, 18 Mar 2012 11:40:36 +0000</pubDate>
		<dc:creator>Christian Imhorst</dc:creator>
				<category><![CDATA[FreeDOS]]></category>

		<guid isPermaLink="false">http://www.datenteiler.de/?p=7175</guid>
		<description><![CDATA[Die Webseite freedos.org soll ein neues Aussehen erhalten. Wer das neue Aussehen mitgestalten möchte, wird dazu auf der Testseite unter test.freedos.org eingeladen. Nach einer kurzen Erklärung, warum ein neues Design nötig ist, schließlich ist die Seite seit 1995 gewachsen, folgen Hinweise, wie man das FreeDOS-Projekt bei der neuen Webseite unterstützen kann. Die Testseite ist allerdings [...]]]></description>
			<content:encoded><![CDATA[<p>Die Webseite <a href="http://www.freedos.org/">freedos.org</a> soll ein neues Aussehen erhalten. Wer das neue Aussehen mitgestalten möchte, wird dazu auf der Testseite unter <a href="http://test.freedos.org/">test.freedos.org</a> eingeladen. </p>
<p>Nach einer kurzen Erklärung, warum ein neues Design nötig ist, schließlich ist die Seite seit 1995 gewachsen, folgen Hinweise, wie man das FreeDOS-Projekt bei der neuen Webseite unterstützen kann. Die Testseite ist allerdings bislang nur ein Prototyp und noch nicht das abschließende Design.</p>
<ul>
<li>Bislang sind noch nicht alle Seiten überarbeitet. Links verweisen auch noch auf die alte Webseite.</li>
<li>Die verwendete Schriftart steht auch noch nicht fest.</li>
<li>Abstände und Positionierung auf der Webseite sind nur ungefähr und auch noch nicht festgelegt. </li>
<li>Die Seite benutzt noch Bilder als Platzhalter. Das soll sich aber in der nächsten Version ändern.</li>
<li>Auf kleinen Bildschirmen sieht die Webseite noch nicht gut aus.</li>
<li>Auf mobilen Geräten wie Smartphones funktioniert die Seite auch noch nicht, was bald behoben werden soll.</li>
</ul>
<p>Wer jetzt erkennt, was das Projekt auf der Webseite unbedingt verbessern sollen muss, kann das in einem <a href="https://docs.google.com/spreadsheet/viewform?formkey=dDFLckFqTV9kZGxEeXZpLTBVUU4xSnc6MQ">Formular des FreeDOS-Projekts bei Google Docs</a> festhalten. Das Projekt freut sich über jedes Feedback. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.datenteiler.de/eine-neues-design-fuer-die-freedos-homepage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Schwierige Hardware unter Windows 7: Der Canon PIXMA MP780</title>
		<link>http://www.datenteiler.de/schwierige-hardware-unter-windows-7-der-canon-pixma-mp780/</link>
		<comments>http://www.datenteiler.de/schwierige-hardware-unter-windows-7-der-canon-pixma-mp780/#comments</comments>
		<pubDate>Tue, 13 Mar 2012 19:20:03 +0000</pubDate>
		<dc:creator>Christian Imhorst</dc:creator>
				<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.datenteiler.de/?p=7093</guid>
		<description><![CDATA[Es gibt ein allgemeines Vorurteil, dass Hardware besonders schwierig unter Gnu/Linux zu installieren sein soll. Was ich allerdings mit dem Canon PIXMA MP780 unter Windows 7 erlebt habe, hatte ich unter Linux so noch nie. Dabei fängt alles ganz harmlos an. Verbindet man den Drucker über USB-Kabel mit dem Rechner, wird er vom Online-Update erkannt [...]]]></description>
			<content:encoded><![CDATA[<p>Es gibt ein allgemeines Vorurteil, dass Hardware besonders schwierig unter Gnu/Linux zu installieren sein soll. Was ich allerdings mit dem Canon PIXMA MP780 unter Windows 7 erlebt habe, hatte ich unter Linux so noch nie. Dabei fängt alles ganz harmlos an. Verbindet man den Drucker über USB-Kabel mit dem Rechner, wird er vom Online-Update erkannt und es werden auch die richtigen Treiber für das Fax und den Scanner heruntergeladen. Beim Drucker läuft das Update allerdings auf Fehler. Der Grund ist vermutlich, dass der Treiber, der über das Windows-Update heruntergeladen wird, irgendwie fehlerhaft ist. Den Treiber manuell zu installieren funktioniert nicht, weil immer wieder das Windows-Update mit seinem Treiber dazwischen grätscht. Geholfen hat letztendlich folgende Vorgehensweise, bei der es auf ein haarscharfes <em>timeing</em> ankommt:</p>
<p><span id="more-7093"></span></p>
<ol>
<li>Zuerst löscht man den Drucker unter &#8220;Geräte und Drucker&#8221; und entfernt alle Gerätetreiber für den Drucker über den Geräte-Manager.</li>
<li>Dann schaltet man den Drucker aus und trennt ihn vom PC.</li>
<li>Den Treiber lädt man am besten direkt von der <a href="http://www.usa.canon.com/cusa/support/consumer/printers_multifunction/pixma_mp_series/pixma_mp780#DriversAndSoftware">Canon-Seite in den USA</a> herunter. Für die Windows 7 64bit-Edition ist das übrigens die Datei <code>mp780vst64620en.exe</code>.</li>
<li>Nachdem man die Datei ausgeführt hat, erscheint folgendes Fenster:<br />
<a href="http://www.datenteiler.de/wp-content/uploads/2012/03/MP780.png"><img src="http://www.datenteiler.de/wp-content/uploads/2012/03/MP780-300x214.png" alt="" title="MP780" width="300" height="214" class="aligncenter size-medium wp-image-7096" /></a>
</li>
<li>Wenn man jetzt den Drucker über USB wieder mit dem PC verbindet und ihn einschaltet, wird es hektisch: Sobald die Ballonmeldung unten rechts in der Taskleiste erscheint, die anzeigt, dass neue Hardware installiert wird, muss man auf die Meldung doppelklicken und anschließend &#8220;Herunterladen von Treibersoftware von Windows Update überspringen&#8221; auswählen und bestätigen.</li>
<li>Die Treiberinstallation sollte jetzt fehlgeschlagen sein und folgendes im Fenster stehen:<br />
<a href="http://www.datenteiler.de/wp-content/uploads/2012/03/MP780_2.png"><img src="http://www.datenteiler.de/wp-content/uploads/2012/03/MP780_2-300x214.png" alt="" title="MP780_2" width="300" height="214" class="aligncenter size-medium wp-image-7098" /></a>
</li>
<li>Wenn man das Fenster wieder geschlossen hat, startet man das Programm <code>mp780vst64620en.exe</code> nochmal.</li>
<li>Erscheint das Fenster erneut, das anzeigt, dass wieder versucht wird, den Drucker zu erkennen, muss man wieder schnell sein, um den Geräte-Manager zu öffnen, damit man dort mit der rechten Maustaste auf den nicht installierten Drucker klickt und &#8220;Nach geänderter Hardware suchen&#8221; auswählt. </li>
<li>Jetzt sollte das Windows-Update den richtigen Treiber erkennen und das Fenster &#8220;Printer Port&#8221; ohne Fehlermeldung schließen.<br />&nbsp;<br /></li>
</ol>
<p>Wenn das alles geklappt hat, sollte der Drucker als Standarddrucker unter &#8220;Geräte und Drucker&#8221; aufgeführt werden. Falls nicht, kann man den Drucker MP 780 jetzt zumindest mit dem richtigen Treiber hinzufügen.<br />
<br /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.datenteiler.de/schwierige-hardware-unter-windows-7-der-canon-pixma-mp780/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wo ist meine Form geblieben?</title>
		<link>http://www.datenteiler.de/wo-ist-meine-form-geblieben/</link>
		<comments>http://www.datenteiler.de/wo-ist-meine-form-geblieben/#comments</comments>
		<pubDate>Sun, 11 Mar 2012 18:28:37 +0000</pubDate>
		<dc:creator>Christian Imhorst</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[ansicht]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[visual studio]]></category>

		<guid isPermaLink="false">http://www.datenteiler.de/?p=7083</guid>
		<description><![CDATA[Unter Visual Studio 2008 war mein Formdesigner plötzlich verschwunden. Die Datei für die Form Form1.Designer.vb war zwar noch da, auch mit dem Quellcode für die Form, aber die Entwurfsansicht war weg. Vermutlich war irgendetwas an der Projektdatei kaputt gegangen. Um die Entwurfsansicht wieder herzustellen habe ich Visual Studio geschlossen und die drei Dateien für die [...]]]></description>
			<content:encoded><![CDATA[<p>Unter Visual Studio 2008 war mein Formdesigner plötzlich verschwunden. Die Datei für die Form <em>Form1.Designer.vb</em> war zwar noch da, auch mit dem Quellcode für die Form, aber die Entwurfsansicht war weg. Vermutlich war irgendetwas an der Projektdatei kaputt gegangen. </p>
<p>Um die Entwurfsansicht wieder herzustellen habe ich Visual Studio geschlossen und die drei Dateien für die Form</p>
<ul>
<li>Form1.Designer.vb</li>
<li>Form1.resx</li>
<li>Form1.vb</li>
</ul>
<p>in einen neuen Unterordner <em>tmp</em> kopiert und die Originale gelöscht. Anschließend habe ich Visual Studio erneut gestartet und eine neue Windows Form mit dem selben Namen, hier <em>Form1</em> wieder erstellt. Dann habe ich Visual Studio geschlossen und die alten Dateien aus dem Ordner <em>tmp</em> wieder zurück kopiert. Nach einem erneuten Start von Visual Studio war die alte Formansicht wieder hergestellt. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.datenteiler.de/wo-ist-meine-form-geblieben/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mini HTML-Einführung</title>
		<link>http://www.datenteiler.de/mini-html-einfuehrung/</link>
		<comments>http://www.datenteiler.de/mini-html-einfuehrung/#comments</comments>
		<pubDate>Sun, 12 Feb 2012 21:08:01 +0000</pubDate>
		<dc:creator>Christian Imhorst</dc:creator>
				<category><![CDATA[Publikationen]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[html 5]]></category>

		<guid isPermaLink="false">http://www.datenteiler.de/?p=7060</guid>
		<description><![CDATA[Mein Text Mini HTML-Einführung war schon ganz schön in die Jahre gekommen. Kein Wunder, den Text hatte ich schließlich 2003 geschrieben, und seit dem ist wirklich viel passiert. Daher habe ich ihn jetzt aktualisiert und an HTML 5 angepasst. Die Mini HTML-Einführung ist eine kleine Einführung in HTML, um an einem Tag eine Homepage online [...]]]></description>
			<content:encoded><![CDATA[<p>Mein Text <a href="http://www.datenteiler.de/texte-und-artikel/mini-html-einfuhrung/">Mini HTML-Einführung</a> war schon ganz schön in die Jahre gekommen. Kein Wunder, den Text hatte ich schließlich 2003 geschrieben, und seit dem ist wirklich viel passiert. Daher habe ich ihn jetzt aktualisiert und an HTML 5 angepasst. </p>
<p>Die Mini HTML-Einführung ist eine kleine Einführung in HTML, um an einem Tag eine Homepage online zu bringen, die dazu noch nett aussieht, wenn auch ein bisschen grau. Das Ergebnis der Bemühungen habe ich <a href="http://www.datenteiler.de/Mini-HTML/index.html">hier bereitgestellt</a>, damit man es auch mal sehen kann. Wer möchte, kann sich die Dateien auch <a href="http://www.datenteiler.de/Mini-HTML/Mini-HTML.zip">herunterladen</a>. </p>
<p>Wer gut englisch kann, sollte unbedingt <a href="http://diveintohtml5.info/">Dive Into HTML5</a> von Mark Pilgrim lesen. Pilgrim hat einen erfrischenden Schreibstil mit schönen Vergleichen, die aber nicht die wesentlichen Informationen verwässern. Bei ihm wird die trockene Materie zu einem lesenswerten Werk für HTML-Entwickler und welche, die es werden wollen. Um weiter in die Welt von HTML 5 abzutauchen, sollte man nach der Mini HTML-Einführung auf jeden Fall das Grundgerüst haben.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.datenteiler.de/mini-html-einfuehrung/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Batch und PowerShell in einer Datei</title>
		<link>http://www.datenteiler.de/batch-und-powershell-in-einer-datei/</link>
		<comments>http://www.datenteiler.de/batch-und-powershell-in-einer-datei/#comments</comments>
		<pubDate>Sat, 07 Jan 2012 21:02:57 +0000</pubDate>
		<dc:creator>Christian Imhorst</dc:creator>
				<category><![CDATA[Batch]]></category>
		<category><![CDATA[Powershell]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.datenteiler.de/?p=6817</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>Zwischen den Jahren — wie man so schön sagt — habe ich das wirklich gute aber leider nicht mehr verfügbare Buch <a href="http://www.amazon.de/gp/product/3827321786/ref=as_li_tf_tl?ie=UTF8&#038;tag=imhorstnet-21&#038;linkCode=as2&#038;camp=1638&#038;creative=6742&#038;creativeASIN=3827321786">Windows 2003 Shell Scripting. Abläufe automatisieren ohne Programmierkenntnisse<img src="http://www.assoc-amazon.de/e/ir?t=imhorstnet-21&#038;l=as2&#038;o=3&#038;a=3827321786" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></a> von <a href="http://arminhanisch.de/homepage/Home.html">Armin Hanisch</a> gelesen. Alternativ kann man noch das etwas sehr teure und leider auch DRM geschützte <a href="http://www.addison-wesley.de/main/main.asp?page=ebooks/bookdetails&#038;ProductID=120249">eBook bei Addison-Wesley</a> 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 <em>cmd.exe</em>. 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.</p>
<p><span id="more-6817"></span></p>
<p>Microsoft hat lange versäumt, den Befehlsumfang der Kommandozeile an die ständige Weiterentwicklung von Windows anzupassen. Dafür wurde der Windows Script Host (WSH) als Basis für die befehlsbasierte Administration eingeführt, der allerdings Wissen in der objektorientierten Programmierung voraussetzt und dessen Befehle man nicht direkt in die Kommandozeile eingeben kann, sondern nur über eine Skriptsprache wie VBScript. Viele Administratoren von Windows-Servern sind aber nicht bereit, sich Wissen zu diesem Thema anzueignen. Das hat Microsoft auch mitbekommen und neue Kommandozeilenbefehle ab Windows Server 2008 eingeführt und alte, die im Windows Resource Kit gelandet waren, wieder in die Standardinstallation aufgenommen. Dass Microsoft dabei Unix-Administratoren über die Schultern geschaut hat, ist kein Geheimnis, man merkt es an der Entwicklung der PowerShell, aber auch an neuen Befehlen für die Kommandozeilen wie zum Beispiel <code>where</code> und <code>whoami</code>.</p>
<p>Im letzten Kapitel des Buchs prophezeit Armin Hanisch der <em>cmd.exe</em> und der Batch eine düstere Zukunft, da sich 2006 schon die PowerShell angekündigt hat. Aber auch für die PowerShell benötigt man, wenn man sie intensiv nutzen will, wie für den WSH Grundkenntnisse in der objektorientierten Programmierung, die Lernkurve ist also steiler. <a href="http://www.windowspro.de/wolfgang-sommergut/cmd-befehle-powershell-verwenden">Die Befehle der PowerShell, auch Cmdlets genannt, liefern nicht bloß Text zurück</a>, wie die textbasierte Kommandozeile der Windows Shell, sondern gleich .NET-Objekte, deren Eigenschaften man im weiteren Verlauf gezielt ansprechen kann. Wobei es für Windows-Administratoren oder Power-User unbedingt lohnt, sich in die PowerShell einzuarbeiten, um Windows zu automatisieren. Einfacher geht das aber immer noch mit der <em>cmd.exe</em>, ihren mächtigen Befehlen wie <code>for</code> oder <code>wmic</code> und Batchskripten, wenn man nicht programmieren mag. Daher denke ich, dass uns Batchdateien noch eine ganze Weile begleiten werden, und ich hoffe, dass es bald eine überarbeitete Neuauflage des Buchs für Windows Server 2008 R2 geben wird.</p>
<p>Da man mit der Windows Shell schnell an seine Grenzen stößt, geht es in einem interessanten Kapitel des Buchs um das Zusammenspiel zwischen Batch und VBScript, <a href="http://www.datenteiler.de/wie-man-in-der-batch-professionelle-fenster-erzeugt/">um zum Beispiel Messageboxen zu erstellen</a>. Man muss den Code aber nicht unbedingt in eine temporäre Datei auslagern, es geht auch mit einem <em>here document</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">' 2<span style="color: #33cc33;">&gt;</span><span style="color: #0000ff; font-weight: bold;">nul</span> <span style="color: #33cc33;">&amp;</span> <span style="color: #33cc33;">@</span><span style="color: #b1b100; font-weight: bold;">echo</span> off
' 2<span style="color: #33cc33;">&gt;</span><span style="color: #0000ff; font-weight: bold;">nul</span> <span style="color: #33cc33;">&amp;</span> cls
' 2<span style="color: #33cc33;">&gt;</span><span style="color: #0000ff; font-weight: bold;">nul</span> <span style="color: #33cc33;">&amp;</span> <span style="color: #b1b100; font-weight: bold;">title</span> mixed.bat - VBScript und Batch <span style="color: #00b100; font-weight: bold;">in</span> einer Datei
' 2<span style="color: #33cc33;">&gt;</span><span style="color: #0000ff; font-weight: bold;">nul</span> <span style="color: #33cc33;">&amp;</span> <span style="color: #b1b100; font-weight: bold;">echo</span> Das ist die Windows Shell
' 2<span style="color: #33cc33;">&gt;</span><span style="color: #0000ff; font-weight: bold;">nul</span> <span style="color: #33cc33;">&amp;</span> time /t
' 2<span style="color: #33cc33;">&gt;</span><span style="color: #0000ff; font-weight: bold;">nul</span> <span style="color: #33cc33;">&amp;</span> <span style="color: #b1b100; font-weight: bold;">echo</span>.
' 2<span style="color: #33cc33;">&gt;</span><span style="color: #0000ff; font-weight: bold;">nul</span> <span style="color: #33cc33;">&amp;</span> <span style="color: #b1b100; font-weight: bold;">echo</span> Schau doch  mal unter eventvwr.msc nach<span style="color: #33cc33;">!</span>
' 2<span style="color: #33cc33;">&gt;</span><span style="color: #0000ff; font-weight: bold;">nul</span> <span style="color: #33cc33;">&amp;</span> <span style="color: #b1b100; font-weight: bold;">echo</span>.
' 2<span style="color: #33cc33;">&gt;</span><span style="color: #0000ff; font-weight: bold;">nul</span> <span style="color: #33cc33;">&amp;</span> cscript //Nologo //E:vbs <span style="color: #33cc33;">%</span><span style="color: #448888;">~f0</span>
<span style="color: #b100b1; font-style: italic;">
:: WScript.Echo &quot;Das ist der WSH!&quot; &amp; vbCrLf</span>
<span style="color: #b100b1; font-style: italic;">:: set sh = WScript.CreateObject(&quot;WScript.Shell&quot;)</span>
<span style="color: #b100b1; font-style: italic;">:: sh.LogEvent 2, &quot;Kaffe ist alle&quot;</span>
<span style="color: #b100b1; font-style: italic;">:: set sh = Nothing</span></pre></div></div>

<p>Die Batch kennt das Hochkomma nicht und reagiert mit einer Fehlermeldung, die dann mit <code>2&gt;nul</code> ins Nirvana geschickt wird.<br />
Anschließend wird der nächste Befehl mit dem &#38;-Zeichen angeknüpft. Der Teil mit dem VBScript besteht für das Shell Script nur aus Kommentaren, wie man an den beiden Doppelpunkten sieht. VBScript wiederum sieht das Hochkomma als Kommentarzeichen an und ignoriert deshalb das Batchprogramm. Der Doppelpunkt ist in VBScript ein Trennzeichen für mehrere Befehle in einer Zeile, womit <code>::</code> zwar ein gültiger Befehl ist, in diesem Fall aber nichts bewirkt.</p>
<p><strong>Batch und PowerShell mit dem Parameter </strong><strong><em>Command</em></strong></p>
<p>Das Mischen von Batch und Powershell ist wesentlich eleganter. Schnell und einfach funktioniert das mit einem Einzeiler, weil man der PowerShell im Gegensatz zum WSH über den Parameter <code>-Command</code> einzelne Befehle übergeben kann:</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;"><span style="color: #33cc33;">@</span><span style="color: #b1b100; font-weight: bold;">echo</span> off
<span style="color: #b1b100; font-weight: bold;">title</span> cmdPS.bat - Demo um ein PowerShell-Skript von einem Batch zu starten
<span style="color: #b1b100; font-weight: bold;">echo</span>.
<span style="color: #b1b100; font-weight: bold;">echo</span> Das ist die Windows Shell
<span style="color: #b1b100; font-weight: bold;">echo</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">time:~0,-3</span><span style="color: #33cc33;">%</span>
<span style="color: #b1b100; font-weight: bold;">echo</span>.
&nbsp;
powershell -command &quot;<span style="color: #33cc33;">&amp;</span> {Write-Host;Write-Warning 'Starte PowerShell';gps power*,cmd*;Write-Host;Write-Warning 'Beende PowerShell'}&quot;
&nbsp;
<span style="color: #b1b100; font-weight: bold;">echo</span>.
<span style="color: #b1b100; font-weight: bold;">echo</span> Das ist wieder die Windows Shell
<span style="color: #b1b100; font-weight: bold;">echo</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">time:~0,-3</span><span style="color: #33cc33;">%</span>
<span style="color: #b1b100; font-weight: bold;">echo</span>. 
<span style="color: #b1b100; font-weight: bold;">pause</span> <span style="color: #33cc33;">&amp;</span> <span style="color: #00b100; font-weight: bold;">exit</span> /b</pre></div></div>

<p>Nun, was macht man aber, wenn man einen ganzen Skriptblock verarbeiten will? Ein schönes Beispiel dafür habe ich im französischsprachigen <a href="http://walid-toumi.blogspot.com/2011/04/inclure-du-code-ps-dans-un-fichier.html">Blog von Walid Toumi</a> gefunden, welches ich aber ein bisschen abgewandelt habe:</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;"><span style="color: #33cc33;">@</span><span style="color: #b1b100; font-weight: bold;">echo</span> off
<span style="color: #b1b100; font-weight: bold;">title</span> cmdPS.bat - Demo um ein PowerShell-Skript von einem Batch zu starten
<span style="color: #b1b100; font-weight: bold;">echo</span>.
<span style="color: #b1b100; font-weight: bold;">echo</span> Das ist die Windows Shell
<span style="color: #b1b100; font-weight: bold;">echo</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">time:~0,-3</span><span style="color: #33cc33;">%</span>
<span style="color: #b1b100; font-weight: bold;">echo</span>.
<span style="color: #b100b1; font-style: italic;">
:: Begin Function Get-Test</span>
<span style="color: #00b100; font-weight: bold;">for</span> /f &quot;delims=:&quot; <span style="color: #33cc33;">%%</span><span style="color: #448888;">a</span> <span style="color: #00b100; font-weight: bold;">in</span> <span style="color: #33cc33;">(</span>'
     findstr /BN &quot;::<span style="color: #33cc33;">@</span>PS$Get-Test&quot; <span style="color: #33cc33;">%</span><span style="color: #448888;">~f0</span>
 '<span style="color: #33cc33;">)</span> <span style="color: #00b100; font-weight: bold;">do</span> <span style="color: #b1b100; font-weight: bold;">set</span> /a Line=<span style="color: #33cc33;">%%</span><span style="color: #448888;">a</span>
 more +<span style="color: #33cc33;">%</span><span style="color: #448888;">Line</span><span style="color: #33cc33;">%</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">~f0</span>  <span style="color: #33cc33;">|</span> powershell -command -
<span style="color: #b100b1; font-style: italic;">:: End Function Get-Test</span>
&nbsp;
<span style="color: #b1b100; font-weight: bold;">echo</span>.
<span style="color: #b1b100; font-weight: bold;">echo</span> Das ist wieder die Windows Shell
<span style="color: #b1b100; font-weight: bold;">echo</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">time:~0,-3</span><span style="color: #33cc33;">%</span>
<span style="color: #b1b100; font-weight: bold;">echo</span>. 
<span style="color: #b1b100; font-weight: bold;">pause</span> <span style="color: #33cc33;">&amp;</span> <span style="color: #00b100; font-weight: bold;">exit</span> /b 
<span style="color: #b100b1; font-style: italic;">
::@PS$Get-Test</span>
Function Get-Test {
  param<span style="color: #33cc33;">()</span>
  Begin{
    Write-Warning &quot;Starte PowerShell&quot; 
  }
  Process{
    gps power*,cmd*  
    <span style="color: #33cc33;">&lt;</span># 
      Kommentarblock
    #<span style="color: #33cc33;">&gt;</span>
  }
  End{
   Write-Host
   Write-Warning &quot;Beende PowerShell&quot;
  }
}
Get-Test
&nbsp;
<span style="color: #00b100; font-weight: bold;">exit</span>
<span style="color: #b100b1; font-style: italic;">:: End Function Get-Test</span></pre></div></div>

<p>Zentrale Punkte des Skripts sind die For-Schleife, der Findstr- und der More-Befehl, sowie letztendlich der PowerShell Parameter <code>-command</code> oder kurz <code>-c</code>:</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;"><span style="color: #b100b1; font-style: italic;">:: Begin Function Get-Test</span>
<span style="color: #00b100; font-weight: bold;">for</span> /f &quot;delims=:&quot; <span style="color: #33cc33;">%%</span><span style="color: #448888;">a</span> <span style="color: #00b100; font-weight: bold;">in</span> <span style="color: #33cc33;">(</span>'
     findstr /BN &quot;::<span style="color: #33cc33;">@</span>PS$Get-Test&quot; <span style="color: #33cc33;">%</span><span style="color: #448888;">~f0</span>
 '<span style="color: #33cc33;">)</span> <span style="color: #00b100; font-weight: bold;">do</span> <span style="color: #b1b100; font-weight: bold;">set</span> /a Line=<span style="color: #33cc33;">%%</span><span style="color: #448888;">a</span>
 more +<span style="color: #33cc33;">%</span><span style="color: #448888;">Line</span><span style="color: #33cc33;">%</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">~f0</span>  <span style="color: #33cc33;">|</span> powershell -command -
<span style="color: #b100b1; font-style: italic;">:: End Function Get-Test</span></pre></div></div>

<p>Bei der For-Schleife steht die Option <code>/f</code> für das Durchsuchen von Dateien (engl. <em>files</em>). Mit <code>delims=:</code> wird der Doppelpunkt als Trennzeichen festgelegt.<br />
Warum der Doppelpunkt, oder warum überhaupt ein Trennzeichen? Weil <code>findstr</code> — das einzige Werkzeug, das in der Windows Shell mit <code>grep</code> vergleichbar ist — wegen der Option <code>/B</code> in jeder Zeile des Skripts, dafür steht <code>%~f0</code>, schaut, ob sie mit dem Ausdruck &#8220;::@PS$Get-Test&#8221; beginnt. Der Ausdruck ist dabei beliebig, es sollte bloß eine Zeichenfolge sein, die so weder in einer Batchdatei noch in einem PowerShell-Skript vorkommt. Wenn das der Fall ist, sorgt die Option <code>/N</code> dafür, dass die Zeilennummer, in diesem Fall 21, mit <code>set /a Line=%%a</code> der Variable <code>Line</code> übergeben wird.<br />
Das Ergebnis von <code>findstr</code> sieht folgendermaßen aus: <code>21:@::PS$Get-Test</code>. Da wir aber nur die Zeilennummer brauchen, schneiden wir den Teil danach inklusive des Doppelpunkts einfach mit <code>"delims=:"</code> ab. Die Zeilenummer wird für das Kommando <code>more</code> benötigt, das mit der Anzeige des PowerShell-Codes aus der Batchdatei ab dieser Zeile beginnt: <code>more +%Line% %~f0</code>.<br />
Das Ergebnis wird dann direkt an die PowerShell weitergeleitet.<br />
Durch den Paramter <code>-Command</code> werden die angegebenen Befehle so ausgeführt, als wären sie direkt in der PowerShell-Eingabeaufforderung eingegeben worden, so wie bei dem Beispiel mit dem Einzeiler weiter oben. Wenn nach <code>-Command</code> ein &#8220;-&#8221; folgt, kann die Zeichenfolge auch ein Skriptblock sein, was uns hier zugute kommt, da durch <code>more</code> und der Verkettung mit <code>|</code> ja schließlich ein Skriptblock an die PowerShell weitergeleitet wird. Im PowerShell-Skriptblock wird die Funktion <code>Get-Test</code>  definiert, die nichts weiter aufregendes macht, als alle PowerShell- und CMD-Prozesse anzuzeigen. Am Ende wird die Funktion mit <code>Get-Test</code> ausgeführt und die PowerShell mit <code>exit</code> wieder beendet.</p>
<p><strong>Batch und PowerShell mit dem Parameter </strong><strong><em>EncodedCommand</em></strong></p>
<p>Als weitere Möglichkeit, Batch- und PowerShell-Code zu mischen, kann man den <a href="http://dmitrysotnikov.wordpress.com/2008/06/27/powershell-script-in-a-bat-file/">Skriptblock mit Base64 codieren</a>. Dazu muss man den Block an eine Variable übergeben, beispielsweise mit <code>$code = {}</code>. Alles was zwischen den geschweiften Klammern steht landet in der Variable <code>$code</code>.</p>

<div class="wp_syntax"><div class="code"><pre class="powershell" style="font-family:monospace;"><span style="color: #800080;">$code</span> <span style="color: pink;">=</span> <span style="color: #000000;">&#123;</span>
<span style="color: #0000FF;">Function</span> Get<span style="color: pink;">-</span>Test <span style="color: #000000;">&#123;</span>
  <span style="color: #0000FF;">param</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
  Begin<span style="color: #000000;">&#123;</span>
    <span style="color: #008080; font-weight: bold;">Write-Warning</span> <span style="color: #800000;">&quot;Starte PowerShell&quot;</span> 
  <span style="color: #000000;">&#125;</span>
  Process<span style="color: #000000;">&#123;</span>
    <span style="color: #008080; font-weight: bold;">gps</span> power<span style="color: pink;">*,</span>cmd<span style="color: pink;">*</span>  
    <span style="color: #008000;">&lt;# 
      Kommentarblock
    #&gt;</span>
  <span style="color: #000000;">&#125;</span>
  End<span style="color: #000000;">&#123;</span>
   <span style="color: #008080; font-weight: bold;">Write-Host</span>
   <span style="color: #008080; font-weight: bold;">Write-Warning</span> <span style="color: #800000;">&quot;Beende PowerShell&quot;</span>
  <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Danach wird der Inhalt der Variable konvertiert:</p>

<div class="wp_syntax"><div class="code"><pre class="powershell" style="font-family:monospace;"><span style="color: #000000;">&#91;</span>convert<span style="color: #000000;">&#93;</span>::ToBase64String<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span>Text.Encoding<span style="color: #000000;">&#93;</span>::Unicode.GetBytes<span style="color: #000000;">&#40;</span><span style="color: #800080;">$code</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span></pre></div></div>

<p>Der mit Base64 codierte Block muss dann in einer Zeile in die Batchdatei eingefügt werden:</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;"><span style="color: #33cc33;">@</span><span style="color: #b1b100; font-weight: bold;">echo</span> off
<span style="color: #b1b100; font-weight: bold;">title</span> cmdPS.bat - Demo um ein PowerShell-Skript von einem Batch zu starten
<span style="color: #b1b100; font-weight: bold;">echo</span>.
<span style="color: #b1b100; font-weight: bold;">echo</span> Das ist die Windows Shell
<span style="color: #b1b100; font-weight: bold;">echo</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">time:~0,-3</span><span style="color: #33cc33;">%</span>
<span style="color: #b1b100; font-weight: bold;">echo</span>.
&nbsp;
powershell -EncodedCommand DQAKAEYAdQBuAGMAdABpAG8AbgAgAEcAZQB0AC0AVABlAHMAdAAgAHsADQAKACAAIABwAGEAcgBhAG0AKAApAA0ACgAgACAAQgBlAGcAaQBuAHsADQAKACAAIAAgACAAVwByAGkAdABlAC0AVwBhAHIAbgBpAG4AZwAgACIAUwB0AGEAcgB0AGUAIABQAG8AdwBlAHIAUwBoAGUAbABsACIAIAANAAoAIAAgAH0ADQAKACAAIABQAHIAbwBjAGUAcwBzAHsADQAKACAAIAAgACAAZwBwAHMAIABwAG8AdwBlAHIAKgAsAGMAbQBkACoAIAAgAA0ACgAgACAAIAAgADwAIwAgAA0ACgAgACAAIAAgACAAIABLAG8AbQBtAGUAbgB0AGEAcgBiAGwAbwBjAGsADQAKACAAIAAgACAAIwA+AA0ACgAgACAAfQANAAoAIAAgAEUAbgBkAHsADQAKACAAIAAgAFcAcgBpAHQAZQAtAEgAbwBzAHQADQAKACAAIAAgAFcAcgBpAHQAZQAtAFcAYQByAG4AaQBuAGcAIAAiAEIAZQBlAG4AZABlACAAUABvAHcAZQByAFMAaABlAGwAbAAiAA0ACgAgACAAfQANAAoAfQANAAoARwBlAHQALQBUAGUAcwB0AA0ACgA=
&nbsp;
<span style="color: #b1b100; font-weight: bold;">echo</span>.
<span style="color: #b1b100; font-weight: bold;">echo</span> Das ist wieder die Windows Shell
<span style="color: #b1b100; font-weight: bold;">echo</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">time:~0,-3</span><span style="color: #33cc33;">%</span>
<span style="color: #b1b100; font-weight: bold;">echo</span>. 
<span style="color: #b1b100; font-weight: bold;">pause</span> <span style="color: #33cc33;">&amp;</span> <span style="color: #00b100; font-weight: bold;">exit</span> /b</pre></div></div>

<p>Der Vorteil dieser Variante liegt darin, dass die Batchdatei übersichtlicher ist. Der Nachteil ist natürlich, dass man keinen direkten Einfluss auf den PowerShell-Code mehr hat und ihn bei jeder Änderung wieder in Base64 umwandeln muss.</p>
<p>Da PowerShell-Skripte aus Sicherheitsgründen nicht ganz so einfach gestartet werden können, eignen sich Batchdateien sehr gut für die Unterstützung von PowerShell-Skripten. Man kann mit den Batchprogrammen zum Beispiel bei der Verteilung von PowerShell-Skripten die ein oder andere Ungewissheit umschiffen, zum Beispiel wenn man nicht weiß, ob das Zielsystem aufgrund der &#8220;Execution Policy&#8221; grundsätzlich bereit ist, Powershell-Skripte auszuführen:</p>

<div class="wp_syntax"><div class="code"><pre class="powershell" style="font-family:monospace;">powershell <span style="color: #008080; font-style: italic;">-ExecutionPolicy</span> Unrestricted <span style="color: pink;">-</span>c <span style="color: #800000;">&quot;&amp; {write-warning 'Hallo Welt'}; exit&quot;</span></pre></div></div>

<p>Oder, um mit den Remotefähigkeiten der Kommandozeilenwerkzeuge wie <code>AT</code> das Gastsystem gezielt auf den Einsatz eines PowerShell-Skripts vorzubereiten, indem man die PowerShell dort mit einem Taskjob direkt aus dem Taskplaner startet.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.datenteiler.de/batch-und-powershell-in-einer-datei/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wie man in der Batch professionelle Fenster erzeugt</title>
		<link>http://www.datenteiler.de/wie-man-in-der-batch-professionelle-fenster-erzeugt/</link>
		<comments>http://www.datenteiler.de/wie-man-in-der-batch-professionelle-fenster-erzeugt/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 14:47:48 +0000</pubDate>
		<dc:creator>Christian Imhorst</dc:creator>
				<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.datenteiler.de/?p=6699</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>Trotz Powershell wird es noch einige Zeit dauern, bis das <a href="http://de.wikibooks.org/wiki/Batch-Programmierung">Batch Scripting</a> mit der <code>cmd.exe</code> 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 <code>cmd.exe</code> aber nicht bietet. Es gibt allerdings einen Trick, indem man ein <a href="http://de.wikibooks.org/wiki/Visual_Basic_Script_(VBS)">temporäres VBScript</a> 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.</p>
<p><span id="more-6699"></span></p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;"><span style="color: #33cc33;">@</span><span style="color: #b1b100; font-weight: bold;">echo</span> off
<span style="color: #b1b100; font-weight: bold;">title</span> Demo um Variablen von VBScript an CMD zuzuweisen
color 2F
mode 55,9
<span style="color: #b100b1; font-style: italic;">
:: Set variable for InputBox:</span>
<span style="color: #b1b100; font-weight: bold;">set</span> myMessage=Hallo, wie ist dein Name?
<span style="color: #b1b100; font-weight: bold;">set</span> myTitle=Bitte Namen eingeben
<span style="color: #00b100; font-weight: bold;">call</span> :<span style="color: #b100b1; font-weight: bold;">subInputBox</span>
<span style="color: #b100b1; font-style: italic;">
:: Display variable</span>
<span style="color: #00b100; font-weight: bold;">if</span> &quot;<span style="color: #33cc33;">%</span><span style="color: #448888;">flag</span><span style="color: #33cc33;">%</span>&quot;==&quot;false&quot; <span style="color: #33cc33;">(</span>
	<span style="color: #b1b100; font-weight: bold;">set</span> myMessage=Es wurde nichts eingegeben, oder die Eingabe abgebrochen.
	<span style="color: #b1b100; font-weight: bold;">set</span> myTitle=Keine Eingabe
	<span style="color: #00b100; font-weight: bold;">call</span> :<span style="color: #b100b1; font-weight: bold;">subMsgBox</span>
<span style="color: #33cc33;">)</span> <span style="color: #00b100; font-weight: bold;">else</span> <span style="color: #33cc33;">(</span>
	<span style="color: #b1b100; font-weight: bold;">set</span> myMessage=Hallo <span style="color: #33cc33;">%</span><span style="color: #448888;">cmdText</span><span style="color: #33cc33;">%!</span>
	<span style="color: #b1b100; font-weight: bold;">set</span> myTitle=Begrüßung
	<span style="color: #00b100; font-weight: bold;">call</span> :<span style="color: #b100b1; font-weight: bold;">subMsgBox</span>
<span style="color: #33cc33;">)</span>
<span style="color: #00b100; font-weight: bold;">goto</span> End
<span style="color: #b100b1; font-style: italic;">
:: Start subroutine subInputBox</span>
:<span style="color: #b100b1; font-weight: bold;">subInputBox</span>
<span style="color: #b1b100; font-weight: bold;">set</span> VBS=&quot;<span style="color: #33cc33;">%</span><span style="color: #448888;">Temp</span><span style="color: #33cc33;">%</span>\vbsInputBox.vbs&quot;
<span style="color: #b1b100; font-weight: bold;">set</span> CMD=&quot;<span style="color: #33cc33;">%</span><span style="color: #448888;">Temp</span><span style="color: #33cc33;">%</span>\cmdVar.bat&quot;
&nbsp;
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> Option Explicit 
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> Dim strText  
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> Dim objShell : <span style="color: #b100b1; font-weight: bold;"><span style="color: #b1b100; font-weight: bold;">Set</span></span> objShell = CreateObject<span style="color: #33cc33;">(</span>&quot;Wscript.Shell&quot;<span style="color: #33cc33;">)</span>  
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> Dim objFSO   : <span style="color: #b100b1; font-weight: bold;"><span style="color: #b1b100; font-weight: bold;">Set</span></span> objFSO = CreateObject<span style="color: #33cc33;">(</span>&quot;Scripting.FileSystemObject&quot;<span style="color: #33cc33;">)</span> 
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> Dim objFile  : <span style="color: #b100b1; font-weight: bold;"><span style="color: #b1b100; font-weight: bold;">Set</span></span> objFile = objFSO.CreateTextFile<span style="color: #33cc33;">(%</span><span style="color: #448888;">CMD</span><span style="color: #33cc33;">%)</span> 
<span style="color: #b100b1; font-style: italic;">:: Pass variable from batch to VBScript</span>
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> strText = InputBox<span style="color: #33cc33;">(</span>&quot;<span style="color: #33cc33;">%</span><span style="color: #448888;">myMessage</span><span style="color: #33cc33;">%</span>&quot;, &quot;<span style="color: #33cc33;">%</span><span style="color: #448888;">myTitle</span><span style="color: #33cc33;">%</span>&quot;<span style="color: #33cc33;">)</span>
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> <span style="color: #00b100; font-weight: bold;">if</span> strText = vbNullString then 
<span style="color: #b100b1; font-style: italic;">:: Create batch file</span>
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> objFile.WriteLine &quot;<span style="color: #33cc33;">@</span><span style="color: #b1b100; font-weight: bold;">echo</span> off&quot;
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> objFile.WriteLine &quot;<span style="color: #b1b100; font-weight: bold;">set</span> flag=false&quot; 
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> <span style="color: #00b100; font-weight: bold;">else</span> 
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> objFile.WriteLine &quot;<span style="color: #33cc33;">@</span><span style="color: #b1b100; font-weight: bold;">echo</span> off&quot;
<span style="color: #b100b1; font-style: italic;">:: Set variable in batch file</span>
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> objFile.WriteLine &quot;<span style="color: #b1b100; font-weight: bold;">set</span> cmdText=&quot; <span style="color: #33cc33;">^&amp;</span> strText  
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> end <span style="color: #00b100; font-weight: bold;">if</span> 
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> objFile.Close  
&nbsp;
cscript <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #33cc33;">&gt;</span> <span style="color: #0000ff; font-weight: bold;">NUL</span>
<span style="color: #00b100; font-weight: bold;">call</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">CMD</span><span style="color: #33cc33;">%</span> <span style="color: #33cc33;">&gt;</span> <span style="color: #0000ff; font-weight: bold;">NUL</span>
&nbsp;
<span style="color: #b1b100; font-weight: bold;">del</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">CMD</span><span style="color: #33cc33;">%</span>
<span style="color: #b1b100; font-weight: bold;">del</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span>
&nbsp;
<span style="color: #00b100; font-weight: bold;">goto</span> :<span style="color: #b100b1; font-weight: bold;">EOF</span>
<span style="color: #b100b1; font-style: italic;">:: End subroutine subInputBox</span>
<span style="color: #b100b1; font-style: italic;">
:: Start subroutine subMsgBox</span>
:<span style="color: #b100b1; font-weight: bold;">subMsgBox</span>
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">Temp</span><span style="color: #33cc33;">%</span>\MsgBox.vbs <span style="color: #b1b100; font-weight: bold;">echo</span> MsgBox &quot;<span style="color: #33cc33;">%</span><span style="color: #448888;">myMessage</span><span style="color: #33cc33;">%</span>&quot;, VbInformation + VbOKOnly, &quot;<span style="color: #33cc33;">%</span><span style="color: #448888;">myTitle</span><span style="color: #33cc33;">%</span>&quot; 
cscript <span style="color: #33cc33;">%</span><span style="color: #448888;">Temp</span><span style="color: #33cc33;">%</span>\MsgBox.vbs <span style="color: #33cc33;">&gt;</span> <span style="color: #0000ff; font-weight: bold;">NUL</span>
<span style="color: #b1b100; font-weight: bold;">del</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">Temp</span><span style="color: #33cc33;">%</span>\MsgBox.vbs
<span style="color: #00b100; font-weight: bold;">goto</span> :<span style="color: #b100b1; font-weight: bold;">EOF</span>
<span style="color: #b100b1; font-style: italic;">:: End of subroutine subMsgBox</span>
<span style="color: #b100b1; font-style: italic;">
:: End of batch file</span>
:<span style="color: #b100b1; font-weight: bold;">End</span></pre></div></div>

<p>Schauen wir uns das Skript Stück für Stück an, allerdings um ein paar Kommentare gekürzt, die mit den beiden Doppelpunkten <code>::</code> beginnen.</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;"><span style="color: #33cc33;">@</span><span style="color: #b1b100; font-weight: bold;">echo</span> off
<span style="color: #b1b100; font-weight: bold;">title</span> Demo um Variablen von VBScript an CMD zuzuweisen
color 2F
mode 55,9</pre></div></div>

<p>Das @-Zeichen ganz am Anfang des Skripts stellt die Ausgabe der Befehlszeile auf dem Bildschirm für den aktuellen Befehl aus. In diesem Fall ist es <code>echo off</code>, der die Befehlszeile für alle nachfolgenden Befehle ausschaltet, zumindest solange, bis ein <code>echo on</code> kommt. Danach werden Titel, Farbe und Form der aktuellen <code>cmd.exe</code> festgelegt.</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;"><span style="color: #b1b100; font-weight: bold;">set</span> myMessage=Hallo, wie ist dein Name?
<span style="color: #b1b100; font-weight: bold;">set</span> myTitle=Bitte Namen eingeben
<span style="color: #00b100; font-weight: bold;">call</span> :<span style="color: #b100b1; font-weight: bold;">subInputBox</span></pre></div></div>

<p>Mit <code>set</code> werden zwei Variablen <code>myMessage</code> und <code>myTitle</code> definiert, die den beschreibenden Text für die InputBox des VBScripts beinhalten. Anschließend wird mit <code>call</code> die Subroutine <code>subInputBox</code> aufgerufen. Seit Windows 2000 sind <a href="http://www.robvanderwoude.com/goto.php">einfache Subroutinen in der Windows Shell</a> möglich, indem vor der Subroutinen eine Sprungmarke definiert wird. Mit dem Aufruf <code>call :&lt;lable&gt;</code> wird der Ablauf des Skripts zum angegebenen Sprungziel geleitet. Nachdem die Ausführung in der Subroutine durch <code>goto :EOF</code> beendet wird, springt der Ablauf auf die Zeile hinter <code>call :&lt;lable&gt;</code> zurück und wird dort fortgesetzt. Um den logischen Ablauf des Skripts zu folgen, springen wir jetzt auch dort hin:</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;"><span style="color: #b100b1; font-style: italic;">:: Start subroutine subInputBox</span>
:<span style="color: #b100b1; font-weight: bold;">subInputBox</span>
<span style="color: #b1b100; font-weight: bold;">set</span> VBS=&quot;<span style="color: #33cc33;">%</span><span style="color: #448888;">Temp</span><span style="color: #33cc33;">%</span>\vbsInputBox.vbs&quot;
<span style="color: #b1b100; font-weight: bold;">set</span> CMD=&quot;<span style="color: #33cc33;">%</span><span style="color: #448888;">Temp</span><span style="color: #33cc33;">%</span>\cmdVar.bat&quot;
&nbsp;
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> Option Explicit 
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> Dim strText  
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> Dim objShell : <span style="color: #b100b1; font-weight: bold;"><span style="color: #b1b100; font-weight: bold;">Set</span></span> objShell = CreateObject<span style="color: #33cc33;">(</span>&quot;Wscript.Shell&quot;<span style="color: #33cc33;">)</span>  
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> Dim objFSO   : <span style="color: #b100b1; font-weight: bold;"><span style="color: #b1b100; font-weight: bold;">Set</span></span> objFSO = CreateObject<span style="color: #33cc33;">(</span>&quot;Scripting.FileSystemObject&quot;<span style="color: #33cc33;">)</span> 
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> Dim objFile  : <span style="color: #b100b1; font-weight: bold;"><span style="color: #b1b100; font-weight: bold;">Set</span></span> objFile = objFSO.CreateTextFile<span style="color: #33cc33;">(%</span><span style="color: #448888;">CMD</span><span style="color: #33cc33;">%)</span> 
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> strText = InputBox<span style="color: #33cc33;">(</span>&quot;<span style="color: #33cc33;">%</span><span style="color: #448888;">myMessage</span><span style="color: #33cc33;">%</span>&quot;, &quot;<span style="color: #33cc33;">%</span><span style="color: #448888;">myTitle</span><span style="color: #33cc33;">%</span>&quot;<span style="color: #33cc33;">)</span>
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> <span style="color: #00b100; font-weight: bold;">if</span> strText = vbNullString then 
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> objFile.WriteLine &quot;<span style="color: #33cc33;">@</span><span style="color: #b1b100; font-weight: bold;">echo</span> off&quot;
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> objFile.WriteLine &quot;<span style="color: #b1b100; font-weight: bold;">set</span> flag=false&quot; 
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> <span style="color: #00b100; font-weight: bold;">else</span> 
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> objFile.WriteLine &quot;<span style="color: #33cc33;">@</span><span style="color: #b1b100; font-weight: bold;">echo</span> off&quot;
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> objFile.WriteLine &quot;<span style="color: #b1b100; font-weight: bold;">set</span> cmdText=&quot; <span style="color: #33cc33;">^&amp;</span> strText  
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> end <span style="color: #00b100; font-weight: bold;">if</span> 
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> objFile.Close  
&nbsp;
cscript <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #33cc33;">&gt;</span> <span style="color: #0000ff; font-weight: bold;">NUL</span>
<span style="color: #00b100; font-weight: bold;">call</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">CMD</span><span style="color: #33cc33;">%</span> <span style="color: #33cc33;">&gt;</span> <span style="color: #0000ff; font-weight: bold;">NUL</span>
&nbsp;
<span style="color: #b1b100; font-weight: bold;">del</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">CMD</span><span style="color: #33cc33;">%</span>
<span style="color: #b1b100; font-weight: bold;">del</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span>
&nbsp;
<span style="color: #00b100; font-weight: bold;">goto</span> :<span style="color: #b100b1; font-weight: bold;">EOF</span>
<span style="color: #b100b1; font-style: italic;">:: End subroutine subInputBox</span></pre></div></div>

<p>Am Anfang steht die Sprungmarke <code>:subInputBox</code>, zu der uns der Call-Aufruf geführt hat. Danach werden die Variablen <code>VBS</code> und <code>CMD</code> mit den Dateinamen gesetzt in denen der Code für das VBScript und die Batchdatei geschrieben werden. Durch die Umgebungsvariable <code>%Temp%</code> werden die beiden Dateien auch gleich in den temporären Ordner gespeichert. Dann wird jede einzelne Zeile des VBScripts mit Hilfe der Ausgabeumleitung <code>&gt;&gt;</code> der Reihe nach in die VBS-Datei geschrieben, deren Name zusammen mit den Pfad in der Variable %VBS% gespeichert wurde. Dabei sind folgende Zeilen interessant:</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;"><span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> Dim objFile  : <span style="color: #b100b1; font-weight: bold;"><span style="color: #b1b100; font-weight: bold;">Set</span></span> objFile = objFSO.CreateTextFile<span style="color: #33cc33;">(%</span><span style="color: #448888;">CMD</span><span style="color: #33cc33;">%)</span> 
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> strText = InputBox<span style="color: #33cc33;">(</span>&quot;<span style="color: #33cc33;">%</span><span style="color: #448888;">myMessage</span><span style="color: #33cc33;">%</span>&quot;, &quot;<span style="color: #33cc33;">%</span><span style="color: #448888;">myTitle</span><span style="color: #33cc33;">%</span>&quot;<span style="color: #33cc33;">)</span></pre></div></div>

<p>Über die Batch-Variablen <code>%CMD%</code>, <code>%myMessage%</code> und <code>%myTitle%</code> werden Variablen bzw. deren Inhalt im VBScript gesetzt. In einer Zeile weiter unten ist das ganze dann andersherum: Eine Variable wird vom VBScript zurück in die Batchdatei geschrieben.</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;"><span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">VBS</span><span style="color: #33cc33;">%</span> <span style="color: #b1b100; font-weight: bold;">echo</span> objFile.WriteLine &quot;<span style="color: #b1b100; font-weight: bold;">set</span> cmdText=&quot; <span style="color: #33cc33;">^&amp;</span> strText</pre></div></div>

<p>Dabei muss man allerdings darauf achten, dass das <code>&amp;</code>-Zeichen mit einem <code>^</code> maskiert wird. Wenn man ein für die Batchdatei besonderes Zeichen benutzt, muss man es mit dem sogenannten <em>Escape</em>-Zeichen kennzeichnen, was auch <em>quoten</em> genannt wird. Auf diese Weise kann man auch XML-Dateien erzeugen, obwohl die Symbole für die Ein- und  Ausgabeumleitung für Dateien <code>&lt;</code> und <code>&gt;</code> schon belegt sind.</p>
<p>Wenn das VBScript erstellt ist, wird es mit <code>cscript %VBS%</code> aufgerufen. Dabei startet <code>cscript</code> das Skript  mit dem <em>Windows Scripting Host</em> im Kontext der Kommandozeile. Sollte dabei irgendeine Ausgabe auf der Konsole erfolgen wird das Ergebnis mit der Umleitung <code>&gt; nul</code> ins Nirwana geschickt. Danach ruft <code>call %CMD%</code> die Batchdatei auf, die das VBScript erstellt hat. Wenn das erledigt ist, räumt der Befehl <code>del</code> auf, indem die beiden Dateien wieder gelöscht werden. Mit <code>goto :EOF</code> wird die Subroutine verlassen und zurück zum Ausgangspunkt gesprungen.</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;"><span style="color: #00b100; font-weight: bold;">if</span> &quot;<span style="color: #33cc33;">%</span><span style="color: #448888;">flag</span><span style="color: #33cc33;">%</span>&quot;==&quot;false&quot; <span style="color: #33cc33;">(</span>
	<span style="color: #b1b100; font-weight: bold;">set</span> myMessage=Es wurde nichts eingegeben, oder die Eingabe abgebrochen.
	<span style="color: #b1b100; font-weight: bold;">set</span> myTitle=Keine Eingabe
	<span style="color: #00b100; font-weight: bold;">call</span> :<span style="color: #b100b1; font-weight: bold;">subMsgBox</span>
<span style="color: #33cc33;">)</span> <span style="color: #00b100; font-weight: bold;">else</span> <span style="color: #33cc33;">(</span>
	<span style="color: #b1b100; font-weight: bold;">set</span> myMessage=Hallo <span style="color: #33cc33;">%</span><span style="color: #448888;">cmdText</span><span style="color: #33cc33;">%!</span>
	<span style="color: #b1b100; font-weight: bold;">set</span> myTitle=Begrüßung
	<span style="color: #00b100; font-weight: bold;">call</span> :<span style="color: #b100b1; font-weight: bold;">subMsgBox</span>
<span style="color: #33cc33;">)</span>
<span style="color: #00b100; font-weight: bold;">goto</span> End</pre></div></div>

<p>Weiter geht es mit einer If-Bedingung. Der Inhalt der Variable <code>%flag%</code> wurde durch das VBScript an die temporäre Batchdatei <code>cmdVar.bat</code> übergeben, die dadurch den Weg in die aktuelle Batchdatei gefunden hat. Man könnte auch auf die Idee kommen, statt eines Flags eine Sprungmarke mit <code>goto</code> zu verwenden. Dummerweise lassen sich keine Sprungmarke von einer Batchdatei in eine andere übertragen. </p>
<p>Mit der If-Bedingung kann man anhand des Flags entscheiden, welcher Knopf in der InputBox gedrückt worden ist, <em>OK</em> oder <em>Abbruch</em>. Wurde <em>Abbruch</em> geklickt bzw. im Eingabefeld nichts eingegeben wird die Flag-Variable auf <em>False</em> gesetzt und der If-Zweig ausgeführt. Andernfalls kommt der Else-Zweig zum Einsatz. Mehrere Befehle können durch runde Klammern gruppiert werden, um den Code besser zu strukturieren. Zeilenumbrüche und Einrückungen sind dabei in Ordnung, wobei man beachten muss, dass die öffnende Klammer in der gleichen Zeile steht wie der If-Befehl, und dass vor dem Else-Befehl die schließende und danach wieder die  öffnende Klammer in derselben Zeile stehen müssen. Hinter der schließenden und vor der öffnenden Klammer muss ein Leerzeichen sein, sonst funktioniert es nicht.</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;"><span style="color: #b100b1; font-style: italic;">:: Start subroutine subMsgBox</span>
:<span style="color: #b100b1; font-weight: bold;">subMsgBox</span>
<span style="color: #33cc33;">&gt;&gt;</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">Temp</span><span style="color: #33cc33;">%</span>\MsgBox.vbs <span style="color: #b1b100; font-weight: bold;">echo</span> MsgBox &quot;<span style="color: #33cc33;">%</span><span style="color: #448888;">myMessage</span><span style="color: #33cc33;">%</span>&quot;, VbInformation + VbOKOnly, &quot;<span style="color: #33cc33;">%</span><span style="color: #448888;">myTitle</span><span style="color: #33cc33;">%</span>&quot; 
cscript <span style="color: #33cc33;">%</span><span style="color: #448888;">Temp</span><span style="color: #33cc33;">%</span>\MsgBox.vbs <span style="color: #33cc33;">&gt;</span> <span style="color: #0000ff; font-weight: bold;">NUL</span>
<span style="color: #b1b100; font-weight: bold;">del</span> <span style="color: #33cc33;">%</span><span style="color: #448888;">Temp</span><span style="color: #33cc33;">%</span>\MsgBox.vbs
<span style="color: #00b100; font-weight: bold;">goto</span> :<span style="color: #b100b1; font-weight: bold;">EOF</span>
<span style="color: #b100b1; font-style: italic;">:: End of subroutine subMsgBox</span></pre></div></div>

<p>In beiden Zweigen der If-Bedingung werden mit <code>set</code> Variablen definiert und danach die Subroutine <code>subMsgBox</code> aufgerufen, mit der wiederum ein VBScript erstellt wird, um eine MessageBox zu erzeugen. Nach dem Aufruf der MessageBox wird die temporäre Datei gelöscht und die Subroutine mit <code>goto :EOF</code> wieder verlassen. Das sich anschließende <code>goto End</code> überspringt die beiden Subroutinen und führt den Programmablauf an das Ende der Batchdatei.</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;"><span style="color: #b100b1; font-style: italic;">:: End of batch file</span>
:<span style="color: #b100b1; font-weight: bold;">End</span></pre></div></div>

<p>Es ist natürlich einfacher, die ganze Geschichte gleich in VBScript zu programmieren, doch es geht hier um die Demonstration professionell aussehende Fenster in einer Batchdatei zu erstellen und den Inhalt von Variablen aus der Batchdatei in diese Fenster zu übergeben und umgekehrt.</p>
<p><strong>Literatur:</strong></p>
<ul>
<li> <a href="http://de.wikibooks.org/wiki/Batch-Programmierung">Batch-Programmierung</a></li>
<li><a href="http://de.wikibooks.org/wiki/Visual_Basic_Script_(VBS)">Visual Basic Script (VBS)</a></li>
<li><a href="http://www.amazon.de/gp/product/3827321786/ref=as_li_qf_sp_asin_tl?ie=UTF8&#038;tag=imhorstnet-21&#038;linkCode=as2&#038;camp=1638&#038;creative=6742&#038;creativeASIN=3827321786">Windows 2003 Shell Scripting. Abläufe automatisieren ohne Programmierkenntnisse</a><img src="http://www.assoc-amazon.de/e/ir?t=imhorstnet-21&#038;l=as2&#038;o=3&#038;a=3827321786" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />, Armin Hanisch, ISBN 978-3827321787</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.datenteiler.de/wie-man-in-der-batch-professionelle-fenster-erzeugt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sicher in die Wolke mit EncFS</title>
		<link>http://www.datenteiler.de/sicher-in-die-wolke-mit-encfs/</link>
		<comments>http://www.datenteiler.de/sicher-in-die-wolke-mit-encfs/#comments</comments>
		<pubDate>Sun, 27 Nov 2011 07:34:39 +0000</pubDate>
		<dc:creator>Christian Imhorst</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Gnu/Linux]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.datenteiler.de/?p=6498</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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.</p>
<p><span id="more-6498"></span></p>
<p><strong>EncFS unter Ubuntu</strong></p>
<p>In der <a href="http://www.ubuntu-user.de/Heft/Heftarchiv/2012/1">aktuellen Ubuntu-User</a> zeigt der Artikel &#8220;Sicher in die Wolke&#8221;, wie man seine Dateien mit GnuPG verschlüsseln kann, bevor man sie einer Cloud-Anwendung wie Ubuntu One oder Dropbox übergibt und wieder entschlüsselt. Da das Ver- und Entschlüsseln der Dateien dabei im Terminal stattfindet, wirkt das Verfahren unnötig kompliziert. Die Webseite <a href="http://www.nosinmiubuntu.com/2011/11/cifrar-una-carpeta-con-cryptkeeper_07.html">nosinmiubuntu</a> zeigt, wie es mit Cryptkeeper und <a href="http://wiki.ubuntuusers.de/EncFS">EncFS</a> unter Ubuntu <del datetime="2011-11-28T18:12:39+00:00">10.</del>11.10 Oneiric Ocelot und Unity einfacher geht. Da sich Cryptkeeper und EncFS in den Repositories von Oneiric befinden, kann man beide Programme über das Software-Center oder über das Terminal installieren:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> cryptkeeper encfs</pre></div></div>

<p><strong>Einrichten des Panel Applets</strong></p>
<p>Damit Cryptkeeper nach dem nächsten Ab- und wieder Anmelden des Benutzers als Panel Applet im System-Tray von Unity erscheint, muss man das Programm in eine sogenannte &#8220;Whitelist&#8221; eintragen. Im Gegensatz zu Gnome ist das <a href="http://wiki.ubuntuusers.de/Unity/FAQ">Panel Applet in Unity ziemlich eingeschränkt</a>. Am einfachsten kann man sich alle Applets anzeigen lassen:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">gsettings <span style="color: #000000; font-weight: bold;">set</span> com.canonical.Unity.Panel systray-whitelist <span style="color: #ff0000;">&quot;['all']&quot;</span></pre></div></div>

<p>Die unerwünschte Nebenwirkung ist dann aber, dass man wirklich alle Applets im Panel sieht. Will man nur das Panel Applet von Cryptkeeper zusätzlich zulassen, sollte man erst einmal schauen, welche Applets bereits auf der Whitelist stehen:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">gsettings get com.canonical.Unity.Panel systray-whitelist</pre></div></div>

<p>Wenn die Ausgabe nichts anzeigt, reicht ein</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">gsettings <span style="color: #000000; font-weight: bold;">set</span> com.canonical.Unity.Panel systray-whitelist <span style="color: #ff0000;">&quot;['Cryptkeeper']&quot;</span></pre></div></div>

<p>um Cryptkeeper zum Panel hinzu zufügen. Sieht die Ausgabe aber wie im folgenden Beispiel aus,</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ gsettings get com.canonical.Unity.Panel systray-whitelist
<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #ff0000;">'JavaEmbeddedFrame'</span>, <span style="color: #ff0000;">'Mumble'</span>, <span style="color: #ff0000;">'Wine'</span>, <span style="color: #ff0000;">'Skype'</span>, <span style="color: #ff0000;">'hp-systray'</span><span style="color: #7a0874; font-weight: bold;">&#93;</span></pre></div></div>

<p>sollte man Cryptkeeper an das Ende der Liste setzen:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ gsettings <span style="color: #000000; font-weight: bold;">set</span> com.canonical.Unity.Panel systray-whitelist <span style="color: #ff0000;">&quot;['JavaEmbeddedFrame', 'Mumble', 'Wine', Skype', 'hp-systray', 'Cryptkeeper']&quot;</span></pre></div></div>

<p>Anschließend sollte man nochmal prüfen, ob es geklappt hat. Wenn die Ausgabe in etwa so, wie die folgende aussieht, scheint es funktioniert zu haben:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ gsettings get com.canonical.Unity.Panel systray-whitelist<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #ff0000;">'JavaEmbeddedFrame'</span>, <span style="color: #ff0000;">'Mumble'</span>, <span style="color: #ff0000;">'Wine'</span>, <span style="color: #ff0000;">'Skype'</span>, <span style="color: #ff0000;">'hp-systray'</span>, <span style="color: #ff0000;">'Cryptkeeper'</span><span style="color: #7a0874; font-weight: bold;">&#93;</span></pre></div></div>

<p>Danach muss Cryptkeeper noch unter &#8220;Startprogramme&#8221; eingetragen werden. Dazu drückt man die Super-Taste (das ist die ehemalige Windows-Taste) und trägt in das Suchfeld &#8220;Startprogramme&#8221; ein. Das Programm-Icon taucht schon nach nur wenigen Buchstaben auf.</p>
<p><a href="http://www.datenteiler.de/wp-content/uploads/2011/11/Startprogramme0.png"><img src="http://www.datenteiler.de/wp-content/uploads/2011/11/Startprogramme0-300x144.png" alt="" title="Startprogramme0" width="300" height="144" class="aligncenter size-medium wp-image-6519" /></a> </p>
<p>Der Eintrag sieht dann folgendermaßen aus und wird über den Button &#8220;Speichern&#8221; und &#8220;Schließen&#8221; festgeschrieben:</p>
<p><a href="http://www.datenteiler.de/wp-content/uploads/2011/11/Startprogramme2.png"><img src="http://www.datenteiler.de/wp-content/uploads/2011/11/Startprogramme2-300x245.png" alt="" title="Startprogramme2" width="300" height="245" class="aligncenter size-medium wp-image-6522" /></a></p>
<p>Erst nach dem Ab- und wieder Anmelden werden die Änderungen sichtbar, und man sieht, ob es wirklich geklappt hat, wenn man das Symbol mit dem Schlüsselpaar im Panel sieht:</p>
<p><a href="http://www.datenteiler.de/wp-content/uploads/2011/11/Cryptkeeper.png"><img src="http://www.datenteiler.de/wp-content/uploads/2011/11/Cryptkeeper.png" alt="" title="Cryptkeeper" width="357" height="77" class="aligncenter size-full wp-image-6526" /></a></p>
<p><strong>Cryptkeeper im Einsatz</strong></p>
<p>Um einen Ordner zu verschlüsseln oder einen bereits mit EncFS verschlüsselten Ordner zu importieren, klickt man mit der linken Maustaste auf das Schlüsselpaar. Um einen neuen verschlüsselten Ordner anzulegen, wählt man &#8220;Erstelle verschlüsselten Ordner&#8221;. </p>
<p><a href="http://www.datenteiler.de/wp-content/uploads/2011/11/Ordner.png"><img src="http://www.datenteiler.de/wp-content/uploads/2011/11/Ordner-300x183.png" alt="" title="Ordner" width="300" height="183" class="aligncenter size-medium wp-image-6534" /></a></p>
<p>In dem Fenster, das sich anschließend öffnet, wählt man den übergeordneten Ordner aus, z.B. &#8220;Ubuntu One&#8221; und trägt den Namen des neuen Ordners ein, z.B. &#8220;Dokumente&#8221; und klickt dann, was ein wenig gewöhnungsbedürftig ist, links auf &#8220;Vor&#8221;. Dann trägt man sein Passwort zweimal ein. Das Passwort sollte natürlich nicht zu einfach sein. Man darf es aber auch nicht vergessen, denn dann sind die Daten im verschlüsselten Verzeichnis verloren. Ein Beispiel, für ein <del datetime="2011-11-28T17:52:46+00:00">gutes</del> Passwort, das ein paar Kriterien wie mindestens 8 Zeichen, Buchstaben gemischt mit Zahlen und Sonderzeichen erfüllt, aber auch gleichzeitig leicht zu merken ist, ist das Wort Passwort, wenn man es in dieser oder einer ähnlich Form schreibt:</p>
<p><code>Pa$$w0r+</code></p>
<p>[Update] Bitte beachtet den Kommentar von dakira weiter unten. Zitat: &#8220;Bei einem Dictionary-Angriff werden auch alle möglichen beliebten Substitutionen geprüft.&#8221;[/Update] Ein gutes Verhältnis zwischen praktischem Nutzen und Sicherheit muss aber jeder für sich selbst finden. Bestätigt man das Passwort, indem man wieder links auf &#8220;Vor&#8221; klickt, wird der verschlüsselte Ordner angelegt. Klickt man wieder mit der linken Maustaste auf das Schlüsselsymbol, werden dieser und eventuell andere verschlüsselte Ordner angezeigt. Ist der Ordner geöffnet, sieht man einen Haken davor. </p>
<p><a href="http://www.datenteiler.de/wp-content/uploads/2011/11/Verschluesseln0.png"><img src="http://www.datenteiler.de/wp-content/uploads/2011/11/Verschluesseln0.png" alt="" title="Verschluesseln0" width="362" height="187" class="aligncenter size-full wp-image-6546" /></a></p>
<p>Klickt man auf diesen Haken, wird der Ordner geschlossen. Klickt man erneut auf den Eintrag, wird das Passwort angefordert und die Dateien werden wieder entschlüsselt, was unter anderem durch den Haken anzeigt wird.</p>
<p>EncFS ver- und entschlüsselt aber nicht nur Ordner und die darin enthaltenen Dateien, es legt auch einen <a href="http://www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2010/07/Dateiverschluesselung-mit-EncFS-und-Cryptkeeper">Mount-Punkt für die entschlüsselten Daten</a> an, über den man auf seine Dateien zugreifen kann. Der Mount-Punkt kann leider nicht über den Dateimanager ausgehängt werden, sondern nur über Cryptkeeper, indem man, wie gesagt, den Haken bzw. den Eintrag mit dem Verzeichnis-Pfad anklickt.</p>
<p><a href="http://www.datenteiler.de/wp-content/uploads/2011/11/Ordner2.png"><img src="http://www.datenteiler.de/wp-content/uploads/2011/11/Ordner2-300x236.png" alt="" title="Ordner" width="300" height="236" class="aligncenter size-medium wp-image-6555" /></a></p>
<p>Wie man im Terminal des Bildausschnitts sieht, bildet das FUSE-Framework das Fundament von EncFS, um normalen Nutzern das Mounten von verschlüsselten Verzeichnissen zu ermöglichen. Da EncFS dateiorientiert arbeitet, benötigt man keine eigene Partition und auch keinen Container, wie bei Truecrypt. Auf der anderen Seite hätte Truecrypt aber den Vorteil, dass man auch unter einem anderen Betriebssystem wie zum Beispiel Windows 7 wieder an seine verschlüsselten Daten kommen könnte, da FUSE nur unter Unix- und Gnu/Linux-Systemen verfügbar ist. </p>
<p><strong>EncFS unter Windows</strong></p>
<p>Man kommt an Windows leider nicht immer vorbei, es gibt aber mit <a href="http://members.ferrara.linux.it/freddy77/encfs.html">EncFS4Win</a> glücklicherweise ein Projekt, das einen Port für Windows auf der Basis von <a href="http://dokan-dev.net/en/">Dokan &mdash; user mode file system for windows</a> bereit stellt. Daher installiert man zuerst die <a href="http://dokan-dev.net/en/download/#dokan">aktuelle Dokan-Bibliothek</a>, um danach die <a href="http://members.ferrara.linux.it/freddy77/encfs.html">Datei encfs.zip</a> nach &#8220;C:\Program Files&#8221; zu entpacken. Das Programm ENCFSW.EXE, das man zum Entschlüssen der Ordner startet, bringt schon eine grafische Oberfläche ähnlich wie Cryptkeeper mit. </p>
<p>Man erkennt EncFS4Win an das Schlüsselsymbol in der Taskleiste. Soll das Programm automatisch starten, kann man einen Haken bei der Option &#8220;Start at login&#8221; setzen. Um einen verschlüsselten Ordner zu öffnen oder anzulegen, klickt man auf &#8220;Open/Create&#8221;.</p>
<p><a href="http://www.datenteiler.de/wp-content/uploads/2011/11/encfs4win.png"><img src="http://www.datenteiler.de/wp-content/uploads/2011/11/encfs4win-300x227.png" alt="" title="encfs4win" width="300" height="227" class="aligncenter size-medium wp-image-6579" /></a></p>
<p>Anschließend wählt man den verschlüsselten Ordner aus.</p>
<p><a href="http://www.datenteiler.de/wp-content/uploads/2011/11/encfs4win1.png"><img src="http://www.datenteiler.de/wp-content/uploads/2011/11/encfs4win1-300x264.png" alt="" title="encfs4win1" width="300" height="264" class="aligncenter size-medium wp-image-6582" /></a></p>
<p>Da Windows anders als Unix-artige Betriebssysteme keine Mount-Punkte kennt, muss man dem zu entschlüsselnden Ordner einen Laufwerksbuchstaben zuweisen.</p>
<p><a href="http://www.datenteiler.de/wp-content/uploads/2011/11/encfs4win2.png"><img src="http://www.datenteiler.de/wp-content/uploads/2011/11/encfs4win2.png" alt="" title="encfs4win2" width="233" height="122" class="aligncenter size-full wp-image-6584" /></a> </p>
<p>Der entschlüsselte Inhalt des Ordners steht dann unter diesem Laufwerksbuchstaben bereit. Anders als unter Ubuntu aber nur unter diesem Laufwerksbuchstaben und nicht nochmal innerhalb eines Ordners in Ubuntu One oder im Dropbox-Ordner.</p>
<p><a href="http://www.datenteiler.de/wp-content/uploads/2011/11/encfs4win3.png"><img src="http://www.datenteiler.de/wp-content/uploads/2011/11/encfs4win3-300x209.png" alt="" title="encfs4win3" width="300" height="209" class="aligncenter size-medium wp-image-6586" /></a></p>
<p><strong>EncFS unter Android</strong></p>
<p>Mit <a href="http://blog.boxcryptor.com/how-to-use-boxcryptor-for-android">Boxcrypter</a> aus dem <a href="https://market.android.com/details?id=com.boxcryptor.android">Android-Market</a> hat man sogar die Möglichkeit, seine mit <a href="http://www.webupd8.org/2011/09/dropbox-access-encfs-folders-on-android.html">EncFS verschlüsselten Ordner unter Android</a> zu öffnen. Kleiner Wermutstropfen ist aber, dass das leider nur mit Dropbox funktioniert. Andere Dateisynchronisations-Dienste wie Ubuntu One werden zur Zeit nicht unterstützt. <del datetime="2011-11-28T18:08:16+00:00">Außerdem ist Boxcrypter noch in der Entwicklungsphase und kann verschlüsselte Dateien nur lesen. Die Schreibunterstützung soll aber bald folgen.</del> <a href="http://blog.boxcryptor.com/boxcryptor-for-android-10-available">Seit Anfang Oktober kann die kostenpflichtige Version</a> von BoxCryptor auch innerhalb eines EncFS-Containers schreiben.</p>
<p>Ein weiterer Nachteil von Boxcrypter ist auch, dass es EncFS nicht voll unterstützt. Man muss beim Verschlüsseln der Dateien ein paar EncFS-Optionen deaktivieren, damit es funktioniert. Zuguter letzt ist noch wichtig, dass der Schlüssel nicht von der Synchronisierung durch Dropbox ausgenommen wird. Denn dann funktioniert es nicht.</p>
<p>Um einen verschlüsselten Ordner zu erstellen, der auch unter Android funktioniert, legt man ihn zusammen mit dem Mount-Punkt für das Volumen, in das man später die Dateien kopiert, im Terminal an:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> ~<span style="color: #000000; font-weight: bold;">/</span>Dropbox<span style="color: #000000; font-weight: bold;">/</span>.encrypted
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> ~<span style="color: #000000; font-weight: bold;">/</span>Dropbox<span style="color: #000000; font-weight: bold;">/</span>Dokumente</pre></div></div>

<p>Dann erfolgt die Einrichtung der Verschlüsselung mit EncFS:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">encfs ~<span style="color: #000000; font-weight: bold;">/</span>Dropbox<span style="color: #000000; font-weight: bold;">/</span>.encrypted ~<span style="color: #000000; font-weight: bold;">/</span>Dropbox<span style="color: #000000; font-weight: bold;">/</span>Dokumente</pre></div></div>

<p>Im folgenden Auswahlmenü wählt man dann &#8220;x&#8221; für den Expertenmodus:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Neuer verschlüsselter Datenträger wird erstellt.
Bitte wählen Sie eine der folgenden Optionen:
 &quot;x&quot; für den Expertenmodus,
 &quot;p&quot; für den vorkonfigurierten Paranoia-Modus,
 etwas anderes oder eine Leerzeile wählt den Standard-Modus.
?&gt; x
Manuelle Konfiguration gewählt.</pre></div></div>

<p>Als Verschlüsselungsalgorithmus kann man AES wählen,</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Die folgenden Verschlüsselungsalgorithmen sind verfügbar
1. AES : 16 byte block cipher
 unterstützte Schlüssellänge zwischen 128 und 256 Bits
 unterstützte Blockgröße zwischen 64 und 4096 Bits
2. Blowfish : 8-Byte-Blockchiffre
 unterstützte Schlüssellänge zwischen 128 und 256 Bits
 unterstützte Blockgröße zwischen 64 und 4096 Bits
Geben Sie die Nummer Ihrer Auswahl an: 1
Gewählter Algorithmus &quot;AES&quot;</pre></div></div>

<p>und bei der Schlüssellänge 128 Bit:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Bitte wählen Sie eine Schlüssellänge in Bit. Die von Ihnen gewählte Verschlüsselung
unterstützt Längen von 128 bis 256 Bit in 64 Bit Schritten.
Zum Beispiel: 
128, 192, 256
Gewählte Schlüssellänge: 128
Verwenden Schlüssellänge von 128 Bit</pre></div></div>

<p>Bei der Dateisystem-Blockgröße kann man einfach mit der Enter-Taste den Standard übernehmen. </p>
<p>Anschließend ist es aber wichtig, bei den Verschlüsselungsalgorithmen für Dateinamen &#8220;Stream&#8221; zu wählen, in dem man die Taste &#8220;3&#8243; drückt:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Die folgenden Verschlüsselungsalgorithmen für Dateinamen stehen zur Verfügung:
1. Block : Blockverschlüsselung, versteckt die Dateinamengröße etwas
2. Null : No encryption of filenames
3. Stream : Stromchiffre, möglichst kurze Dateinamen
Geben Sie die Nummer Ihrer Auswahl an: 3
Gewählter Algorithmus &quot;Stream&quot;&quot;</pre></div></div>

<p>Beim Vector-Chaining muss man mit &#8220;no&#8221; bestätigen, bzw. irgendeine Antwort eingeben, die mit einem &#8220;n&#8221; beginnt, alles andere bedeutet ja:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Enable filename initialization vector chaining?
This makes filename encoding dependent on the complete path, 
rather then encoding each path element individually.
The default here is Yes.
Any response that does not begin with 'n' will mean Yes: no</pre></div></div>

<p>Das Gleiche, also mit einer Eingabe, die mit einem &#8220;n&#8221; beginnt Nein zu sagen, muss man nochmal in der nächsten</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Enable per-file initialization vectors?
This adds about 8 bytes per file to the storage requirements.
It should not affect performance except possibly with applications
which rely on block-aligned file io for performance.
The default here is Yes.
Any response that does not begin with 'n' will mean Yes: no</pre></div></div>

<p>und in der übernächsten Abfrage machen:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Externe IV Verkettung abgeschaltet, da 'IV Verkettung'
und 'einmalige IV' Merkmale für diese Option benötigt werden.
Enable block authentication code headers
on every block in a file?  This adds about 12 bytes per block
to the storage requirements for a file, and significantly affects
performance but it also means [almost] any modifications or errors
within a block will be caught and will cause a read error.
The default here is No.
Any response that does not begin with 'y' will mean No: no</pre></div></div>

<p>Zum Schluss muss man nochmal darauf achten, dass jedem Block-Vorspann keine Zufallsbytes hinzugefügt werden, indem man die Zahl 0 eingibt:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Sollen jedem Block-Vorspann Zufallsbytes hinzugefügt werden?
Das wird die Leistung veringern, aber sicherstellen, dass die
Blöcke unterschiedliche Sicherheitscodes verwenden. Sie können das selbe
Resultat mit geringeren Leistungseinbußen erzielen, indem Sie die dateispezifischen Initialisierungsvektoren aktivieren.
Auswahl der Anzahl der Bytes, von 0 (Keine Zufallsbytes) bis 8: 0</pre></div></div>

<p>Mit Cryptkeeper kann man den neu erstellten verschlüsselten Ordner danach importieren. Wenn man im Fenster &#8220;Import an EncFS encrypted Folder&#8221; auf den Stift klickt, kann man den Pfad auch per Hand eingeben. Bei mir lautet er <code>~/Dropbox/.encrypted/</code>:</p>
<p><a href="http://www.datenteiler.de/wp-content/uploads/2011/11/Cryptkeeper1.png"><img src="http://www.datenteiler.de/wp-content/uploads/2011/11/Cryptkeeper1-300x237.png" alt="" title="Cryptkeeper" width="300" height="237" class="aligncenter size-medium wp-image-6631" /></a></p>
<p>Nach dem ersten Start von BoxCryptor auf dem Android-Handy muss man den verschlüsselten Ordner auswählen, in meinem Fall also <code>.encrypted</code>:</p>
<p><a href="http://www.datenteiler.de/wp-content/uploads/2011/11/Screenshot-Android7.png"><img src="http://www.datenteiler.de/wp-content/uploads/2011/11/Screenshot-Android7-300x218.png" alt="" title="Screenshot-Android7" width="300" height="218" class="aligncenter size-medium wp-image-6636" /></a></p>
<p>Hat man sein Passwort eingegeben, das man vorher bei der Erstellung des EncFS-Ordners angegeben hat, kann man auf seine verschlüsselten Dateien und Ordner lesend zugreifen:</p>
<p><a href="http://www.datenteiler.de/wp-content/uploads/2011/11/Screenshot-Android61.png"><img src="http://www.datenteiler.de/wp-content/uploads/2011/11/Screenshot-Android61-184x300.png" alt="" title="Screenshot-Android6" width="184" height="300" class="aligncenter size-medium wp-image-6643" /></a></p>
<p><strong>Andere Linux-Versionen</strong></p>
<p>Unter openSuse gibt es leider keinen Cryptkeeper. Wer die KDE-Version von openSuse benutzt, kann stattdessen einen Einzeiler in der Konsole verwenden. Erstmal muss man <code>encfs</code> installieren:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">zypper update <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> zypper <span style="color: #c20cb9; font-weight: bold;">install</span> encfs</pre></div></div>

<p>Nach der Installation und dem Anlegen des Mountpunktes, in dem das verschlüsselte Verzeichnis eingehängt wird, folgt der Befehl in der Konsole:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">encfs ~<span style="color: #000000; font-weight: bold;">/</span>Dropbox<span style="color: #000000; font-weight: bold;">/</span>.encrypted ~<span style="color: #000000; font-weight: bold;">/</span>Dropbox<span style="color: #000000; font-weight: bold;">/</span>Dokumente <span style="color: #660033;">-idle</span>=<span style="color: #000000;">30</span> <span style="color: #660033;">--extpass</span>=<span style="color: #ff0000;">&quot;kdialog -password Password for ENCRYPTED&quot;</span> <span style="color: #660033;">--</span> <span style="color: #660033;">-o</span> nonempty</pre></div></div>

<p>Das verschlüsselte Verzeichnis <code>~/Dropbox/.encrypted</code> wird nach <code>~/Dropbox/Dokumente</code> eingehängt und durch die Option <code>idle</code> nach 30 Minuten automatisch wieder ausgehängt. Mit der Option <code>extpass</code> wird das Programm <code>kdialog</code> für die Passworteingabe benutzt.</p>
<p>Wenn man den Ordner wieder vor Ablauf der 30 Minuten schließen möchte, kann man das mit diesem Befehl machen:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">fusermount <span style="color: #660033;">-u</span> ~<span style="color: #000000; font-weight: bold;">/</span>Dropbox<span style="color: #000000; font-weight: bold;">/</span>Dokumente</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.datenteiler.de/sicher-in-die-wolke-mit-encfs/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>MPlayer2 unter Ubuntu installieren</title>
		<link>http://www.datenteiler.de/mplayer2-unter-ubuntu-installieren/</link>
		<comments>http://www.datenteiler.de/mplayer2-unter-ubuntu-installieren/#comments</comments>
		<pubDate>Thu, 10 Nov 2011 18:41:38 +0000</pubDate>
		<dc:creator>Christian Imhorst</dc:creator>
				<category><![CDATA[Gnu/Linux]]></category>

		<guid isPermaLink="false">http://www.datenteiler.de/?p=6468</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>Mit <a href="http://www.mplayer2.org/">MPlayer2</a> gibt es schon seit einiger Zeit einen Fork meines <a href="http://www.datenteiler.de/?s=mplayer">Lieblingsplayers für Multimedia</a>, der ohne MEncoder auskommt. Da der Fork <a href="http://www.mplayer2.org/comparison.html">entscheidende Verbesserungen</a> und viele Bugfixes mitbringt, sich aber abgesehen davon bedienen lässt, wie der gute alte MPlayer, bin ich umgestiegen. </p>
<p>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 <a href="http://wiki.ubuntuusers.de/Paketquellen_freischalten/PPA">PPA</a> wie für Ubuntu 10.04 Lucid und höher mehr benötigt:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> add-apt-repository ppa:ripps818<span style="color: #000000; font-weight: bold;">/</span>coreavc
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> update
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> <span style="color: #c20cb9; font-weight: bold;">mplayer</span></pre></div></div>

<p>Ab Oneiric installiert man dann MPlayer2 wie folgt:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> mplayer2
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut       
Status-Informationen einlesen... Fertig
Die folgenden Pakete werden ENTFERNT:
  <span style="color: #c20cb9; font-weight: bold;">mplayer</span>
Die folgenden NEUEN Pakete werden installiert:
  mplayer2
<span style="color: #000000;">0</span> aktualisiert, <span style="color: #000000;">1</span> neu installiert, <span style="color: #000000;">1</span> zu entfernen und <span style="color: #000000;">0</span> nicht aktualisiert.
Es müssen <span style="color: #000000;">1.328</span> kB an Archiven heruntergeladen werden.
Nach dieser Operation werden <span style="color: #000000;">1.942</span> kB Plattenplatz freigegeben.
Möchten Sie fortfahren <span style="color: #7a0874; font-weight: bold;">&#91;</span>J<span style="color: #000000; font-weight: bold;">/</span>n<span style="color: #7a0874; font-weight: bold;">&#93;</span>?</pre></div></div>

<p>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:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">mplayer</span>
MPlayer2 UNKNOWN <span style="color: #7a0874; font-weight: bold;">&#40;</span>C<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000;">2000</span>-<span style="color: #000000;">2011</span> MPlayer Team
Usage:   <span style="color: #c20cb9; font-weight: bold;">mplayer</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>options<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>url<span style="color: #000000; font-weight: bold;">|</span>path<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>filename</pre></div></div>

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

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">mplayer</span> <span style="color: #660033;">-vo</span> fbdev <span style="color: #000000; font-weight: bold;">/</span>Pfad<span style="color: #000000; font-weight: bold;">/</span>zum<span style="color: #000000; font-weight: bold;">/</span>Video</pre></div></div>

<p>Die Rechte eines Superusers werden in diesem Testfall benötigt, weil sonst der Zugriff auf <code>/dev/fb0</code> nicht gewährt wird. </p>
<p>Schöner ist es, MPlayer in einer Konsole innerhalb einer grafischen Oberfläche zu starten. Dazu reicht einfach</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mplayer</span> <span style="color: #000000; font-weight: bold;">/</span>Pfad<span style="color: #000000; font-weight: bold;">/</span>zum<span style="color: #000000; font-weight: bold;">/</span>Video</pre></div></div>

<p>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:</p>
<table>
<tr>
<td> <strong>Taste</strong> </td>
<td> <strong>Funktion</strong> </td>
</tr>
<tr>
<td>
<span>Esc</span> </td>
<td> Ende </td>
</tr>
<tr>
<td>
<span> Leertaste </span> </td>
<td> Pause </td>
</tr>
<tr>
<td>
<span>→</span> </td>
<td> 10 Sekunden vorspulen </td>
</tr>
<tr>
<td>
<span>←</span> </td>
<td> 10 Sekunden zurückspulen </td>
</tr>
<tr>
<td>
<span>↑</span> </td>
<td> 1 Minute vorspulen </td>
</tr>
<tr>
<td>
<span>↓</span> </td>
<td> 1 Minute zurückspulen </td>
</tr>
<tr>
<td>
<span>Bild ↑</span> </td>
<td> 10 Minuten vorspulen </td>
</tr>
<tr>
<td>
<span>Bild ↓</span> </td>
<td> 10 Minuten zurückspulen </td>
</tr>
<tr>
<td>
<span>0</span> </td>
<td> Lauter </td>
</tr>
<tr>
<td>
<span>9</span> </td>
<td> Leiser </td>
</tr>
<tr>
<td>
<span>M</span> </td>
<td> Audio stumm schalten </td>
</tr>
<tr>
<td>
<span>F</span> </td>
<td> Vollbild </td>
</tr>
<tr>
<td>
<span>#</span> </td>
<td> Audiospur wechseln </td>
</tr>
<tr>
<td>
<span>J</span> </td>
<td> Untertitel wechseln </td>
</tr>
<tr>
<td>
<span>O</span> </td>
<td> On-Screen-Display wechseln </td>
</tr>
<p><span> &nbsp; </span> </td>
<td> &nbsp; </td>
</tr>
</table>
<p>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:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mplayer</span> http:<span style="color: #000000; font-weight: bold;">//</span>208.80.54.28<span style="color: #000000; font-weight: bold;">/</span>FUTUROAAC</pre></div></div>

<p>und DVB-T klappt auch:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mplayer</span> dvb:<span style="color: #000000; font-weight: bold;">//</span>arte <span style="color: #660033;">-cache</span> <span style="color: #000000;">30720</span> <span style="color: #660033;">-cache-min</span> <span style="color: #000000;">5</span></pre></div></div>

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

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> youtube-dl
<span style="color: #c20cb9; font-weight: bold;">mplayer</span> $<span style="color: #7a0874; font-weight: bold;">&#40;</span>youtube-dl <span style="color: #660033;">-g</span> http:<span style="color: #000000; font-weight: bold;">//</span>www.youtube.com<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">watch</span>?<span style="color: #007800;">v</span>=u7Dg3LrhmIY<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.datenteiler.de/mplayer2-unter-ubuntu-installieren/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

