<?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>Windows Server, AD, Exchange und mehr.....</title>
	<atom:link href="http://blog.iteach-online.de/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.iteach-online.de</link>
	<description>Am Ende ist alles nur eine Sache von 0 und 1</description>
	<lastBuildDate>Wed, 16 May 2012 05:00:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Skriptspion für die Powershell</title>
		<link>http://blog.iteach-online.de/index.php/2012/05/skriptspion-fur-die-powershell/</link>
		<comments>http://blog.iteach-online.de/index.php/2012/05/skriptspion-fur-die-powershell/#comments</comments>
		<pubDate>Wed, 16 May 2012 05:00:15 +0000</pubDate>
		<dc:creator>Frank Röder</dc:creator>
				<category><![CDATA[Powershell]]></category>
		<category><![CDATA[Skripting / Programmierung]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Win2008 / 2008 R2 - Tools]]></category>

		<guid isPermaLink="false">http://blog.iteach-online.de/?p=1248</guid>
		<description><![CDATA[Welcher Admin, der sich mit dem Skripting befasst, kennt das nicht. Man möchte eine Aufgabe mit einem Skript automatisieren, um sich das Leben einfacher zu machen. Meistens wird dann Google eine Suchmaschine genutzt, um im Internet nach bereits fertigen Skripten oder Codeschnipseln zu suchen, die dem eigenen Problem sehr nahe kommen. Vielleicht hat man ja [...]]]></description>
			<content:encoded><![CDATA[<p>Welcher Admin, der sich mit dem Skripting befasst, kennt das nicht. Man möchte eine Aufgabe mit einem Skript automatisieren, um sich das Leben einfacher zu machen. Meistens wird dann <span style="color: #000000;"><del>Google</del></span> eine Suchmaschine genutzt, um im Internet nach bereits fertigen Skripten oder Codeschnipseln zu suchen, die dem eigenen Problem sehr nahe kommen. Vielleicht hat man ja aber selber schon ein ähnliches Skript erstellt und findet es einfach nicht mehr.</p>
<p>Für genau diese Probleme hat Microsoft ein neues Werkzeug mit dem Namen &#8220;Microsoft Script Explorer for Windows PowerShell&#8221; zur Verfügung gestellt. Mit diesem Werkzeug kann man online (z.B. im Technet Skript Center) nach Powershell Skripten oder auch Codeschnipseln suchen.</p>
<p>Nach der Installation des Skriptexplorers kann man diesen eigenständig aufrufen oder direkt aus der Powershell ISE starten, in die sich der Skriptexplorer als Addon installiert.</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/scriptexp_ise.gif"><img class="alignnone  wp-image-1251" title="scriptexp_ise" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/scriptexp_ise.gif" alt="" width="352" height="221" /></a></p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/scriptexp_cat.gif"><img class="alignnone  wp-image-1252" title="scriptexp_cat" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/scriptexp_cat.gif" alt="" width="353" height="242" /></a></p>
<p>Im Skriptexplorer selbst kann man die Powershellskripte dann nach Kategorien suchen oder eine Freitextsuche durchführen.</p>
<p>Eine ausführliche Anleitung für den Skriptexplorer finden man hier: <a title="Anleitung für Skriptexplorer" href="http://social.technet.microsoft.com/wiki/contents/articles/8056.microsoft-script-explorer-for-windows-powershell-user-guide.aspx" target="_blank">http://social.technet.microsoft.com/wiki/contents/articles/8056.microsoft-script-explorer-for-windows-powershell-user-guide.aspx</a></p>
<p>Den Download für den Skriptexplorer findet man hier: <a title="Download Skriptexplorer für Windows Powershell" href="http://www.microsoft.com/en-us/download/details.aspx?id=29101" target="_blank">http://www.microsoft.com/en-us/download/details.aspx?id=29101</a></p>
<p>Das Tool befindet sich noch in der Betaphase. Ich hatte beim Testen ein paar kleinere Probleme, aber im Großen und Ganzen funktioniert das gute Stück recht ordentlich.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iteach-online.de/index.php/2012/05/skriptspion-fur-die-powershell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Logparser Deluxe die Auswertemaschine</title>
		<link>http://blog.iteach-online.de/index.php/2012/05/logparser-deluxe-die-auswertemaschine/</link>
		<comments>http://blog.iteach-online.de/index.php/2012/05/logparser-deluxe-die-auswertemaschine/#comments</comments>
		<pubDate>Mon, 14 May 2012 05:00:11 +0000</pubDate>
		<dc:creator>Frank Röder</dc:creator>
				<category><![CDATA[Exchange]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Troubleshooting]]></category>
		<category><![CDATA[Exchange 2010]]></category>
		<category><![CDATA[Win2008 / 2008 R2 - Tools]]></category>
		<category><![CDATA[Windows Server 2003]]></category>

		<guid isPermaLink="false">http://blog.iteach-online.de/?p=1075</guid>
		<description><![CDATA[Das Tool &#8220;logparser&#8221; setze ich schon eine längere Zeit für die Auswertung von IIS Logfiles ein. Das Abfragen von Logfiles wird über SQL Statements realisiert. Wer also über grundlegende SQL Kenntnisse verfügt, kann mit diesem Werkzeug schon sehr interessante Auswertungen erstellen. Allerdings ist das Erstellen von komplexen Abfragen nicht gerade einfach und kostet unter Umständen [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Das Tool &#8220;logparser&#8221; setze ich schon eine längere Zeit für die Auswertung von IIS Logfiles ein. Das Abfragen von Logfiles wird über SQL Statements realisiert. Wer also über grundlegende SQL Kenntnisse verfügt, kann mit diesem Werkzeug schon sehr interessante Auswertungen erstellen. Allerdings ist das Erstellen von komplexen Abfragen nicht gerade einfach und kostet unter Umständen sehr viel Zeit.</p>
<p style="text-align: justify;">Microsoft stellt seit März 2012 einen grafischen Aufsatz für Logparser zur Verfügung, der die Arbeit mit Logparser erheblich vereinfacht. Das Logparser-Studio ermöglicht es, das Werkzeug &#8220;Logparser&#8221; über eine grafische Oberfläche zu steuern. Zusätzlich liefert Microsoft gleich noch eine große Anzahl von vordefinierten Abfragen mit, die sofort eingesetzt werden können. Gerade für einen Exchange Administrator, der Informationen über die Clientaufrufe, die verwendenten Clientversionen oder auch die verbrauchte Bandbreite gewinnen möchte, ist das Logparser Studio ein cooles Werkzeug.<br />
Eine sehr knifflige Angelegenheit ist es zum Beispiel, die Benutzer herauszufinden, die Ihre aktive Throttlingpolicy ausreizen. Auch diese Frage kann man mit dem Logparser Studio recht schnell beantworten.</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/04/logparser_studio.gif"><img class="wp-image-1080 alignnone" title="logparser_studio" src="http://blog.iteach-online.de/wp-content/uploads/2012/04/logparser_studio.gif" alt="" width="517" height="289" /></a></p>
<p style="text-align: justify;">Wenn es um Fragen geht, wie z.B.: &#8220;Welche Iphones mit welchem iOS greifen auf meinen Exchange zu?&#8221;, dann wird es meist auch schwierig, diese Fragen zu beantworten. Auch dafür liefert Microsoft zwei vordefinierte Abfragen mit:</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/04/logparser_studio_iphone.gif"><img class="alignnone  wp-image-1083" title="logparser_studio_iphone" src="http://blog.iteach-online.de/wp-content/uploads/2012/04/logparser_studio_iphone.gif" alt="" width="512" height="230" /></a></p>
<p style="text-align: justify;">Wer die ganze Auswertung dann noch grafisch bekommen möchte, der kann mit Logparser Studio die Auswertung als Diagramm ausgeben lassen.</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/04/logparser_studio_iphone_diagramm.gif"><img class="alignnone  wp-image-1084" title="logparser_studio_iphone_diagramm" src="http://blog.iteach-online.de/wp-content/uploads/2012/04/logparser_studio_iphone_diagramm.gif" alt="" width="515" height="268" /></a></p>
<p style="text-align: justify;">Um Auswertungen über die gesendeten und empfangenen Daten zu erstellen, ist es notwendig, an den Protokollierungseinstellungen des IIS Anpassungen vorzunehmen. In den Standardeinstellungen protokolliert der IIS die gesendeten und empfangenen Daten leider nicht. Das bedeutet, dass die Abfragen über die Bandbreitenauslastung des Exchange Servers leider ergebnislos bleiben.</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/04/iis_logfilesettings.gif"><img class="alignnone  wp-image-1086" title="iis_logfilesettings" src="http://blog.iteach-online.de/wp-content/uploads/2012/04/iis_logfilesettings.gif" alt="" width="438" height="316" /></a></p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/04/iis_logfilesettings2.gif"><img class="alignnone  wp-image-1087" title="iis_logfilesettings2" src="http://blog.iteach-online.de/wp-content/uploads/2012/04/iis_logfilesettings2.gif" alt="" width="501" height="316" /></a><a href="http://blog.iteach-online.de/wp-content/uploads/2012/04/iis_logfilesettings3.gif"><img class="alignnone  wp-image-1090" title="iis_logfilesettings3" src="http://blog.iteach-online.de/wp-content/uploads/2012/04/iis_logfilesettings3.gif" alt="" width="210" height="251" /></a></p>
<p style="text-align: justify;">Wenn diese beiden Informationen in die IIS Protokollierung mit aufgenommen wurden, dann gelingen auch die Abfragen für die transferierte Datenmenge. Wer jetzt neugierig geworden ist, kann das Tool hier herunterladen bzw. den originalen Artikel lesen:</p>
<p><a href="http://blogs.technet.com/b/exchange/archive/2012/03/07/introducing-log-parser-studio.aspx" target="_blank">Link zum Exchange Team Blog</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iteach-online.de/index.php/2012/05/logparser-deluxe-die-auswertemaschine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Einfach mehr Platz auf dem Fileserver mit Windows Server 2012</title>
		<link>http://blog.iteach-online.de/index.php/2012/05/einfach-mehr-platz-auf-dem-fileserver-mit-windows-server-2012/</link>
		<comments>http://blog.iteach-online.de/index.php/2012/05/einfach-mehr-platz-auf-dem-fileserver-mit-windows-server-2012/#comments</comments>
		<pubDate>Thu, 10 May 2012 05:00:03 +0000</pubDate>
		<dc:creator>Frank Röder</dc:creator>
				<category><![CDATA[Fileserver]]></category>
		<category><![CDATA[Windows Server 2012]]></category>
		<category><![CDATA[deduplication]]></category>
		<category><![CDATA[Windows 8 Beta]]></category>

		<guid isPermaLink="false">http://blog.iteach-online.de/?p=1145</guid>
		<description><![CDATA[Jeder Administrator kennt das: die Benutzer verfallen in das Schema &#8220;Jagen und Sammeln&#8221;, wenn es um Daten geht, verschwenden wertvollen Platz auf dem Fileserver und belasten durch ihr Verhalten ganz nebenbei auch die Kapazitäten der Datensicherung. Für viele der Anwender ist ein Server eine unendliche Ressource, die niemals ausgeschöpft werden kann. Als Administrator versucht man [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Jeder Administrator kennt das: die Benutzer verfallen in das Schema &#8220;Jagen und Sammeln&#8221;, wenn es um Daten geht, verschwenden wertvollen Platz auf dem Fileserver und belasten durch ihr Verhalten ganz nebenbei auch die Kapazitäten der Datensicherung. Für viele der Anwender ist ein Server eine unendliche Ressource, die niemals ausgeschöpft werden kann. Als Administrator versucht man dann, mit den Benutzern zu sprechen und zu hinterfragen, ob sie denn wirklich noch die Powerpoint Präsentation aus dem Jahr 2000 benötigen. Meistens bekommt man als Administrator dann die Antwort, dass es sich dabei um &#8220;hochwichtige&#8221; Daten handelt und diese keinesfalls aus dem Netzlaufwerk entfernt werden dürfen. Auch das Implementieren von Kontingenten gestaltet sich meist schwierig, da in den meisten Firmen die einzelnen Benutzer unterschiedliche Anforderungen an einen Fileserver stellen. Was aber tun, wenn der Platz auf dem SAN oder den internen Datenträgern des Servers langsam knapp wird und das Budget für Neuanschaffungen sehr begrenzt ist. Sehr schnell wird hier das Buzzword &#8220;Deduplication&#8221; in den Raum geworfen. Dieses Feature musste man sich bis jetzt entweder mit einem Windows Storage Server oder als Software von einem Drittanbieter teuer erkaufen. Mit Windows Server 2012 integriert Microsoft dieses Feature in das Betriebssystem.</p>
<p style="text-align: justify;">Folgende Aspekte gilt es beim Einsatz zu beachten:</p>
<ul style="text-align: justify;">
<li>Data deduplication ist clusterfähig</li>
<li>Komprimierte oder auch verschlüsselte Dateien können nicht verarbeitet werden</li>
<li>Das Bootvolume oder auch das Systemvolume kann nicht dedupliziert werden</li>
<li>Die Datenträger, auf denen Daten dedupliziert werden, müssen mit NTFS formatiert werden</li>
<li>Custer Shared Volumes werden nicht unterstützt</li>
<li>Dateien, die kleiner als 32 KB sind, werden keiner Deduplizierung unterzogen</li>
</ul>
<p style="text-align: justify;">Wo sollte das Feature eingesetzt werden?</p>
<p style="text-align: justify;">Deduplication kann auf allen Servern eingesetzt werden, auf denen relativ statische Daten abgelegt sind. Dazu zählen die klassischen Fileserver, die Freigaben für Datenlaufwerke, Profilverzeichnisse oder Homelaufwerke bereitstellen oder auch Server, auf denen z.B. Backups liegen.</p>
<p style="text-align: justify;"><span style="color: #ff0000;">Für alle Server, die z.B. als Exchange Server oder Datenbankserver wie MS SQL  dienen, sollte keine Deduplication aktiviert werden. Dies würde zu enormen Performanceverlusten führen.</span></p>
<p style="text-align: justify;">Wie arbeitet die Deduplication unter Windows Server 2012?</p>
<p style="text-align: justify;">Das ist relativ einfach erklärt. Windows Server 2012 zerlegt die Dateien auf dem Volume in kleine Segmente variabler Größe (32KB &#8211; 128KB). Alle Segmente, die mehrfach vorhanden sind, werden entfernt und nur ein einzelnes Segment wird im &#8220;Chunk Store&#8221; abgelegt. Für die entfernten Segmente werden &#8220;Reparse Points&#8221; im Dateisystem angelegt, die auf das abgelegte Segment im &#8220;Chunk Store&#8221; referenzieren.</p>
<p style="text-align: center;"><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/Zeichnung1.gif"><img class="size-full wp-image-1154 aligncenter" title="Zeichnung1" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/Zeichnung1.gif" alt="" width="519" height="342" /></a></p>
<p style="text-align: justify;">Der Dienst für die Depluzierung läuft als ständiger Prozess im Hintergrund und evaluiert alle 60 Minuten die Dateien auf den Datenträgern. Sollte in solch einem Zyklus der Server gerade Leistungsengpässe (kein Speicher verfügbar, hohe CPU Last) aufweisen, dann wird der Zyklus abgebrochen. Zusätzlich zu dem Hintergrundprozess, kann ein Administrator aber auch eine Deduplizierung durch einen geplanten Task auslösen. Dies könnte dann z.B. in den Nachtstunden ausgeführt werden. Microsoft selbst gibt an, dass ca. 1,5TB an Daten in einem 24 Stunden Zyklus gescannt werden können.</p>
<p style="text-align: justify;">Bevor man aber mit dem Umstellen der Fileserver auf Windows Server 2012 wegen diesem Feature beginnt, sollte man als Erstes prüfen, ob sich die Investition überhaupt lohnt. Dafür liefert Microsoft das Tool &#8220;ddpeval.exe&#8221;, was auch unter Windows Server 2008 R2 ausgeführt werden kann. Für das Auswerten eines bestehenden Fileservers sollte man allerdings etwas Geduld mitbringen. Ich habe das Tool auf meinem Fileserver gestartet und die Auswertung für ein Laufwerk durchgeführt, auf dem etwa 1,2TB an Daten liegen. Für die Auswertung hat das Tool <span style="text-align: justify;">28 Stunden</span> benötigt. An Systemressourcen hat das Tool ca. 300MB an RAM benötigt und die CPU ungefähr mit 17% ausgelastest. Das lange Warten hat sich allerdings gelohnt. Auf dem betreffenden Volume kann ich ca. 75% durch die Deduplizierung zurückgewinnen. Da auf diesem Fileserver sehr viele VHD Dateien für Demoumgebungen liegen, ist 75% auch ein verständlicher Wert.</p>
<p style="text-align: justify;">In meiner Windows Server 2012 Testumgebung habe ich einen Fileserver mit wesentlich weniger Daten aufgesetzt. Auf dem Testsystem existiert ein Laufwerk mit einer Größe von 127GB und davon sind ca. 105GB mit Daten belegt. Da es sich um ein Testsystem handelt, habe ich mit &#8220;fsutil&#8221; einfach Testdateien erstellt. Da diese Testdateien alle gleich sind, sollte sich durch die Deduplizierung auch ein hohes Einsparpotential ergeben.</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/explorer_testfiler.gif"><img class="alignnone  wp-image-1166" title="explorer_testfiler" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/explorer_testfiler.gif" alt="" width="431" height="259" /></a></p>
<p style="color: #ff0000; text-align: justify;"><span style="color: #000000;"> Auch für dieses Laufwerk habe ich das Tool &#8220;ddpeval.exe&#8221; ausgeführt. Bei diesem Laufwerk hat die Ausführung des Tools ca. 13 Minuten gedauert. Als mögliches Einsparpotential hat mir &#8220;ddpeval.exe&#8221; ca. 104,31 GB gemeldet. Das ist laut &#8220;ddpeval.exe&#8221; ein Einsparung von ca. 99%.</span></p>
<p style="color: #ff0000;"><span style="color: #000000;"><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/ddpeval_filetest.gif"><img class="alignnone  wp-image-1167" title="ddpeval_filetest" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/ddpeval_filetest.gif" alt="" width="431" height="219" /></a></span></p>
<p style="text-align: justify;"><strong>Installation und Konfiguration der Deduplizierung</strong></p>
<p style="text-align: justify;">Die Installation der Deduplizierung erfolgt über das Hinzufügen von Rollen und Features über das Dashboard des neuen Servermanagers.</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_install_dash.gif"><img class="alignnone  wp-image-1170" title="dedup_install_dash" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_install_dash.gif" alt="" width="433" height="219" /></a></p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_install1.gif"><img class="alignnone  wp-image-1171" title="dedup_install1" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_install1.gif" alt="" width="172" height="125" /></a><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_install2.gif"><img class="alignnone  wp-image-1172" title="dedup_install2" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_install2.gif" alt="" width="172" height="125" /></a><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_install3.gif"><img class="alignnone  wp-image-1175" title="dedup_install3" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_install3.gif" alt="" width="172" height="125" /></a></p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_install4.gif"><img class="alignnone  wp-image-1176" title="dedup_install4" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_install4.gif" alt="" width="172" height="125" /></a><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_install5.gif"><img class="alignnone  wp-image-1177" title="dedup_install5" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_install5.gif" alt="" width="172" height="125" /></a><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_install6.gif"><img class="alignnone  wp-image-1178" title="dedup_install6" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_install6.gif" alt="" width="172" height="125" /></a></p>
<p style="text-align: justify;">Diese Rolle kann man natürlich auch sehr einfach mit der Powershell installieren.</p>

<div class="wp_syntax"><div class="code"><pre class="powershell" style="font-family:monospace;">import<span style="color: pink;">-</span>module ServerManager
add<span style="color: pink;">-</span>windowsfeature fs<span style="color: pink;">-</span>data<span style="color: pink;">-</span>deduplication</pre></div></div>

<p style="text-align: justify;">Wenn die Rolle erfolgreich installiert wurde, müssen die einzelnen Volumes für die Deduplizierung aktiviert werden. Dies kann wieder wahlweise über die GUI oder über die Powershell realisiert werden.</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_konfig.gif"><img class="alignnone  wp-image-1188" title="dedup_konfig" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_konfig.gif" alt="" width="514" height="230" /></a></p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_konfig2.gif"><img class="alignnone  wp-image-1189" title="dedup_konfig2" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_konfig2.gif" alt="" width="514" height="245" /></a></p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_konfig3.gif"><img class="alignnone  wp-image-1191" title="dedup_konfig3" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_konfig3.gif" alt="" width="193" height="163" /></a><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_konfig4.gif"><img class="alignnone  wp-image-1192" title="dedup_konfig4" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_konfig4.gif" alt="" width="154" height="164" /></a></p>
<p style="text-align: justify;">Wie man in dem Screenshot sehen kann, läuft die Deduplizierung permanent im Hintergrund. Zusätzlich habe ich noch eine Aufgabe definiert, durch die Samstags ab 1 Uhr morgens eine sogenannte &#8220;Throughput optimization&#8221; für eine Dauer von sechs Stunden durchgeführt wird. Dadurch wird der Vorgang der Deduplizierung optimiert.</p>
<p style="text-align: justify;">Natürlich lässt sich die Deduplizierung auch über die Powershell konfigurieren. Mit der Installation der Deduplizierung steht auch ein Powershell Modul für die Verwaltung der Deduplizierung zur Verfügung. Um auf die cmdlets der Deduplizierung zugreifen zu können, muss als Erstes das Modul importiert werden.</p>

<div class="wp_syntax"><div class="code"><pre class="powershell" style="font-family:monospace;">import<span style="color: pink;">-</span>module Deduplication</pre></div></div>

<p>Nach dem Import des Moduls stehen folgende cmdlets zur Verfügung:</p>

<div class="wp_syntax"><div class="code"><pre class="powershell" style="font-family:monospace;"><span style="color: #008080; font-weight: bold;">get-command</span> <span style="color: pink;">-</span>module deduplication
disable<span style="color: pink;">-</span>dedupvolume
enable<span style="color: pink;">-</span>dedupvolume
get<span style="color: pink;">-</span>dedupjob
get<span style="color: pink;">-</span>dedupmetadata
get<span style="color: pink;">-</span>dedupschedule
get<span style="color: pink;">-</span>dedupstatus
get<span style="color: pink;">-</span>dedupvolume
new<span style="color: pink;">-</span>dedupschedule
remove<span style="color: pink;">-</span>dedupschedule
set<span style="color: pink;">-</span>dedupschedule
set<span style="color: pink;">-</span>dedupvolume
start<span style="color: pink;">-</span>dedupjob
stop<span style="color: pink;">-</span>dedupjob
update<span style="color: pink;">-</span>dedupstatus</pre></div></div>

<p>Zum Aktivieren eines Volumes für die Deduplizierung ist folgendes Kommando notwendig:</p>

<div class="wp_syntax"><div class="code"><pre class="powershell" style="font-family:monospace;">enable<span style="color: pink;">-</span>dedupvolume E: <span style="color: pink;">|</span> set<span style="color: pink;">-</span>dedupvolume <span style="color: pink;">-</span>minimumfileagedays <span style="color: #804000;">0</span></pre></div></div>

<p>ACHTUNG: Den Parameter &#8220;minimumfileagedays&#8221; habe ich nur zu Demozwecken auf 0 gesetzt!<br />
Damit das System sofort mit der Deduplizierung beginnt, muss explizit der Deduplizierungsvorgang gestartet werden. Dafür gibt es über die Powershell zwei Möglichkeiten. Zum Einen kann man die Deduplizierung im Hintergrund &#8211; also asynchron &#8211; ausführen oder man führt die Deduplizierung synchron aus und muss in der Powershell auf die Fertigstellung warten.</p>
<p>Asynchrone Ausführung<br />
<a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_konfig5.gif"><img class="alignnone  wp-image-1200" title="dedup_konfig5" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_konfig5.gif" alt="" width="397" height="144" /></a></p>
<p>Synchrone Ausführung<br />
<a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_konfig6.gif"><img class="alignnone  wp-image-1201" title="dedup_konfig6" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/dedup_konfig6.gif" alt="" width="397" height="144" /></a></p>
<p>Während der der Deduplizierung kann man den Status sehr gut mit den cmdlets &#8220;get-dedupjob&#8221; und &#8220;get-dedupstatus&#8221; nachverfolgen.</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/get-dedupstatus.gif"><img class="alignnone  wp-image-1203" title="get-dedupstatus" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/get-dedupstatus.gif" alt="" width="399" height="145" /></a></p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/get-dedupjob.gif"><img class="alignnone  wp-image-1204" title="get-dedupjob" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/get-dedupjob.gif" alt="" width="397" height="144" /></a></p>
<p style="text-align: justify;">Wenn das cmdlet &#8220;get-dedupjob&#8221; keinen aktiven Job mehr zurückliefert, ist die Deduplizierung beendet. Durch das cmdlet &#8220;get-dedupstatus&#8221; kann jetzt ermittelt werden, wie effektiv die Deduplizierung für das Laufwerk E: vorgenommen wurde.</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/get-dedupstatus2.gif"><img class="alignnone  wp-image-1205" title="get-dedupstatus2" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/get-dedupstatus2.gif" alt="" width="397" height="144" /></a></p>
<p>Zusätzlich verzeichnet die Deduplizierung einen Ereignisprotokolleintrag mit der Event ID 6153, in dem die erfolgreiche Deduplizierung des Volumes E: gemeldet wird.</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/eventlog.gif"><img class="alignnone  wp-image-1207" title="eventlog" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/eventlog.gif" alt="" width="395" height="275" /></a></p>
<p>Ein Blick in den Explorer bestätigt die Angaben von &#8220;get-dedupstatus&#8221; und des Ereignisprotokolls.</p>
<p>Vor der Deduplizierung<br />
<a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/explorer_testfiler.gif"><img class="alignnone  wp-image-1166" title="explorer_testfiler" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/explorer_testfiler.gif" alt="" width="246" height="148" /></a></p>
<p>Nach der Deduplizierung<br />
<a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/explorer_dedup.gif"><img class="alignnone  wp-image-1206" title="explorer_dedup" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/explorer_dedup.gif" alt="" width="247" height="149" /></a></p>
<p style="text-align: justify;">Die Deduplizierung der Daten auf dem Testlaufwerk hat ca. 20 Minuten in Anspruch genommen. Für knappe 105GB ist das eine ordentliche Geschwindigkeit. Allerdings sollte man dabei nicht vergessen, dass es sich bei den Testdateien immer um die gleiche Datei handelte. Deshalb hatte die Deduplizierung bei dieser Aufgabe relativ leichtes Spiel.</p>
<p style="text-align: justify;">Zusätzlich gibt es für die Fans der guten alten cmd.exe auch ein separates Kommandozeilenprogramm für die Verwaltung bzw. Konfiguration der Deduplizierung. Dieses Kommandozeilenprogramm kann über die Eingabe von &#8220;ddpcli&#8221; aufgerufen werden.</p>
<p style="text-align: justify;"><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/ddpcli.gif"><img class="alignnone  wp-image-1213" title="ddpcli" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/ddpcli.gif" alt="" width="250" height="127" /></a></p>
<p><strong>Wartung, Pflege und Überwachung der Deduplizierung</strong></p>
<p style="text-align: justify;">Zur Wartung und Pflege der Deduplizierung muss man als Administrator eigentlich nichts tun. Die notwendigen Wartungsarbeiten werden während der Installation automatisch als geplante Aufgaben auf dem betreffenden Fileserver angelegt. Im Standard handelt es sich dabei um drei geplante Aufgaben. Da ich in meiner Demoumgebung bei der Konfiguration des Volumes einen Zeitplan für die &#8220;Throughput Optimization&#8221; angelegt habe, wurde auf meinem Testsystem eine vierte Aufgabe hinzugefügt.</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/tasks.gif"><img class="alignnone  wp-image-1214" title="tasks" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/tasks.gif" alt="" width="526" height="222" /></a></p>
<p style="text-align: justify;">Für die Wartungsaufgaben werden im Wesentlichen zwei Aufgaben erstellt. Einmal handelt es sich um die Aufgabe &#8220;WeeklyGarbageCollection&#8221; und zum Anderen um die Aufgabe &#8220;WeeklyScrubbing&#8221;.  Beim Scrubbing wird eine Integritätsprüfung durchgeführt. Dadurch wird geprüft, ob alle Daten im Chunkstore konsistent sind. Sollten Inkonsistenzen festgestellt werden, dann wird durch diese geplante Aufgabe auch eine Reparatur versucht. Wer das Scrubbing interaktiv durchführen möchte, kann dies auch über die Powershell mit folgendem Kommando anstoßen:</p>

<div class="wp_syntax"><div class="code"><pre class="powershell" style="font-family:monospace;">start<span style="color: pink;">-</span>dedupjob e: <span style="color: pink;">-</span><span style="color: #008080; font-weight: bold;">type</span> scrubbing</pre></div></div>

<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/scrubbing.gif"><img class="alignnone  wp-image-1220" title="scrubbing" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/scrubbing.gif" alt="" width="430" height="156" /></a></p>
<p>Nachdem das Kommando abgeschlossen ist, wird im Ereignisprotokoll ein Eintrag mit der Event ID 12803 verzeichnet. In der Meldung werden auch eventuelle Probleme gemeldet.</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/scrubbing_finished.gif"><img class="alignnone  wp-image-1221" title="scrubbing_finished" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/scrubbing_finished.gif" alt="" width="437" height="305" /></a></p>
<p>Bei der Garbage Collection wird, wie der Name schon sagt, der ganze Müll eingesammelt. Wenn zum Beispiel auf einem Laufwerk, auf dem die Deduplizierung aktiviert ist, eine Datei gelöscht wird, dann werden die referenzierten Elemente aus dem Chunkstore nicht gelöscht. Das führt dazu, dass nicht referenzierte Daten, die nicht mehr benötigt werden, auf dem Volume liegen bleiben . Deshalb ist es zwingend notwendig, dass diese Aufgabe regelmäßig ausgeführt wird. Wenn man auf einem Volume eine größere Löschaktion durchführt, kann man den GarbageCollection Prozess auch manuell ausführen.</p>

<div class="wp_syntax"><div class="code"><pre class="powershell" style="font-family:monospace;">start<span style="color: pink;">-</span>dedupjob e: <span style="color: pink;">-</span><span style="color: #008080; font-weight: bold;">type</span> GarbageCollection</pre></div></div>

<p style="text-align: justify;">In meiner Testumgebung habe ich auf dem Datenlaufwerk eine größere Anzahl von Dateien gelöscht. Danach habe ich den Garbage Collection Prozess angestoßen. Auch hier findet man im Ereignisprotokoll einen entsprechenden Eintrag, der die erfolgreiche Ausführung der Garbage Collection meldet. Leider findet man in der Meldung keinerlei Hinweise auf die entfernten Daten.</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/garbagecollection.gif"><img class="alignnone  wp-image-1223" title="garbagecollection" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/garbagecollection.gif" alt="" width="435" height="302" /></a></p>
<p><strong>Datensicherung von Volumes, die für die Deduplizierung aktiviert sind</strong></p>
<p style="text-align: justify;">Generell sollte es mit Datensicherungen keine Probleme geben, wenn ein Volume gesichert wird, auf dem die Deduplizierung aktiv ist. Allerdings gibt es einen Unterschied zwischen einer dateibasierten Sicherung, wie z.B. ein einfaches xcopy, und einer blockbasierten Sicherung, wie z.B. Windows Server Backup. Bei einer dateibasierten Sicherungsmethode muss die reale Größe aller Dateien gesichert werden. Das bedeutet, dass bei dieser Sicherungsmethode ein Sicherungslaufwerk in entsprechender Größe vorgehalten werden muss. Ein XCopy kann also nicht von der Deduplizierung profitieren. Bei der blockbasierten Methode sieht das ganz anders aus. Bei dieser Methode kann auch die Sicherung von der Deduplizierung profitieren, da diese Sicherungsmethode keine Dateien sichert, sondern nur die einzelnen Blöcke.</p>
<p style="text-align: justify;"><strong>Fazit</strong></p>
<p style="text-align: justify;">Die Deduplizierung ist ein sehr nützliches Feature der neuen Servergeneration, die der Speicherplatzverschwendung in Unternehmen durchaus Einhalt gebieten kann. Der Administrator freut sich, dass er endlich wieder Platz auf den Fileservern bekommt und den Controller freut es, dass er der IT Abteilung das Budget kürzen kann <img src='http://blog.iteach-online.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .<br />
Trotz aller technischen Möglichkeiten sollte aber der erste Schritt für eine erfolgreiche Deduplizierung beim Anwender liegen, der mit Sinn und Verstand seine Daten auf einem Fileserver bzw. Netzlaufwerk ablegt und nicht durch &#8220;Jagen und Sammeln&#8221; von Daten die Fileserverressourcen unnütz verschwendet.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iteach-online.de/index.php/2012/05/einfach-mehr-platz-auf-dem-fileserver-mit-windows-server-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Schaltvorg&#228;nge mit bitorientierten Operatoren</title>
		<link>http://blog.iteach-online.de/index.php/2012/05/schaltvorgnge-mit-bitorientierten-operatoren/</link>
		<comments>http://blog.iteach-online.de/index.php/2012/05/schaltvorgnge-mit-bitorientierten-operatoren/#comments</comments>
		<pubDate>Wed, 09 May 2012 17:11:00 +0000</pubDate>
		<dc:creator>Cyrano Heine</dc:creator>
				<category><![CDATA[Sonstiges]]></category>
		<category><![CDATA[c#]]></category>

		<guid isPermaLink="false">http://blog.iteach-online.de/?p=1310</guid>
		<description><![CDATA[Meist ist es ja so, dass man mit relativ geringem Aufwand ein größtmögliches Ziel erreichen möchte. Aus diesem Grund möchte ich im folgenden Artikel ein Beispiel für bitorientierte Operatoren unter C# etwas näher erläutern. Ich selbst stand bspw. mal vor dem Problem eine Datenbank mit vielen Kategorien zu erstellen. Ähnlich wie in solch einem Blog [...]]]></description>
			<content:encoded><![CDATA[<p>Meist ist es ja so, dass man mit relativ geringem Aufwand ein größtmögliches Ziel erreichen möchte. Aus diesem Grund möchte ich im folgenden Artikel ein Beispiel für bitorientierte Operatoren unter C# etwas näher erläutern.</p>
<p><span id="more-1310"></span></p>
<p>Ich selbst stand bspw. mal vor dem Problem eine Datenbank mit vielen Kategorien zu erstellen. Ähnlich wie in solch einem Blog hier sollten Einträge einer oder mehreren Kategorien zugeordnet werden. Eine einfache Variante dies umzusetzen wäre die Arbeit mit bitorientierten Operatoren. Man verpacke alles in ein Byte und arbeitet mit den Bits, mit einer Art Schalterfunktion.</p>
<p>Im nachfolgenden Beispiel hat jedes Bit die Funktion eines Schalters. Damit ist es möglich in einem Byte bis zu 8 Ein-/Aus-Informationen zu speichern.</p>
<p>Hier werden nur 7 Ein-/Aus-Informationen gespeichert, da hier der elementare Datentyp <em><span style="color: #0000ff">sbyte</span></em> genutzt wird.<br />
Dieser ist vorzeichenbehaftet und hat folgenden Wertebereich: -2<sup>7</sup> bis 2<sup>7</sup>-1 (-128 bis 127).<br />
Vorzeichenbehaftete Datentypen speichern im höchstwertigen Bit das Vorzeichen [<strong>+</strong>/<strong>-</strong>].</p>
<p>Die Schaltvorgänge werden mit bitorientierten Operatoren realisiert.</p>
<p>Zum leichteren Verständnis habe das Ganze hier am Beispiel eines Lichtschaltersystems für ein Haus dargestellt. Wir steuern also über die einzelnen Bits die Beleuchtung der Räume und NEIN, Dimmer sind hier keine verbaut.</p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="140"><strong><span style="color: #4f81bd">Raum</span></strong></td>
<td valign="top" width="46"></td>
<td>
<p align="center"><span style="color: #8064a2">Keller</span></p>
</td>
<td>
<p align="center"><span style="color: #8064a2">Bad</span></p>
</td>
<td>
<p align="center"><span style="color: #8064a2">Flur</span></p>
</td>
<td>
<p align="center"><span style="color: #8064a2">Arbeitszimmer</span></p>
</td>
<td>
<p align="center"><span style="color: #8064a2">Schlafzimmer</span></p>
</td>
<td>
<p align="center"><span style="color: #8064a2">Küche</span></p>
</td>
<td>
<p align="center"><span style="color: #8064a2">Wohnzimmer</span></p>
</td>
</tr>
<tr>
<td valign="top" width="140"><strong><span style="color: #4f81bd">BIT-Werte mit Vorzeichenbit</span></strong></td>
<td width="46">
<p align="center"><strong><span style="color: #4f81bd">[V]</span></strong></p>
</td>
<td>
<p align="center"><strong><span style="color: #4f81bd">0</span></strong></p>
</td>
<td>
<p align="center"><strong><span style="color: #4f81bd">0</span></strong></p>
</td>
<td>
<p align="center"><strong><span style="color: #4f81bd">1</span></strong></p>
</td>
<td>
<p align="center"><strong><span style="color: #4f81bd">1</span></strong></p>
</td>
<td>
<p align="center"><strong><span style="color: #4f81bd">0</span></strong></p>
</td>
<td>
<p align="center"><strong><span style="color: #4f81bd">1</span></strong></p>
</td>
<td>
<p align="center"><strong><span style="color: #4f81bd">1</span></strong></p>
</td>
</tr>
<tr>
<td valign="top" width="140"><strong><span style="color: #4f81bd">Stellenwert</span></strong></td>
<td width="46"></td>
<td>
<p align="center"><strong><span style="color: #c0504d">64</span></strong></p>
</td>
<td>
<p align="center"><strong><span style="color: #c0504d">32</span></strong></p>
</td>
<td>
<p align="center"><strong><span style="color: #c0504d">16</span></strong></p>
</td>
<td>
<p align="center"><strong><span style="color: #c0504d">8</span></strong></p>
</td>
<td>
<p align="center"><strong><span style="color: #c0504d">4</span></strong></p>
</td>
<td>
<p align="center"><strong><span style="color: #c0504d">2</span></strong></p>
</td>
<td>
<p align="center"><strong><span style="color: #c0504d">1</span></strong></p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<div class="code">
<p><span style="color: #006400">/*  Programm für Schaltvorgänge der Räume eines Gebäudes<br />
*  Die Räume Keller, Bad,Flur,Arbeitszimmer,Schlafzimmer, Küche, Wohnzimmer<br />
*  haben Lichtschalter, die hier entsprechend programmiert werden.<br />
*/</span><span style="color: #808080"><br />
</span><span style="color: #0000ff">using</span><span style="color: #808080"> </span><span style="color: #000000">System</span><span style="color: #0000ff">;</span><span style="color: #808080"><br />
</span><span style="color: #0000ff">namespace</span><span style="color: #808080"> </span><span style="color: #000000">bitOp</span><span style="color: #808080"><br />
</span><span style="color: #000000">{</span><span style="color: #808080"> </span></p>
<p><span style="color: #808080">  </span><span style="color: #0000ff">class</span><span style="color: #808080"> </span><span style="color: #000000">Program</span><span style="color: #808080"><br />
</span><span style="color: #000000">{</span><span style="color: #808080"> </span></p>
<p><span style="color: #808080">    </span><span style="color: #0000ff">static</span><span style="color: #808080"> </span><span style="color: #0000ff">void</span><span style="color: #808080"> </span><span style="color: #000000">Main(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]</span><span style="color: #808080"> </span><span style="color: #000000">args)</span><span style="color: #808080"><br />
</span><span style="color: #000000">{</span><span style="color: #808080"> </span></p>
<p><span style="color: #808080">        </span><span style="color: #006400">//Array erstellen und initialisieren &#8211; hier mit den Räumen des Gebäudes<br />
</span><span style="color: #808080">        </span><span style="color: #0000ff">string</span><span style="color: #000000">[]</span><span style="color: #808080"> </span><span style="color: #000000">raum</span><span style="color: #0000ff">=</span><span style="color: #000000">{</span><span style="color: #808080">&#8220;Keller&#8221;</span><span style="color: #000000">,</span><span style="color: #808080"> &#8220;Bad&#8221;</span><span style="color: #000000">,</span><span style="color: #808080">&#8220;Flur&#8221;</span><span style="color: #000000">,</span><span style="color: #808080">&#8220;Arbeitszimmer&#8221;</span><span style="color: #000000">,</span><span style="color: #808080">&#8220;Schlafzimmer&#8221;</span><span style="color: #000000">,</span><span style="color: #808080"> &#8220;Küche&#8221;</span><span style="color: #000000">,</span><span style="color: #808080"> &#8220;Wohnzimmer&#8221;</span><span style="color: #000000">}</span><span style="color: #808080"> </span><span style="color: #0000ff">;</span></p>
<p><span style="color: #006400">        //Variable die die Binärzahl erhält &#8211; hier mit 0 initialisiert<br />
</span><span style="color: #808080">        </span><span style="color: #0000ff">string</span><span style="color: #808080"> </span><span style="color: #000000">binaer</span><span style="color: #0000ff">=</span><span style="color: #808080">&#8220;<tt>&#092;0</tt>&#8220;</span><span style="color: #0000ff">;</span></p>
<p><span style="color: #808080">        </span><span style="color: #006400">//Typ sbyte ist eine vorzeichenbehaftete 8-Bit Zahl, d.h. höchstwertiges BIT speichert Vorzeichen<br />
</span><span style="color: #808080">        </span><span style="color: #006400">//Wertebereich demnach von -2hoch7 bis (2hoch7)-1 (-128 bis 127)</span></p>
<p><span style="color: #808080">        </span><span style="color: #006400">//Variable die den Wert der Schalter enthält &#8211; hier mit 127 (hexadezimal) initialisiert<br />
</span><span style="color: #808080">        </span><span style="color: #0000ff">sbyte</span><span style="color: #808080"> </span><span style="color: #000000">schaltSchrank</span><span style="color: #808080"> </span><span style="color: #0000ff">=</span><span style="color: #808080"> </span><span style="color: #000000">0x7F</span><span style="color: #0000ff">;</span><span style="color: #808080"> </span><span style="color: #006400">//127 -&gt; 0111 1111 &lt;- in allen Räumen brennt das Licht!</span></p>
<p><span style="color: #808080">        </span><span style="color: #000000">schaltSchrank&amp;</span><span style="color: #0000ff">=</span><span style="color: #000000">~127</span><span style="color: #0000ff">;</span><span style="color: #808080"> </span><span style="color: #006400">//Licht in allen Räumen AUS!<br />
</span><span style="color: #808080">        </span><span style="color: #000000">schaltSchrank</span><span style="color: #808080"> </span><span style="color: #000000">|</span><span style="color: #0000ff">=</span><span style="color: #808080"> </span><span style="color: #800000">32</span><span style="color: #0000ff">;</span><span style="color: #808080"> </span><span style="color: #006400">//Bad-Licht AN! &#8211; per Bitweise-Operator!<br />
</span><span style="color: #808080">        </span><span style="color: #006400">//auch per arithmetischem Operator möglich: schaltSchrank += 32;</span></p>
<p><span style="color: #808080">        </span><span style="color: #000000">schaltSchrank</span><span style="color: #808080"> </span><span style="color: #000000">^</span><span style="color: #0000ff">=</span><span style="color: #808080"> </span><span style="color: #800000">16</span><span style="color: #0000ff">;</span><span style="color: #808080"> </span><span style="color: #006400">//Lichschalter im Flur umschalten &#8211; per Bitweise-Operator!<br />
</span><span style="color: #808080">        </span><span style="color: #000000">schaltSchrank</span><span style="color: #808080"> </span><span style="color: #000000">|</span><span style="color: #0000ff">=</span><span style="color: #808080"> </span><span style="color: #800000">3</span><span style="color: #0000ff">;</span><span style="color: #808080">  </span><span style="color: #006400">//Licht in Wohnzimmer und Küche AN!<br />
</span><span style="color: #808080">        </span><span style="color: #000000">schaltSchrank</span><span style="color: #808080"> </span><span style="color: #000000">&amp;</span><span style="color: #0000ff">=</span><span style="color: #808080"> </span><span style="color: #000000">~3</span><span style="color: #0000ff">;</span><span style="color: #808080"> </span><span style="color: #006400">//Ausschalten von Wohnzimmer (2) und Küche (1)</span></p>
<p><span style="color: #808080">        </span><span style="color: #006400">//für jedes einzelne BIT (0-6) durchlaufe und prüfe auf 1 bzw. 0<br />
</span><span style="color: #808080">        </span><span style="color: #0000ff">for</span><span style="color: #808080"> </span><span style="color: #000000">(</span><span style="color: #0000ff">byte</span><span style="color: #808080"> </span><span style="color: #000000">i</span><span style="color: #808080"> </span><span style="color: #0000ff">=</span><span style="color: #808080"> </span><span style="color: #800000">0</span><span style="color: #0000ff">;</span><span style="color: #808080"> </span><span style="color: #000000">i</span><span style="color: #808080"> </span><span style="color: #000000">&lt;</span><span style="color: #0000ff">=</span><span style="color: #808080"> </span><span style="color: #800000">6</span><span style="color: #0000ff">;</span><span style="color: #808080"> </span><span style="color: #000000">i++)</span><span style="color: #808080"> </span></p>
<p><span style="color: #808080">        </span><span style="color: #000000">{<br />
</span><span style="color: #808080">            </span><span style="color: #000000">binaer</span><span style="color: #0000ff">=</span><span style="color: #808080"> </span><span style="color: #000000">(schaltSchrank</span><span style="color: #808080"> </span><span style="color: #000000">&gt;&gt;</span><span style="color: #808080"> </span><span style="color: #000000">i)%2</span><span style="color: #808080"> </span><span style="color: #000000">+</span><span style="color: #808080"> </span><span style="color: #000000">binaer</span><span style="color: #0000ff">;</span><span style="color: #808080"> </span><span style="color: #006400">//Var. binaer erhält zusammengesetzte Binärzahl<br />
</span><span style="color: #808080">            </span><span style="color: #006400">//es erfolgt eine Rechtsverschiebung der BITs um i Stellen und Modulo-Operation </span></p>
<p><span style="color: #808080">            </span><span style="color: #0000ff">if</span><span style="color: #808080"> </span><span style="color: #000000">((schaltSchrank</span><span style="color: #808080"> </span><span style="color: #000000">&gt;&gt;</span><span style="color: #808080"> </span><span style="color: #000000">i)%2!</span><span style="color: #0000ff">=</span><span style="color: #800000">0</span><span style="color: #000000">)</span><span style="color: #808080"> </span><span style="color: #006400">// wenn BIT ungleich 0&#8230; also 1&#8230;<br />
</span><span style="color: #808080">                </span><span style="color: #006400">//lies Raum aus dem Array &#8211; hier in umgekehrter Reihenfolge gespeichert: also 6-1<br />
</span><span style="color: #808080">                </span><span style="color: #2b91af">Console</span><span style="color: #000000">.WriteLine(</span><span style="color: #808080">&#8220;Schalter vom {0} ist auf AN!&#8221;</span><span style="color: #000000">,</span><span style="color: #808080"> </span><span style="color: #000000">raum[</span><span style="color: #800000">6</span><span style="color: #000000">-i]</span><span style="color: #808080"> </span><span style="color: #000000">)</span><span style="color: #0000ff">;</span><span style="color: #808080">  </span></p>
<p><span style="color: #808080">            </span><span style="color: #000000">}</span><span style="color: #808080"> </span></p>
<p><span style="color: #808080">            </span><span style="color: #006400">//Ausgabe der Binärzahl<br />
</span><span style="color: #808080">            </span><span style="color: #2b91af">Console</span><span style="color: #000000">.WriteLine(</span><span style="color: #808080">&#8220;Zahl {0} binär: [V]{1}&#8221;</span><span style="color: #000000">,schaltSchrank,binaer)</span><span style="color: #0000ff">;</span><span style="color: #808080"> </span></p>
<p><span style="color: #808080">            </span><span style="color: #2b91af">Console</span><span style="color: #000000">.ReadKey()</span><span style="color: #0000ff">;</span><span style="color: #808080"> </span><span style="color: #006400">//Konsolenfenster offen halten, bis Taste gedrückt wird<br />
</span><span style="color: #808080">        </span><span style="color: #000000">}</span></p>
<p><span style="color: #808080">    </span><span style="color: #000000">}</span><span style="color: #808080">   </span></p>
<p><span style="color: #000000">}</span></p>
<p><span style="color: #000000"><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/CS-bitorientierte_Operatoren.png"><img class="alignnone size-full wp-image-1332" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/CS-bitorientierte_Operatoren.png" alt="" width="270" height="72" /></a></span></p>
<p><span style="color: #003366">Testet es und entwickelt es weiter! </span></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.iteach-online.de/index.php/2012/05/schaltvorgnge-mit-bitorientierten-operatoren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PowerShell Script zur Durchforstung der Logs nach Korrelations-ID in SharePoint</title>
		<link>http://blog.iteach-online.de/index.php/2012/05/sharepoint-powershell-duchforstung-logs-korrelations-id/</link>
		<comments>http://blog.iteach-online.de/index.php/2012/05/sharepoint-powershell-duchforstung-logs-korrelations-id/#comments</comments>
		<pubDate>Tue, 08 May 2012 16:43:00 +0000</pubDate>
		<dc:creator>Cyrano Heine</dc:creator>
				<category><![CDATA[Powershell]]></category>
		<category><![CDATA[Sharepoint 2010]]></category>
		<category><![CDATA[Korrelations-ID]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://blog.iteach-online.de/?p=1277</guid>
		<description><![CDATA[Wer mit SharePoint arbeitet, der weiß , dass die Logs sehr hilfreich sein können, da manche Fehlerursache nur so zu finden ist. Der schnellste Weg die Logs zu durchforsten ist per PowerShell. Wer lieber Fenster mag, der kann sich ruhig mal den ULS Viewer ansehen. Ich habe hier ein relativ einfaches aber nützliches PowerShell-Script gebaut, [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="font-size: small"><span style="color: #000000"><span style="font-family: calibri">Wer mit SharePoint arbeitet, der weiß , dass die Logs sehr hilfreich sein können, da manche Fehlerursache nur so zu finden ist. Der schnellste Weg die Logs zu durchforsten ist per PowerShell. Wer lieber Fenster mag, der kann sich ruhig mal den <a href="http://ulsviewer.codeplex.com/" target="_blank">ULS Viewer</a> ansehen. </span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="font-size: small"><span style="color: #000000"><span style="font-family: calibri">Ich habe hier ein relativ einfaches aber nützliches PowerShell-Script gebaut, das die SharePoint-Log-Datei nach der eingegebenen Korrelations-ID durchforstet und dabei nur die Einträge, die größer oder gleich dem eingegebenen Datum sind, durchsucht. Das Ergebnis wird dann in eine Datei geschrieben.</span><span id="more-1277"></span></span></span></p>
<div class="code"><span style="color: #008000">#Variableninitialisierung</span><span style="color: #808080"><br />
</span><span style="color: #2b91af">$CorrIDLogFile</span><span style="color: #808080"> </span><span style="color: #0000ff">=</span><span style="color: #808080"> &#8216;C:\_CorrIDLogFiles\CorrIDLogFile.csv&#8217; </span><span style="color: #008000">#</span><span style="color: #008000">Speicherort der Zieldatei</span><span style="color: #808080"><br />
</span><span style="color: #2b91af">$corrID</span><span style="color: #808080"> </span><span style="color: #0000ff">=</span><span style="color: #808080"> </span><span style="color: #800000">0</span><span style="color: #808080"><br />
</span><span style="color: #2b91af">$startTime</span><span style="color: #808080"><br />
</span><span style="color: #2b91af">$content</span><span style="color: #808080"> </span><span style="color: #0000ff">=</span><span style="color: #808080"><span style="color: #808080">&#8220;&#8221;<br />
</span></span></div>
<p><span style="color: #008000">#Funktion zum Füllen der Datei</span><span style="color: #808080"><br />
</span><span style="color: #000000">function</span><span style="color: #808080"> </span><span style="color: #000000">setLogFile</span><span style="color: #808080"> </span><span style="color: #000000">(</span><span style="color: #2b91af">$content</span><span style="color: #000000">)</span><span style="color: #808080"> </span><span style="color: #000000">{</span><span style="color: #808080"><br />
</span><span style="color: #0000ff">Set-Content</span><span style="color: #808080"> </span><span style="color: #2b91af">$CorrIDLogFile</span><span style="color: #808080"> </span><span style="color: #2b91af">$content</span><span style="color: #808080"><br />
</span><span style="color: #000000">} </span></p>
<p><span style="color: #008000">#Werte von Tastatur einlesen</span><span style="color: #808080"><br />
</span><span style="color: #2b91af">$corrID</span><span style="color: #808080"> </span><span style="color: #0000ff">=</span><span style="color: #808080"> </span><span style="color: #0000ff">Read-Host</span><span style="color: #808080"> </span><span style="color: #000000">-Prompt</span><span style="color: #808080"> &#8220;Bitte Korrelations-ID angeben:&#8221;<br />
</span><span style="color: #2b91af">$startTime</span><span style="color: #808080"> </span><span style="color: #0000ff">=</span><span style="color: #808080"> </span><span style="color: #0000ff">Read-Host</span><span style="color: #808080"> </span><span style="color: #000000">-Prompt</span><span style="color: #808080"><span style="color: #808080">&#8220;Ab wann soll durchforstet werden? Eingabe-Format dd/mm/yyyy hh:mm&#8221;</span></span></p>
<p><span style="color: #008000">#Prüfen ob Datum angegeben wurde</span><span style="color: #808080"><br />
</span><span style="color: #0000ff">if</span><span style="color: #808080"> </span><span style="color: #000000">(</span><span style="color: #2b91af">$startTime</span><span style="color: #000000">)</span><span style="color: #808080"> </span><span style="color: #000000">{</span><span style="color: #808080"><br />
</span><span style="color: #2b91af">$content</span><span style="color: #808080"> </span><span style="color: #0000ff">=</span><span style="color: #808080"> </span><span style="color: #000000">Get-SPLogEvent</span><span style="color: #808080"> </span><span style="color: #000000">-starttime</span><span style="color: #808080"> </span><span style="color: #2b91af">$startTime</span><span style="color: #808080"> </span><span style="color: #000000">|</span><span style="color: #808080"> </span><span style="color: #0000ff">Where-Object</span><span style="color: #808080"> </span><span style="color: #000000">{</span><span style="color: #2b91af">$_</span><span style="color: #000000">.Correlation</span><span style="color: #808080"> </span><span style="color: #0000ff">-eq</span><span style="color: #808080"> </span><span style="color: #2b91af">$corrID</span><span style="color: #000000">}</span><span style="color: #808080"><br />
</span><span style="color: #000000">}</span><span style="color: #808080"> </span><span style="color: #0000ff">else</span><span style="color: #808080"> </span><span style="color: #000000">{</span><span style="color: #808080"><br />
</span><span style="color: #2b91af">$content</span><span style="color: #808080"> </span><span style="color: #0000ff">=</span><span style="color: #808080"> </span><span style="color: #000000">Get-SPLogEvent</span><span style="color: #808080"> </span><span style="color: #000000">|</span><span style="color: #808080"> </span><span style="color: #0000ff">Where-Object</span><span style="color: #808080"> </span><span style="color: #000000">{</span><span style="color: #2b91af">$_</span><span style="color: #000000">.Correlation</span><span style="color: #808080"> </span><span style="color: #0000ff">-eq</span><span style="color: #808080"> </span><span style="color: #2b91af">$corrID</span><span style="color: #000000">}</span><span style="color: #808080"><br />
</span><span style="color: #000000">} </span></p>
<p><span style="color: #008000">#Wenn Datei erreichbar ist, schreibe Daten da rein</span><span style="color: #808080"><br />
</span><span style="color: #0000ff">if</span><span style="color: #808080"> </span><span style="color: #000000">(</span><span style="color: #0000ff">Test-Path</span><span style="color: #808080"> </span><span style="color: #2b91af">$corrIDLogFile</span><span style="color: #000000">)</span><span style="color: #808080"> </span><span style="color: #000000">{</span><span style="color: #808080"><br />
</span><span style="color: #000000">setLogFile</span><span style="color: #808080"> </span><span style="color: #000000">(</span><span style="color: #2b91af">$content</span><span style="color: #000000">)</span><span style="color: #808080"><br />
</span><span style="color: #000000">}</span><span style="color: #808080"> </span><span style="color: #0000ff">else</span><span style="color: #808080"> </span><span style="color: #000000">{</span><span style="color: #808080"><br />
</span><span style="color: #0000ff">Write-Host</span><span style="color: #808080"> &#8220;Datei &#8221; </span><span style="color: #000000">+</span><span style="color: #808080"> </span><span style="color: #2b91af">$corrIDLogFile</span><span style="color: #808080"> </span><span style="color: #000000">+</span><span style="color: #808080"> &#8221; nicht gefunden!&#8221;<br />
</span><span style="color: #000000">}</span></p>
<p>&nbsp;</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/SP_PS-Script-Log-durchforsten.png"><img class="alignnone size-medium wp-image-1275" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/SP_PS-Script-Log-durchforsten-300x82.png" alt="" width="300" height="82" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iteach-online.de/index.php/2012/05/sharepoint-powershell-duchforstung-logs-korrelations-id/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Der Exchangeindex stolpert über doc_too_huge EventID: 9875</title>
		<link>http://blog.iteach-online.de/index.php/2012/05/der-exchangeindex-stolpert-uber-doc_too_huge-eventid-9875/</link>
		<comments>http://blog.iteach-online.de/index.php/2012/05/der-exchangeindex-stolpert-uber-doc_too_huge-eventid-9875/#comments</comments>
		<pubDate>Sun, 06 May 2012 20:04:42 +0000</pubDate>
		<dc:creator>Frank Röder</dc:creator>
				<category><![CDATA[Exchange]]></category>
		<category><![CDATA[Troubleshooting]]></category>
		<category><![CDATA[doc_too_huge]]></category>
		<category><![CDATA[exfolders]]></category>

		<guid isPermaLink="false">http://blog.iteach-online.de/?p=1100</guid>
		<description><![CDATA[Wer eine größere Exchange Server Umgebung administriert, in der die Benutzer das Mailsystem mit einem Fileserver verwechseln bzw. größere Mails mit vielen Anhängen versenden, wird diesen Fehler kennen. In regelmäßigen Abständen meldet der Exchange Server Index folgenden Fehler: Log Name: Application Source: MSExchangeIS Mailbox Store Date: 04/28/2012 12:32:46 AM Event ID: 9875 Task Category: Content Indexing [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Wer eine größere Exchange Server Umgebung administriert, in der die Benutzer das Mailsystem mit einem Fileserver verwechseln bzw. größere Mails mit vielen Anhängen versenden, wird diesen Fehler kennen. In regelmäßigen Abständen meldet der Exchange Server Index folgenden Fehler:</p>
<p><em>Log Name: Application<br />
Source: MSExchangeIS Mailbox Store<br />
Date: 04/28/2012 12:32:46 AM<br />
Event ID: 9875<br />
Task Category: Content Indexing<br />
Level: Error<br />
Keywords: Classic<br />
User: N/A<br />
Computer: Ex-01.spielwiese.intern<br />
Description:<br />
</em><em>Unexpected error &#8220;DOC_TOO_HUGE: There are not enough resources to process the document or row&#8221; occurred while indexing document.<br />
</em><em>Mailbox Database: EX01.spielwiese.intern<br />
</em><em>Folder ID: 34c8-E9F53E<br />
</em><em>Message ID: 2-260403<br />
</em><em>Document ID: 611<br />
</em><em>Error Code: 0x8004364a</em></p>
<p style="text-align: justify;">oder in Deutsch:</p>
<p style="text-align: justify;"><em>Protokollname: Application</em><br />
<em>Quelle:  MSExchangeIS Mailbox Store </em><br />
<em>Datum:         28.04.2012 19:13:07</em><br />
<em>Ereignis-ID:   9875 </em><br />
<em>Aufgabenkategorie:Inhaltsindizierung </em><br />
<em>Ebene:         Fehler </em><br />
<em>Schlüsselwörter:Klassisch </em><br />
<em>Benutzer:      Nicht zutreffend</em><br />
<em>Computer:      EX01.spielwiese.intern</em><br />
<em>Beschreibung: Unerwarteter Fehler &#8220;DOC_TOO_HUGE: Es gibt nicht genügend Ressourcen für das Verarbeiten des Dokuments oder der Zeile&#8221; beim Indizieren des Dokuments.</em><br />
<em>Postfachdatenbank: Mailbox Database 2060559779 </em><br />
<em>Ordner-ID: 34c8-E9F53E </em><br />
<em>Nachrichten-ID: 2-260403</em><br />
<em>Dokument-ID: 611</em><br />
<em>Fehlercode: 0x8004364a</em></p>
<p style="text-align: justify;">Dieser Fehler sollte eigentlich schon seit SP1 UR1 (<a href="http://social.technet.microsoft.com/Forums/en-US/exchange2010/thread/53805beb-6bc9-405e-a4dc-eac475044507/" target="_blank">wie hier von einem MS Mitarbeiter gepostet</a>) gefixt sein. Trotzdem sehe ich bei vielen meiner Kunden ab und an diese Fehlermeldung im Ereignisprotokoll. Das Nervige an dieser Angelegenheit ist, dass Exchange leider nicht verrät, in welcher Mailbox sich die betreffende Nachricht befindet und um welche Nachricht es sich handelt. Deshalb ist für die Fehlersuche etwas Handarbeit erforderlich. Um die entsprechende Nachricht zu finden, die diese Fehlermeldung verursacht, muss man sich dem Tool &#8220;Exfolders&#8221; bedienen. Dieses Tool kann unter folgender Adresse heruntergeladen werden:</p>
<p style="text-align: justify;"><a href="http://gallery.technet.microsoft.com/Exchange-2010-SP1-ExFolders-e6bfd405" target="_blank">Download Exfolders</a></p>
<p style="text-align: justify;">Das Tool &#8220;ExFolders&#8221; ist der direkte Nachfolger von PFDaVAdmin, welches mir schon treue Dienste geleistet hat. Nachdem das Tool heruntergeladen wurde, muss die Datei &#8220;ExFolders&#8221; in den Ordner &#8220;C:\Programme\Microsoft\Exchange\V14\Bin&#8221; kopiert werden. Da die Datei &#8220;ExFolders.exe&#8221; nicht signiert ist und es dadurch bei der Ausführung zu einer Fehlermeldung kommt, muss Sie entweder auf dem Zielsystem mit &#8220;sn.exe&#8221; signiert werden oder die Überprüfung der Signatur für &#8220;ExFolders&#8221; deaktiviert werden. Für das Deaktivieren liefert Microsoft in der ZIP-Datei gleich eine entsprechende REG-Datei (&#8220;TurnOffSNVerificationForExFolders.reg&#8221;) mit, welche die Überprüfung der Signatur für &#8220;ExFolders&#8221; deaktiviert.</p>
<p style="text-align: justify;">Wenn alle Vorbereitungen abgeschlossen sind, kann man sich an die eigentliche Arbeit machen.  Als Erstes muss man sich mit der Mailboxdatenbank verbinden, in der sich die betreffende Nachricht befindet. Der Name der betreffenden Datenbank ist in der Fehlermeldung ersichtlich.</p>
<p style="text-align: justify;"><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/exfolders_connect.gif"><img class="alignnone  wp-image-1108" title="exfolders_connect" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/exfolders_connect.gif" alt="" width="407" height="261" /></a></p>
<p style="text-align: justify;"><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/exfolders_connect2.gif"><img class="alignnone  wp-image-1109" title="exfolders_connect2" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/exfolders_connect2.gif" alt="" width="293" height="163" /></a></p>
<p style="text-align: justify;">Nachdem die Verbindung erfolgreich erstellt wurde, muss man die Mailbox bzw. den Ordner ermitteln, in dem sich die betreffende Nachricht befindet. Dazu exportiert man einfach alle in der Datenbank enthaltenen Ordner inklusive ihrer Eigenschaften. Wichtig dabei ist, dass beim Export auch die Eigenschaft &#8220;ptagFID: 0&#215;67480014&#8243; mit exportiert wird. In dieser Eigenschaft wird die hexadezimale Kennung des Ordners erfasst. Beim Exportieren sollte man etwas Geduld haben. Wenn sich eine größere Anzahl von Postfächern in der Datenbank befindet, kann der Exportvorgang locker fünf Minuten in Anspruch nehmen.</p>
<p style="text-align: justify;"><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/exfolders_export.gif"><img class="alignnone  wp-image-1110" title="exfolders_export" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/exfolders_export.gif" alt="" width="366" height="244" /></a></p>
<p style="text-align: justify;"><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/exfolders_export1_1.gif"><img class="alignnone  wp-image-1121" title="exfolders_export1_1" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/exfolders_export1_1.gif" alt="" width="238" height="237" /></a></p>
<p style="text-align: justify;"><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/exfolders_export2.gif"><img class="alignnone  wp-image-1123" title="exfolders_export2" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/exfolders_export2.gif" alt="" width="362" height="185" /></a></p>
<p style="text-align: justify;">Nachdem der Export erfolgreich abgeschlossen wurde, kann die Textdatei mit dem Notepad nach der Ordner-ID &#8220;<em>34c8-E9F53E</em>&#8221; durchsucht werden.</p>
<p style="text-align: justify;"><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/notepad1.gif"><img class="alignnone  wp-image-1125" title="notepad1" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/notepad1.gif" alt="" width="229" height="123" /></a><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/notepad2.gif"><img class="alignnone  wp-image-1126" title="notepad2" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/notepad2.gif" alt="" width="223" height="121" /></a></p>
<p style="text-align: justify;">Wie man in der Textdatei erkennen kann, ist der Benutzer Röder &#8220;daran schuld&#8221; <img src='http://blog.iteach-online.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . Um jetzt letztendlich die Nachricht zu ermitteln, muss man sich mit Hilfe von &#8220;ExFolders&#8221; mit dem betreffenden Ordner verbinden. Im Notepad ist gut zu erkennen, dass es sich um den Kalender des Benutzers handelt. Wenn der Ordner in &#8220;ExFolders&#8221; markiert ist, können die Eigenschaften der einzelnen Elemente exportiert werden. Bei dieser Aufgabe lauert eine kleine Stolperfalle. In den Standardeinstellungen von &#8220;ExFolders&#8221; werden die IDs der Nachrichten nicht exportiert. Man muss &#8220;ExFolders&#8221; anweisen, diese Eigenschaft mit einzubeziehen.</p>
<p style="text-align: justify;"><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/folder_export1.gif"><img class="alignnone  wp-image-1129" title="folder_export1" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/folder_export1.gif" alt="" width="316" height="209" /></a></p>
<p style="text-align: justify;"><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/folder_export2.gif"><img class="alignnone  wp-image-1130" title="folder_export2" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/folder_export2.gif" alt="" width="316" height="209" /></a></p>
<p style="text-align: justify;">Die ID für die Eigenschaft findet man in der MSDN unter folgendem Link: <a href="http://msdn.microsoft.com/en-us/library/ee160871(v=exchg.80).aspx" target="_blank">http://msdn.microsoft.com/en-us/library/ee160871(v=exchg.80).aspx</a></p>
<p style="text-align: justify;">Es muss also die Eigenschaft pidTagMid mit der hexadezimalen Kennung 0x674A0014 exportiert werden.</p>
<p style="text-align: justify;"><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/item_export.gif"><img class="alignnone  wp-image-1133" title="item_export" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/item_export.gif" alt="" width="189" height="189" /></a><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/item_export2.gif"><img class="alignnone  wp-image-1134" title="item_export2" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/item_export2.gif" alt="" width="188" height="188" /></a></p>
<p style="text-align: justify;">Der Exportvorgang kann wieder eine Weile dauern. Nachdem dieser abgeschlossen wurde, kann man jetzt in der Textdatei nach der Nachrichten-ID suchen.</p>
<p style="text-align: justify;"><a href="http://blog.iteach-online.de/wp-content/uploads/2012/05/item_export3.gif"><img class="alignnone  wp-image-1135" title="item_export3" src="http://blog.iteach-online.de/wp-content/uploads/2012/05/item_export3.gif" alt="" width="378" height="204" /></a></p>
<p style="text-align: justify;">Nachdem die Nachricht identifiziert wurde, kann der User informiert werden, welche Nachricht in welchem Ordner gelöscht werden soll. Sollte das nicht möglich sein, kann die Nachricht auch über die Powershell mit folgender Kommandozeile gelöscht werden:</p>

<div class="wp_syntax"><div class="code"><pre class="powershell" style="font-family:monospace;">Search<span style="color: pink;">-</span>Mailbox <span style="color: pink;">-</span>Identity <span style="color: #800000;">&quot;f.roeder&quot;</span> <span style="color: pink;">-</span>SearchQuery <span style="color: #800000;">'Subject:&quot;Besprechung Exchange Migration&quot;'</span> <span style="color: pink;">-</span>DeleteContent</pre></div></div>

<p>Danach sollte der Fehler mit der EventID 9875 endlich Geschichte sein.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iteach-online.de/index.php/2012/05/der-exchangeindex-stolpert-uber-doc_too_huge-eventid-9875/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mail kann in OWA nicht gelöscht werden</title>
		<link>http://blog.iteach-online.de/index.php/2012/03/mail-kann-in-owa-nicht-geloscht-werden/</link>
		<comments>http://blog.iteach-online.de/index.php/2012/03/mail-kann-in-owa-nicht-geloscht-werden/#comments</comments>
		<pubDate>Thu, 22 Mar 2012 09:00:54 +0000</pubDate>
		<dc:creator>Frank Röder</dc:creator>
				<category><![CDATA[Sonstiges]]></category>
		<category><![CDATA[Troubleshooting]]></category>
		<category><![CDATA[Exchange 2010]]></category>
		<category><![CDATA[Outlook Web App]]></category>

		<guid isPermaLink="false">http://blog.iteach-online.de/?p=1053</guid>
		<description><![CDATA[Neulich bekam ich eine Supportanfrage von einem befreundeten Systemhaus, dass sie bei einem Kunden ein relativ komisches Phänomen haben. Wenn Benutzer auf das eigene Postfach über Outlook Web Application zugreifen, dann können sie keine E-Mails verschieben oder löschen. Jeder Versuch dies zu tun, wird mit einer Fehlermeldung im OWA quittiert. Diese Fehlermeldung ist erst einmal [...]]]></description>
			<content:encoded><![CDATA[<p>Neulich bekam ich eine Supportanfrage von einem befreundeten Systemhaus, dass sie bei einem Kunden ein relativ komisches Phänomen haben. Wenn Benutzer auf das eigene Postfach über Outlook Web Application zugreifen, dann können sie keine E-Mails verschieben oder löschen. Jeder Versuch dies zu tun, wird mit einer Fehlermeldung im OWA quittiert.</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/02/owa_delete.gif"><img class="alignnone  wp-image-1059" title="owa_delete" src="http://blog.iteach-online.de/wp-content/uploads/2012/02/owa_delete.gif" alt="" width="325" height="227" /></a></p>
<p>Diese Fehlermeldung ist erst einmal nichtssagend. Der nächste Blick ging in das Ereignisprotokoll des entsprechenden Servers. Dort findet man eine Fehlermeldung mit der EventID 108 und der Quelle &#8220;MSExchange OWA&#8221;. Als Fehlertext bekommt man &#8220;Outlook Web App konnte aufgrund eines Konfigurationsfehlers keine Verbindung zu den Exchange-Webdiensten herstellen. Antwortcode= &#8216;null, webExceptionStatus = SendFailure&#8217;.</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/02/eventlog_owa.gif"><img class="alignnone  wp-image-1060" title="eventlog_owa" src="http://blog.iteach-online.de/wp-content/uploads/2012/02/eventlog_owa.gif" alt="" width="352" height="237" /></a></p>
<p>Leider wird man aus dieser Fehlermeldung auch nicht unbedingt schlauer. Wenn man Google mit dieser Event-ID füttert, dann kommt eine Vielzahl von Ergebnissen. Ein Ergebnis zeigt auf folgenden KB-Artikel:</p>
<p><a title="http://support.microsoft.com/kb/2249852" href="http://support.microsoft.com/kb/2249852" target="_blank">http://support.microsoft.com/kb/2249852</a></p>
<p>Allerdings trifft dieser Artikel nicht zu und das System war auch aktuell gepatcht. Als Nächstes gingen meine Gedanken in Richtung IIS. Ich habe mir also einmal die Konfiguration der Website angesehen. Genau dort bin ich fündig geworden. Der Kunde hatte auf diesem Server noch weitere Webseiten im IIS Konfiguriert. Damit das funktioniert, hatte er die &#8220;Default Web Site&#8221; fest an eine IP gebunden und die anderen Webseiten mit einem Hostheader konfiguriert. Die Bindungen für die &#8220;Default Web Site&#8221; sahen in etwa so aus:</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/02/bindings_defultweb.gif"><img class="alignnone  wp-image-1061" title="bindings_defultweb" src="http://blog.iteach-online.de/wp-content/uploads/2012/02/bindings_defultweb.gif" alt="" width="365" height="153" /></a></p>
<p>Genau darüber stolpert Outlook Web App. Nachdem die Einstellungen korrigiert wurden, funktionierte Outlook Web App wieder wie gewohnt.</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/02/bindings_defultweb_korrigiert.gif"><img class="alignnone  wp-image-1062" title="bindings_defultweb_korrigiert" src="http://blog.iteach-online.de/wp-content/uploads/2012/02/bindings_defultweb_korrigiert.gif" alt="" width="363" height="184" /></a></p>
<p>Lessons learned: Niemals an den Bindungen der Exchange Website fummeln und andere Webseiten haben im IIS des Exchange Servers nichts zu suchen. Leider war dieses System ein SBS 2011, wo schon durch die Installation mehrere Webseiten eingerichtet werden.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iteach-online.de/index.php/2012/03/mail-kann-in-owa-nicht-geloscht-werden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DNS Global Query Block List und WPAD</title>
		<link>http://blog.iteach-online.de/index.php/2012/03/dns-global-query-block-list-und-wpad/</link>
		<comments>http://blog.iteach-online.de/index.php/2012/03/dns-global-query-block-list-und-wpad/#comments</comments>
		<pubDate>Wed, 14 Mar 2012 19:26:58 +0000</pubDate>
		<dc:creator>Frank Röder</dc:creator>
				<category><![CDATA[DNS]]></category>
		<category><![CDATA[Windows Server 2008 / 2008 R2]]></category>
		<category><![CDATA[enableglobalqueryblocklist]]></category>
		<category><![CDATA[WPAD]]></category>

		<guid isPermaLink="false">http://blog.iteach-online.de/?p=978</guid>
		<description><![CDATA[Wer seine Clients über einen Proxyserver in das Internet lässt, der steht vor der Entscheidung, wie er die Clients mit einer gültigen Proxykonfiguration versorgt. Viele greifen hier zu einer Gruppenrichtlinie. Eine viel elegantere Variante ist hier WPAD. Gerade wenn eine Firma über mehrere Standorte verfügt und die Benutzer zwischen den einzelnen Standorten reisen, ist WPAD [...]]]></description>
			<content:encoded><![CDATA[<p>Wer seine Clients über einen Proxyserver in das Internet lässt, der steht vor der Entscheidung, wie er die Clients mit einer gültigen Proxykonfiguration versorgt. Viele greifen hier zu einer Gruppenrichtlinie. Eine viel elegantere Variante ist hier WPAD. Gerade wenn eine Firma über mehrere Standorte verfügt und die Benutzer zwischen den einzelnen Standorten reisen, ist WPAD eine sehr unkomplizierte Angelegenheit die auch recht schnell umgesetzt ist. Allerdings steht man dann vor der Aufgabe, dem Browser mitzuteilen, wo sich die Datei &#8220;wpad.dat&#8221; befindet. Dies kann in den meisten Browsern statisch eingetragen werden. Es gibt aber auch die Möglichkeit, dies über die DHCP Option 252 zu realisieren. Eine weitere Möglichkeit ist ein Host-A Eintrag bzw. CName-Eintrag, der auf einen Webserver zeigt auf dem die &#8220;wpad.dat&#8221; liegt.</p>
<p>Bei der DNS Variante gibt es allerdings seit Windows Server 2008 eine kleine Stolperfalle. Microsoft hat beschlossen, das der Eintrag &#8220;wpad&#8221; besonders schützenswert ist. Das bedeutet, selbst wenn in einer Forward-Lookup Zone ein A-Eintrag mit dem Namen &#8220;wpad&#8221; existiert, wird dieser bei einer DNS Anfrage nicht von einem Windows Server 2008 bzw. 2008 R2 mit einer korrekten IP aufgelöst. Werfen wir einmal einen Blick in den DNS-Server:</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/02/wpad_dnsserver.gif"><img class="wp-image-980 alignnone" title="wpad_dnsserver" src="http://blog.iteach-online.de/wp-content/uploads/2012/02/wpad_dnsserver.gif" alt="" width="400" height="209" /></a></p>
<p>Wie man sehen kann, ist der A-Eintrag für &#8220;wpad&#8221; korrekt gesetzt. Wenn jetzt ein DNS-Client versucht diesen Namen in eine IP-Adresse aufzulösen, wird das in einer Fehlermeldung enden.</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/02/wpad_dnsclient.gif"><img class="alignleft  wp-image-981" title="wpad_dnsclient" src="http://blog.iteach-online.de/wp-content/uploads/2012/02/wpad_dnsclient.gif" alt="" width="399" height="162" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Auf dem DNS Server selbst wird durch eine DNS-Abfrage für den Host &#8220;wpad.domaene.intern&#8221; eine Warnung im Eventlog verzeichnet:</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/02/wpad_dnsserver_eventlog1.gif"><img class="wp-image-987 alignnone" title="wpad_dnsserver_eventlog" src="http://blog.iteach-online.de/wp-content/uploads/2012/02/wpad_dnsserver_eventlog1.gif" alt="" width="402" height="329" /></a></p>
<p>Leider kann man dieses tolle &#8220;Feature&#8221; nicht über die GUI oder über eine Gruppenrichtlinie deaktivieren. Um es letztendlich deaktivieren zu können, kommt dnscmd zum Einsatz. Mit dem Kommando</p>
<p><em>dnscmd /info /globalqueryblocklist</em></p>
<p>kann man die Einstellung anzeigen lassen.</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/02/dnscmd_info.gif"><img class="wp-image-983 alignnone" title="dnscmd_info" src="http://blog.iteach-online.de/wp-content/uploads/2012/02/dnscmd_info.gif" alt="" width="403" height="177" /></a></p>
<p>Bei einer Standardinstallation sind also die Hostnamen &#8220;isatap&#8221; und &#8220;wpad&#8221; in der globalen Abfragesperrliste enthalten. Um jetzt zum Beispiel den Hostnamen &#8220;wpad&#8221; zu entfernen, setzt man über dnscmd folgendes Kommando auf jedem DNS-Server ab:</p>
<p><em>dnscmd /config /globalqueryblocklist isatap</em></p>
<p>Um das &#8220;Feature&#8221; komplett zu deaktivieren, kann man folgendes Kommando einsetzen:</p>
<p><em>dnscmd /config /enableglobalqueryblocklist 0</em></p>
<p>Wer jetzt mehrere DNS Server in seiner Domäne hat, der muss dieses Kommando auf allen DNS Servern absetzen, weil diese Konfiguration nicht zwischen den DNS Server repliziert wird. Der dafür ist, dass diese Einstellung in der lokalen Registrierung jedes DNS Server eingetragen wird. Folgende Schlüssel bzw. Werte sind für die Konfiguration verantwortlich:</p>
<p>Aktivieren bzw. Deaktivieren der globalen Abfragesperrliste:</p>
<p><strong>Key</strong><br />
<em>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS\Parameters</em></p>
<p><strong>Name</strong><br />
<em>EnableGlobalQueryBlockList</em></p>
<p><strong>Typ</strong><br />
<em>REG_DWORD</em></p>
<p><strong>Daten</strong><br />
<em>Enable: 1; Disable: 0</em></p>
<p>Eintragen bzw. Löschen von Hostnamen aus der globalen Abfragesperrliste:</p>
<p><strong>Key</strong><br />
<em>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS\Parameters</em></p>
<p><strong>Name</strong><br />
<em>GlobalQueryBlockList</em></p>
<p><strong>Type</strong><br />
<em>REG_MULTI_SZ</em></p>
<p><strong>Data</strong><br />
<em>wpad isatap</em></p>
<p>Wenn man jetzt aber mehrere DNS-Server verwalten muss, dann kann das Konfigurieren der globalen Abfragesperrliste eine zeitaufwendige Angelegenheit werden. Microsoft bietet dafür auch keine ADMX Datei an, mit der man diese Funktion bequem über eine Gruppenrichtlinie konfigurieren kann. Zum Glück gibt es ja die Gruppenrichtlinieneinstellungen, mit denen man einzelne Registrykeys verteilen kann.</p>
<p>Damit wirklich alle DNS Server konfiguriert werden, empfiehlt es sich, dass die Richtlinie auf der Ebene der Domäne erstellt wird.</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/02/gpo_globalblocklist.gif"><img class="wp-image-993 alignnone" title="gpo_globalblocklist" src="http://blog.iteach-online.de/wp-content/uploads/2012/02/gpo_globalblocklist.gif" alt="" width="406" height="205" /></a></p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/02/gpo_globalblocklist_gpp.gif"><img class="wp-image-994 alignnone" title="gpo_globalblocklist_gpp" src="http://blog.iteach-online.de/wp-content/uploads/2012/02/gpo_globalblocklist_gpp.gif" alt="" width="494" height="254" /></a></p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/02/gpo_globalblocklist_gpp01.gif"><img class="alignleft  wp-image-997" title="gpo_globalblocklist_gpp01" src="http://blog.iteach-online.de/wp-content/uploads/2012/02/gpo_globalblocklist_gpp01.gif" alt="" width="256" height="295" /></a><a href="http://blog.iteach-online.de/wp-content/uploads/2012/02/gpo_globalblocklist_gpp02.gif"><img class="wp-image-998 alignnone" title="gpo_globalblocklist_gpp02" src="http://blog.iteach-online.de/wp-content/uploads/2012/02/gpo_globalblocklist_gpp02.gif" alt="" width="242" height="294" /></a></p>
<p>Damit sich die Einstellung nur auf die DNS Server der Domäne auswirkt, prüfe ich über die Zielgruppenadressierung, ob der Schlüssel &#8220;HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters&#8221; existiert. Nur wenn dieser Schlüssel vorhanden ist, soll die Einstellung in der Registrierung vorgenommen werden.</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/02/gpo_globalblocklist_gpp03.gif"><img class="alignleft  wp-image-1001" title="gpo_globalblocklist_gpp03" src="http://blog.iteach-online.de/wp-content/uploads/2012/02/gpo_globalblocklist_gpp03.gif" alt="" width="486" height="266" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Nachdem die Einstellungen erledigt sind, sollte es im Gruppenrichtlinieneditor so aussehen:</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/02/gpo_globalblocklist_gpp04.gif"><img class="wp-image-1002 alignnone" title="gpo_globalblocklist_gpp04" src="http://blog.iteach-online.de/wp-content/uploads/2012/02/gpo_globalblocklist_gpp04.gif" alt="" width="485" height="338" /></a></p>
<p>Damit sollte dann die globale Abfragesperrliste deaktiviert sein und die Auflösung des Namens &#8220;wpad&#8221; zu einer IP-Adresse gelingen. Dieses &#8220;Feature&#8221; gibt es auch unter Windows Server 2003R2. Allerdings war es dort im Standard nicht aktiviert.</p>
<p>Weitere Infos:</p>
<ul>
<li><a href="http://technet.microsoft.com/en-us/library/cc794902(v=ws.10).aspx" target="_blank">Verwalten der globalen Abfragesperrliste</a></li>
<li><a href="http://download.microsoft.com/download/5/3/c/53cdc0bf-6609-4841-a7b9-cae98cc2e4a3/DNS_Server_Global_%20Query_Block%20List.doc" target="_blank">Whitepaper Gobal Query Block List</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.iteach-online.de/index.php/2012/03/dns-global-query-block-list-und-wpad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Self Service Formular für das Active Directory Teil 4</title>
		<link>http://blog.iteach-online.de/index.php/2012/02/self-service-formular-fur-das-active-directory-teil-4/</link>
		<comments>http://blog.iteach-online.de/index.php/2012/02/self-service-formular-fur-das-active-directory-teil-4/#comments</comments>
		<pubDate>Thu, 23 Feb 2012 09:46:01 +0000</pubDate>
		<dc:creator>Frank Röder</dc:creator>
				<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[Skripting / Programmierung]]></category>
		<category><![CDATA[AD Datenbank]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[DirectoryEntry]]></category>
		<category><![CDATA[DirectorySearcher]]></category>
		<category><![CDATA[thumbnailphoto]]></category>
		<category><![CDATA[Windows Server 2008 / 2008 R2]]></category>

		<guid isPermaLink="false">http://blog.iteach-online.de/?p=898</guid>
		<description><![CDATA[Nachdem die Erstellung des Formulars abgeschlossen wurde, müssen wir als nächstes das komplette Projekt auf einen IIS verteilen. Das Projekt verteilen wir auf einen IIS 7.5. Die Installation der einzelnen Komponenten kann man bequem über die Powershell erledigen: ########################################## #Import des Servermoduls import-module ServerManager #Installation IIS add-windowsfeature AS-WAS-Support,AS-TCP-Activation,AS-Named-Pipes,Web-Server,Web-WebServer,Web-Common-Http,Web-Static-Content,Web-Default-Doc,Web-Dir-Browsing,Web-Http-Errors,Web-App-Dev,Web-Asp-Net,Web-Net-Ext,Web-ISAPI-Ext,Web-ISAPI-Filter,Web-Health,Web-Http-Logging,Web-Request-Monitor,Web-Security,Web-Windows-Auth,Web-Filtering,Web-Performance,Web-Stat-Compression,Web-Mgmt-Tools,Web-Mgmt-Console,NET-Framework,NET-Framework-Core,NET-Win-CFAC,NET-HTTP-Activation,NET-Non-HTTP-Activ,RSAT,RSAT-Role-Tools,RSAT-Web-Server,WAS,WAS-Process-Model,WAS-NET-Environment,WAS-Config-APIs Nachdem der IIS installiert wurde, muss die [...]]]></description>
			<content:encoded><![CDATA[<p>Nachdem die Erstellung des Formulars abgeschlossen wurde, müssen wir als nächstes das komplette Projekt auf einen IIS verteilen. Das Projekt verteilen wir auf einen IIS 7.5. Die Installation der einzelnen Komponenten kann man bequem über die Powershell erledigen:</p>

<div class="wp_syntax"><div class="code"><pre class="powershell" style="font-family:monospace;"><span style="color: #008000;">##########################################</span>
<span style="color: #008000;">#Import des Servermoduls</span>
import<span style="color: pink;">-</span>module ServerManager
<span style="color: #008000;">#Installation IIS</span>
add<span style="color: pink;">-</span>windowsfeature AS<span style="color: pink;">-</span>WAS<span style="color: pink;">-</span>Support<span style="color: pink;">,</span>AS<span style="color: pink;">-</span>TCP<span style="color: pink;">-</span>Activation<span style="color: pink;">,</span>AS<span style="color: pink;">-</span>Named<span style="color: pink;">-</span>Pipes<span style="color: pink;">,</span>Web<span style="color: pink;">-</span>Server<span style="color: pink;">,</span>Web<span style="color: pink;">-</span>WebServer<span style="color: pink;">,</span>Web<span style="color: pink;">-</span>Common<span style="color: pink;">-</span>Http<span style="color: pink;">,</span>Web<span style="color: pink;">-</span>Static<span style="color: pink;">-</span>Content<span style="color: pink;">,</span>Web<span style="color: pink;">-</span>Default<span style="color: pink;">-</span>Doc<span style="color: pink;">,</span>Web<span style="color: pink;">-</span>Dir<span style="color: pink;">-</span>Browsing<span style="color: pink;">,</span>Web<span style="color: pink;">-</span>Http<span style="color: pink;">-</span>Errors<span style="color: pink;">,</span>Web<span style="color: pink;">-</span>App<span style="color: pink;">-</span>Dev<span style="color: pink;">,</span>Web<span style="color: pink;">-</span>Asp<span style="color: pink;">-</span>Net<span style="color: pink;">,</span>Web<span style="color: pink;">-</span>Net<span style="color: pink;">-</span>Ext<span style="color: pink;">,</span>Web<span style="color: pink;">-</span>ISAPI<span style="color: pink;">-</span>Ext<span style="color: pink;">,</span>Web<span style="color: pink;">-</span>ISAPI<span style="color: pink;">-</span><span style="color: #0000FF;">Filter</span><span style="color: pink;">,</span>Web<span style="color: pink;">-</span>Health<span style="color: pink;">,</span>Web<span style="color: pink;">-</span>Http<span style="color: pink;">-</span>Logging<span style="color: pink;">,</span>Web<span style="color: pink;">-</span>Request<span style="color: pink;">-</span>Monitor<span style="color: pink;">,</span>Web<span style="color: pink;">-</span>Security<span style="color: pink;">,</span>Web<span style="color: pink;">-</span>Windows<span style="color: pink;">-</span>Auth<span style="color: pink;">,</span>Web<span style="color: pink;">-</span>Filtering<span style="color: pink;">,</span>Web<span style="color: pink;">-</span>Performance<span style="color: pink;">,</span>Web<span style="color: pink;">-</span>Stat<span style="color: pink;">-</span>Compression<span style="color: pink;">,</span>Web<span style="color: pink;">-</span>Mgmt<span style="color: pink;">-</span>Tools<span style="color: pink;">,</span>Web<span style="color: pink;">-</span>Mgmt<span style="color: pink;">-</span>Console<span style="color: pink;">,</span>NET<span style="color: pink;">-</span>Framework<span style="color: pink;">,</span>NET<span style="color: pink;">-</span>Framework<span style="color: pink;">-</span>Core<span style="color: pink;">,</span>NET<span style="color: pink;">-</span>Win<span style="color: pink;">-</span>CFAC<span style="color: pink;">,</span>NET<span style="color: pink;">-</span>HTTP<span style="color: pink;">-</span>Activation<span style="color: pink;">,</span>NET<span style="color: pink;">-</span>Non<span style="color: pink;">-</span>HTTP<span style="color: pink;">-</span>Activ<span style="color: pink;">,</span>RSAT<span style="color: pink;">,</span>RSAT<span style="color: pink;">-</span>Role<span style="color: pink;">-</span>Tools<span style="color: pink;">,</span>RSAT<span style="color: pink;">-</span>Web<span style="color: pink;">-</span>Server<span style="color: pink;">,</span>WAS<span style="color: pink;">,</span>WAS<span style="color: pink;">-</span>Process<span style="color: pink;">-</span>Model<span style="color: pink;">,</span>WAS<span style="color: pink;">-</span>NET<span style="color: pink;">-</span>Environment<span style="color: pink;">,</span>WAS<span style="color: pink;">-</span>Config<span style="color: pink;">-</span>APIs</pre></div></div>

<p>Nachdem der IIS installiert wurde, muss die Webseite auf den Server kopiert werden. Zur Vereinfachung nutze ich die &#8220;Default Website&#8221; und kopiere die Webseite einfach unter &#8220;C:\inetpub\wwwroot&#8221;. In der Web.config muss noch die Windowsauthentifizierung aktiviert werden. Die folgenden Einstellungen müssen unterhalb von &lt;system.web&gt; gesetzt werden.</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;authentication</span> <span style="color: #000066;">mode</span>=<span style="color: #ff0000;">&quot;windows&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;identity</span> <span style="color: #000066;">impersonate</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span></pre></div></div>

<p>Wenn die Webseite auf einem Mitgliedsserver läuft, was durchaus eine gute Entscheidung wäre, muss für das Computerkonto im Active Directory die Delegierung aktiviert werden:<br />
<a href="http://blog.iteach-online.de/wp-content/uploads/2012/02/delegation.gif"><img class="alignnone  wp-image-1034" title="delegation" src="http://blog.iteach-online.de/wp-content/uploads/2012/02/delegation.gif" alt="" width="243" height="279" /></a></p>
<p>Jetzt müssen im IIS noch ein paar Einstellungen gesetzt werden.</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/02/iis_auth.gif"><img class="wp-image-916 alignnone" title="iis_auth" src="http://blog.iteach-online.de/wp-content/uploads/2012/02/iis_auth.gif" alt="" width="487" height="183" /></a><br />
<a href="http://blog.iteach-online.de/wp-content/uploads/2012/02/iis_auth2.gif"><img class="wp-image-917 alignnone" title="iis_auth2" src="http://blog.iteach-online.de/wp-content/uploads/2012/02/iis_auth2.gif" alt="" width="487" height="218" /></a></p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/02/iis_auth3.gif"><img class="wp-image-918 alignnone" title="iis_auth3" src="http://blog.iteach-online.de/wp-content/uploads/2012/02/iis_auth3.gif" alt="" width="307" height="198" /></a></p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/02/iis_auth4.gif"><img class="wp-image-919 alignnone" title="iis_auth4" src="http://blog.iteach-online.de/wp-content/uploads/2012/02/iis_auth4.gif" alt="" width="489" height="201" /></a></p>
<p>&nbsp;</p>
<p>Sollte unter &#8220;Anbieter&#8221; noch die NTLM Authentifizierung aktiv sein, kann es zum Double-Hop Problem kommen. Eine genaue Beschreibung zu diesem Problem findet man auf der <a title="Double Hop IIS" href="http://msdn.microsoft.com/de-de/library/ms180891(v=vs.80).aspx" target="_blank">MSDN</a>.</p>
<p>Wenn alles erledigt ist, kann die Seite aufgerufen werden. Wichtig: Der Internet Explorer sendet nur für die Zone &#8220;Intranet&#8221; die Windows Anmeldeinformationen an den IIS. Es muss also sichergestellt werden, dass der Internet Explorer diese Seite der Zone Intranet zuweist und nicht der Zone Internet. Wenn FireFox, Safari etc. eingesetzt werden, funktioniert diese Lösung nicht. Damit die Webseite auch mit anderen Browsern funktioniert, müsste man unter Umständen eine weitere Seite erstellen, an der sich die Benutzer mit Browsern von Drittanbietern als Erstes entsprechend authentifizieren müssen und erst danach auf die Formularseite weitergeleitet werden.</p>
<p>Im Browser sieht die fertige Lösung so aus:</p>
<p><a href="http://blog.iteach-online.de/wp-content/uploads/2012/02/selfservice_browser.gif"><img class="wp-image-938 alignnone" title="selfservice_browser" src="http://blog.iteach-online.de/wp-content/uploads/2012/02/selfservice_browser.gif" alt="" width="598" height="287" /></a></p>
<p><a title="Self Service Formular für das Active Directory Teil 1" href="http://blog.iteach-online.de/index.php/2012/02/self-service-formular-fur-das-active-directory-teil-1/">Self Service Formular für das Active Directory Teil 1</a></p>
<p><a title="Self Service Formular für das Active Directory Teil 2" href="http://blog.iteach-online.de/index.php/2012/02/self-service-formular-fur-das-active-directory-teil-2/">Self Service Formular für das Active Directory Teil 2</a></p>
<p><a title="Self Service Formular für das Active Directory Teil 3" href="http://blog.iteach-online.de/index.php/2012/02/self-service-formular-fur-das-active-directory-teil-3/">Self Service Formular für das Active Directory Teil 3</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iteach-online.de/index.php/2012/02/self-service-formular-fur-das-active-directory-teil-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Self Service Formular für das Active Directory Teil 3</title>
		<link>http://blog.iteach-online.de/index.php/2012/02/self-service-formular-fur-das-active-directory-teil-3/</link>
		<comments>http://blog.iteach-online.de/index.php/2012/02/self-service-formular-fur-das-active-directory-teil-3/#comments</comments>
		<pubDate>Tue, 21 Feb 2012 09:29:42 +0000</pubDate>
		<dc:creator>Frank Röder</dc:creator>
				<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[Skripting / Programmierung]]></category>
		<category><![CDATA[AD Datenbank]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[DirectoryEntry]]></category>
		<category><![CDATA[DirectorySearcher]]></category>
		<category><![CDATA[thumbnailphoto]]></category>
		<category><![CDATA[Windows Server 2008 / 2008 R2]]></category>

		<guid isPermaLink="false">http://blog.iteach-online.de/?p=832</guid>
		<description><![CDATA[Bis jetzt ist das kleine Projekt ohne größere Herausforderungen über die Bühne gegangen. Jetzt, wo wir zu dem Bild kommen, wird es etwas kniffliger. Als Erstes werden wir uns einmal die Attributdefinition im Active Directory anschauen: &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; Das Bild wird also als Binärwert im Active Directory gespeichert [...]]]></description>
			<content:encoded><![CDATA[<p>Bis jetzt ist das kleine Projekt ohne größere Herausforderungen über die Bühne gegangen. Jetzt, wo wir zu dem Bild kommen, wird es etwas kniffliger. Als Erstes werden wir uns einmal die Attributdefinition im Active Directory anschauen:</p>
<div class="mceTemp"><a href="http://blog.iteach-online.de/wp-content/uploads/2012/02/schema_thumbnail.gif"><img class="alignleft  wp-image-833" title="schema_thumbnail" src="http://blog.iteach-online.de/wp-content/uploads/2012/02/schema_thumbnail.gif" alt="" width="244" height="259" /></a></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="mceTemp">Das Bild wird also als Binärwert im Active Directory gespeichert und die Größe des Bildes ist auf 100KB begrenzt. Bevor wir den Quellcode erstellen können, müssen wir die Seite aus Teil 2 mit weiteren Steuerelementen versorgen. Wir benötigen jetzt zusätzlich ein Image-Steuerelement und auch ein FileUpload-Steuerelement, damit die Benutzer ihre Bilder auch hochladen können. Nachdem die Steuerelemente platziert wurden, sieht das Fomular so aus:</div>
<div class="mceTemp"></div>
<div class="mceTemp"><a href="http://blog.iteach-online.de/wp-content/uploads/2012/02/thumbnailfoto_selfservice.gif"><img class="wp-image-834 alignnone" title="thumbnailfoto_selfservice" src="http://blog.iteach-online.de/wp-content/uploads/2012/02/thumbnailfoto_selfservice.gif" alt="" width="389" height="180" /></a></div>
<p>&nbsp;</p>
<p>Wenn das Benutzerkonto über kein Bild verfügt, dann soll ein Dummy-Bild zur Anzeige kommen. Ich habe dafür ein einfaches Bild (dummy.jpg) gezeichnet. Das wird dem Image-Steuerelement zugewiesen, wenn in dem Attribut &#8220;thumbnailphoto&#8221; kein Wert vorhanden ist. Um das Image-Steuerelement mit einem Bild zu befüllen, greifen wir auf eine separate Seite zu, die für einen entsprechenden Benutzernamen das Bild aus dem Active Directory ausliest. Wenn kein Bild vorhanden ist, gibt die Seite das Dummy-Bild zurück. Sourcecode der &#8220;getPictureFromAD.aspx&#8221;</p>
<p>&nbsp;</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Collections.Generic</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Web</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Web.UI</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Web.UI.WebControls</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.DirectoryServices</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">namespace</span> ITeach_ADSelfService
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">partial</span> <span style="color: #6666cc; font-weight: bold;">class</span> getPictureFromAD <span style="color: #008000;">:</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Web</span><span style="color: #008000;">.</span><span style="color: #0000FF;">UI</span></span><span style="color: #008000;">.</span><span style="color: #0000FF;">Page</span>
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">readonly</span> <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> arrProperties <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> <span style="color: #008000;">&#123;</span> <span style="color: #666666;">&quot;department&quot;</span>, <span style="color: #666666;">&quot;sn&quot;</span>, <span style="color: #666666;">&quot;title&quot;</span>,<span style="color: #666666;">&quot;thumbNailPhoto&quot;</span> <span style="color: #008000;">&#125;</span><span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">protected</span> <span style="color: #6666cc; font-weight: bold;">void</span> Page_Load<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> sender, EventArgs e<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #008080; font-style: italic;">//Auslesen des samAccountName und BaseDN fuer die Suche im AD</span>
            <span style="color: #6666cc; font-weight: bold;">String</span> strSamAccount <span style="color: #008000;">=</span> Request<span style="color: #008000;">.</span><span style="color: #0000FF;">QueryString</span><span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;samAccountName&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span>
            <span style="color: #6666cc; font-weight: bold;">String</span> strDN <span style="color: #008000;">=</span> Request<span style="color: #008000;">.</span><span style="color: #0000FF;">QueryString</span><span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;strLDAP&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span>
            Response<span style="color: #008000;">.</span><span style="color: #0000FF;">ContentType</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;image/jpeg&quot;</span><span style="color: #008000;">;</span>
            Response<span style="color: #008000;">.</span><span style="color: #0000FF;">Clear</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>strDN <span style="color: #008000;">==</span> <span style="color: #0600FF; font-weight: bold;">null</span> <span style="color: #008000;">|</span> strSamAccount <span style="color: #008000;">==</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                Response<span style="color: #008000;">.</span><span style="color: #0000FF;">Redirect</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;dummy.jpg&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
            DirectoryEntry adDomain <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> DirectoryEntry<span style="color: #008000;">&#40;</span>strDN<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #6666cc; font-weight: bold;">string</span> strSearchfilter <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;(SamAccountName=&quot;</span> <span style="color: #008000;">+</span> strSamAccount <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;)&quot;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">System.<span style="color: #0000FF;">DirectoryServices</span></span><span style="color: #008000;">.</span><span style="color: #0000FF;">DirectorySearcher</span> search <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #000000;">System.<span style="color: #0000FF;">DirectoryServices</span></span><span style="color: #008000;">.</span><span style="color: #0000FF;">DirectorySearcher</span><span style="color: #008000;">&#40;</span>adDomain, strSearchfilter, arrProperties<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            DirectoryEntry user <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">;</span>
            user <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> DirectoryEntry<span style="color: #008000;">&#40;</span>search<span style="color: #008000;">.</span><span style="color: #0000FF;">FindOne</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Path</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF; font-weight: bold;">try</span> <span style="color: #008000;">&#123;</span>
                <span style="color: #6666cc; font-weight: bold;">byte</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> binaryPicture <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">byte</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>user<span style="color: #008000;">.</span><span style="color: #0000FF;">Properties</span><span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;thumbNailPhoto&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #FF0000;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span>
                Response<span style="color: #008000;">.</span><span style="color: #0000FF;">BinaryWrite</span><span style="color: #008000;">&#40;</span>binaryPicture<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
            <span style="color: #0600FF; font-weight: bold;">catch</span> <span style="color: #008000;">&#123;</span>
                Response<span style="color: #008000;">.</span><span style="color: #0000FF;">Redirect</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;dummy.jpg&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>Jetzt müssen wir dem Benutzer nur noch die Möglichkeit geben, sein eigenes Bild auch zu verändern. Dafür müssen wir nur in der Funktion &#8220;SetADData&#8221; folgenden Code einfügen:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>thumbUpload<span style="color: #008000;">.</span><span style="color: #0000FF;">FileName</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF; font-weight: bold;">null</span> <span style="color: #008000;">&amp;&amp;</span> thumbUpload<span style="color: #008000;">.</span><span style="color: #0000FF;">PostedFile</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ContentLength</span> <span style="color: #008000;">&lt;=</span> <span style="color: #FF0000;">102400</span><span style="color: #008000;">&#41;</span>
             <span style="color: #008000;">&#123;</span>
                 <span style="color: #6666cc; font-weight: bold;">byte</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> imageBytes <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #6666cc; font-weight: bold;">byte</span><span style="color: #008000;">&#91;</span>thumbUpload<span style="color: #008000;">.</span><span style="color: #0000FF;">PostedFile</span><span style="color: #008000;">.</span><span style="color: #0000FF;">InputStream</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Length</span> <span style="color: #008000;">+</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span>
                 thumbUpload<span style="color: #008000;">.</span><span style="color: #0000FF;">PostedFile</span><span style="color: #008000;">.</span><span style="color: #0000FF;">InputStream</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Read</span><span style="color: #008000;">&#40;</span>imageBytes, <span style="color: #FF0000;">0</span>, imageBytes<span style="color: #008000;">.</span><span style="color: #0000FF;">Length</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                 <span style="color: #008080; font-style: italic;">//Bevor das Attribut neu befuellt wird, muss es geleert werden.</span>
                 user<span style="color: #008000;">.</span><span style="color: #0000FF;">Properties</span><span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;thumbnailphoto&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Clear</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                 user<span style="color: #008000;">.</span><span style="color: #0000FF;">Properties</span><span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;thumbnailphoto&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span>imageBytes<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
             <span style="color: #008000;">&#125;</span></pre></div></div>

<p>In diesem if Statement wird einfach geprüft, ob das Fileupload-Steuerelement einen Dateinamen enthält und die Dateigröße nicht größer als 100KB ist (Beschränkung des Attributs &#8220;thumbNailPhoto&#8221; im Active Directory). Wenn diese Bedingungen erfüllt sind, wird das Attribut &#8220;thumbNailPhoto&#8221; des Benutzers entsprechend mit dem neuen Bild befüllt. Der Quellcode der &#8220;default.aspx&#8221; sieht dann so aus:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Collections.Generic</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Web</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Web.UI</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Web.UI.WebControls</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.DirectoryServices</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">namespace</span> ITeach_ADSelfService
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">partial</span> <span style="color: #6666cc; font-weight: bold;">class</span> _Default <span style="color: #008000;">:</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Web</span><span style="color: #008000;">.</span><span style="color: #0000FF;">UI</span></span><span style="color: #008000;">.</span><span style="color: #0000FF;">Page</span>
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">const</span> <span style="color: #6666cc; font-weight: bold;">string</span> LDAP <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;LDAP://dc=spielwiese,dc=intern&quot;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">//Anzupassen!</span>
        <span style="color: #0600FF; font-weight: bold;">static</span> DirectoryEntry ADUser<span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">readonly</span> <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> arrProperties <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> <span style="color: #008000;">&#123;</span> <span style="color: #666666;">&quot;department&quot;</span>,<span style="color: #666666;">&quot;sn&quot;</span>, <span style="color: #666666;">&quot;title&quot;</span><span style="color: #008000;">&#125;</span><span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">protected</span> <span style="color: #6666cc; font-weight: bold;">void</span> Page_Load<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> sender, EventArgs e<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #008080; font-style: italic;">//Caching totlegen</span>
            Response<span style="color: #008000;">.</span><span style="color: #0000FF;">ExpiresAbsolute</span> <span style="color: #008000;">=</span> DateTime<span style="color: #008000;">.</span><span style="color: #0000FF;">Now</span><span style="color: #008000;">.</span><span style="color: #0000FF;">AddDays</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">-</span>1d<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            Response<span style="color: #008000;">.</span><span style="color: #0000FF;">Expires</span> <span style="color: #008000;">=</span> <span style="color: #008000;">-</span><span style="color: #FF0000;">1500</span><span style="color: #008000;">;</span>
            Response<span style="color: #008000;">.</span><span style="color: #0000FF;">CacheControl</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;no-cache&quot;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>Page<span style="color: #008000;">.</span><span style="color: #0000FF;">IsPostBack</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                GetADData<span style="color: #008000;">&#40;</span>ADUser<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
            <span style="color: #0600FF; font-weight: bold;">else</span>
            <span style="color: #008000;">&#123;</span>
                <span style="color: #6666cc; font-weight: bold;">string</span> strUserName <span style="color: #008000;">=</span> GetCurrentWindowsUserLogin<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                ADUser <span style="color: #008000;">=</span> GetUser<span style="color: #008000;">&#40;</span>strUserName<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                GetADData<span style="color: #008000;">&#40;</span>ADUser<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #008080; font-style: italic;">//Thumbnailimage fuer den entsprechenden Benutzer holen</span>
                thumbNailImage<span style="color: #008000;">.</span><span style="color: #0000FF;">ImageUrl</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;getPictureFromAD.aspx?samAccountName=&quot;</span> <span style="color: #008000;">+</span> strUserName <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;&amp;strLDAP=&quot;</span> <span style="color: #008000;">+</span> LDAP<span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">string</span> GetCurrentWindowsUserLogin<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008080; font-style: italic;">//Diese Funktion ermittelt fuer uns den aktuellen Benutzernamen damit wir die Suche durchfuehren können</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #6666cc; font-weight: bold;">string</span> strSamAccountName <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">;</span>
            <span style="color: #6666cc; font-weight: bold;">string</span> login <span style="color: #008000;">=</span> Page<span style="color: #008000;">.</span><span style="color: #0000FF;">User</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Identity</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Name</span><span style="color: #008000;">;</span>
            <span style="color: #6666cc; font-weight: bold;">int</span> intLogin <span style="color: #008000;">=</span> login<span style="color: #008000;">.</span><span style="color: #0000FF;">IndexOf</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">@&quot;\&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>intLogin <span style="color: #008000;">&gt;</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
              strSamAccountName <span style="color: #008000;">=</span> login<span style="color: #008000;">.</span><span style="color: #0000FF;">Remove</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">0</span>, intLogin <span style="color: #008000;">+</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
            <span style="color: #0600FF; font-weight: bold;">return</span> strSamAccountName<span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> DirectoryEntry GetUser<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> loginName<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #6666cc; font-weight: bold;">string</span> strSearchfilter <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;(SamAccountName=&quot;</span> <span style="color: #008000;">+</span> loginName <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;)&quot;</span><span style="color: #008000;">;</span>
&nbsp;
            DirectoryEntry entry <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> DirectoryEntry<span style="color: #008000;">&#40;</span>LDAP<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #000000;">System.<span style="color: #0000FF;">DirectoryServices</span></span><span style="color: #008000;">.</span><span style="color: #0000FF;">DirectorySearcher</span> search <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #000000;">System.<span style="color: #0000FF;">DirectoryServices</span></span><span style="color: #008000;">.</span><span style="color: #0000FF;">DirectorySearcher</span><span style="color: #008000;">&#40;</span>entry, strSearchfilter, arrProperties<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            DirectoryEntry user <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">;</span>
            user <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> DirectoryEntry<span style="color: #008000;">&#40;</span>search<span style="color: #008000;">.</span><span style="color: #0000FF;">FindOne</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Path</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF; font-weight: bold;">return</span> user<span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
         <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> GetADData<span style="color: #008000;">&#40;</span>DirectoryEntry user<span style="color: #008000;">&#41;</span>
         <span style="color: #008000;">&#123;</span>
              <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>user<span style="color: #008000;">.</span><span style="color: #0000FF;">Properties</span><span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;sn&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Value</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span>
              <span style="color: #008000;">&#123;</span>
                  txtSurname<span style="color: #008000;">.</span><span style="color: #0000FF;">Text</span> <span style="color: #008000;">=</span> user<span style="color: #008000;">.</span><span style="color: #0000FF;">Properties</span><span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;sn&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Value</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
              <span style="color: #008000;">&#125;</span>
              <span style="color: #0600FF; font-weight: bold;">else</span>
              <span style="color: #008000;">&#123;</span>
                  txtSurname<span style="color: #008000;">.</span><span style="color: #0000FF;">Text</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">;</span>
              <span style="color: #008000;">&#125;</span>
              <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>user<span style="color: #008000;">.</span><span style="color: #0000FF;">Properties</span><span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;department&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Value</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span>
              <span style="color: #008000;">&#123;</span>
                  txtDepartment<span style="color: #008000;">.</span><span style="color: #0000FF;">Text</span> <span style="color: #008000;">=</span> user<span style="color: #008000;">.</span><span style="color: #0000FF;">Properties</span><span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;department&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Value</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>    
              <span style="color: #008000;">&#125;</span>
              <span style="color: #0600FF; font-weight: bold;">else</span>
              <span style="color: #008000;">&#123;</span>
                  txtDepartment<span style="color: #008000;">.</span><span style="color: #0000FF;">Text</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">;</span>
              <span style="color: #008000;">&#125;</span>
              <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>user<span style="color: #008000;">.</span><span style="color: #0000FF;">Properties</span><span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;title&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Value</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span>
              <span style="color: #008000;">&#123;</span>
                  txtPosition<span style="color: #008000;">.</span><span style="color: #0000FF;">Text</span> <span style="color: #008000;">=</span> user<span style="color: #008000;">.</span><span style="color: #0000FF;">Properties</span><span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;title&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Value</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
              <span style="color: #008000;">&#125;</span>
              <span style="color: #0600FF; font-weight: bold;">else</span>
              <span style="color: #008000;">&#123;</span>
                  txtPosition<span style="color: #008000;">.</span><span style="color: #0000FF;">Text</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">;</span>
              <span style="color: #008000;">&#125;</span>
&nbsp;
         <span style="color: #008000;">&#125;</span>
         <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> SetADData<span style="color: #008000;">&#40;</span>DirectoryEntry user<span style="color: #008000;">&#41;</span>
         <span style="color: #008000;">&#123;</span>
             <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>txtSurname<span style="color: #008000;">.</span><span style="color: #0000FF;">Text</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span>
             <span style="color: #008000;">&#123;</span>
                 user<span style="color: #008000;">.</span><span style="color: #0000FF;">Properties</span><span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;sn&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Value</span> <span style="color: #008000;">=</span> txtSurname<span style="color: #008000;">.</span><span style="color: #0000FF;">Text</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
             <span style="color: #008000;">&#125;</span>
             <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>txtPosition<span style="color: #008000;">.</span><span style="color: #0000FF;">Text</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span>
             <span style="color: #008000;">&#123;</span>
                 user<span style="color: #008000;">.</span><span style="color: #0000FF;">Properties</span><span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;title&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Value</span> <span style="color: #008000;">=</span> txtPosition<span style="color: #008000;">.</span><span style="color: #0000FF;">Text</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
             <span style="color: #008000;">&#125;</span>
             <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>txtDepartment<span style="color: #008000;">.</span><span style="color: #0000FF;">Text</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span>
             <span style="color: #008000;">&#123;</span>
                 user<span style="color: #008000;">.</span><span style="color: #0000FF;">Properties</span><span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;department&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Value</span> <span style="color: #008000;">=</span> txtDepartment<span style="color: #008000;">.</span><span style="color: #0000FF;">Text</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
             <span style="color: #008000;">&#125;</span>
             <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>thumbUpload<span style="color: #008000;">.</span><span style="color: #0000FF;">FileName</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF; font-weight: bold;">null</span> <span style="color: #008000;">&amp;&amp;</span> thumbUpload<span style="color: #008000;">.</span><span style="color: #0000FF;">PostedFile</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ContentLength</span> <span style="color: #008000;">&lt;=</span> <span style="color: #FF0000;">102400</span><span style="color: #008000;">&#41;</span>
             <span style="color: #008000;">&#123;</span>
                 <span style="color: #6666cc; font-weight: bold;">byte</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> imageBytes <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #6666cc; font-weight: bold;">byte</span><span style="color: #008000;">&#91;</span>thumbUpload<span style="color: #008000;">.</span><span style="color: #0000FF;">PostedFile</span><span style="color: #008000;">.</span><span style="color: #0000FF;">InputStream</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Length</span> <span style="color: #008000;">+</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span>
                 thumbUpload<span style="color: #008000;">.</span><span style="color: #0000FF;">PostedFile</span><span style="color: #008000;">.</span><span style="color: #0000FF;">InputStream</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Read</span><span style="color: #008000;">&#40;</span>imageBytes, <span style="color: #FF0000;">0</span>, imageBytes<span style="color: #008000;">.</span><span style="color: #0000FF;">Length</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                 <span style="color: #008080; font-style: italic;">//Bevor das Attribut neu befuellt wird, muss es geleert werden.</span>
                 user<span style="color: #008000;">.</span><span style="color: #0000FF;">Properties</span><span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;thumbnailphoto&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Clear</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                 user<span style="color: #008000;">.</span><span style="color: #0000FF;">Properties</span><span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;thumbnailphoto&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span>imageBytes<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
             <span style="color: #008000;">&#125;</span>  
             user<span style="color: #008000;">.</span><span style="color: #0000FF;">CommitChanges</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
         <span style="color: #008000;">&#125;</span>
&nbsp;
         <span style="color: #0600FF; font-weight: bold;">protected</span> <span style="color: #6666cc; font-weight: bold;">void</span> Button1_Click<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> sender, EventArgs e<span style="color: #008000;">&#41;</span>
         <span style="color: #008000;">&#123;</span>
             SetADData<span style="color: #008000;">&#40;</span>ADUser<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
         <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>Nachdem das alles erledigt ist, kann man schon einen vorsichtigen Test im Visual Studio wagen.</p>
<p>Der dritte Teil, inklusive dem Dummy-Bild, kann hier heruntergeladen werden (<a class="downloadlink" href="http://blog.iteach-online.de/wp-content/plugins/download-monitor/download.php?id=7" title=" downloaded 24 times" >ITeach-ADSelfService-Teil3 (24)</a>).</p>
<p><a title="Self Service Formular für das Active Directory Teil 1" href="http://blog.iteach-online.de/index.php/2012/02/self-service-formular-fur-das-active-directory-teil-1/">Self Service Formular für das Active Directory Teil 1</a></p>
<p><a title="Self Service Formular für das Active Directory Teil 2" href="http://blog.iteach-online.de/index.php/2012/02/self-service-formular-fur-das-active-directory-teil-2/">Self Service Formular für das Active Directory Teil 2</a></p>
<p><a title="Self Service Formular für das Active Directory Teil 4" href="http://blog.iteach-online.de/index.php/2012/02/self-service-formular-fur-das-active-directory-teil-4/">Self Service Formular für das Active Directory Teil 4</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iteach-online.de/index.php/2012/02/self-service-formular-fur-das-active-directory-teil-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

