<?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>codingstube &#187; Dev</title>
	<atom:link href="http://codingstube.de/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://codingstube.de</link>
	<description>Ein weiterer WordPress-Blog</description>
	<lastBuildDate>Sat, 17 Dec 2011 13:23:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Catch The Veggies (iPhone + iPad App)</title>
		<link>http://codingstube.de/2011/12/catch-the-veggies-iphone-ipad-app/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=catch-the-veggies-iphone-ipad-app</link>
		<comments>http://codingstube.de/2011/12/catch-the-veggies-iphone-ipad-app/#comments</comments>
		<pubDate>Sat, 17 Dec 2011 13:23:09 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Spiele]]></category>

		<guid isPermaLink="false">http://codingstube.de/?p=937</guid>
		<description><![CDATA[Catch The Veggies (Universal App (iPhone+iPad)) Catch The Veggies &#8212;&#8212;&#8212;&#8212;&#8212;&#8212; Hilf dem kleinen Hund das ganze Gemüse zu fangen und einzusortieren. Durch die Bewegungen deines iPhones/iPods/iPads lenkst du den kleinen Hund in die richtige Richtung und sobald ein Gemüse gefangen wurde, schmeiss es in die richtige Box, in dem du mit einem Finger auf den [...]]]></description>
			<content:encoded><![CDATA[<p>Catch The Veggies (Universal App (iPhone+iPad))</p>
<p>Catch The Veggies </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; </p>
<p>Hilf dem kleinen Hund das ganze Gemüse zu fangen und einzusortieren.<br />
Durch die Bewegungen deines iPhones/iPods/iPads lenkst du den kleinen Hund in die richtige Richtung und sobald ein Gemüse gefangen wurde, schmeiss es in die richtige Box, in dem du mit einem Finger auf den Bildschirm tippst. </p>
<p>Durch jedes richtig einsortierte Gemüse wirst du erfolgreich belohnt.</p>
<p><a href="http://codingstube.de/wp-content/uploads/2011/12/screen-capture.png"><img src="http://codingstube.de/wp-content/uploads/2011/12/screen-capture-300x159.png" alt="" title="screen-capture" width="300" height="159" class="aligncenter size-medium wp-image-938" /></a></p>
<p>iTunes Link:</p>
<p>http://itunes.apple.com/de/app/catch-the-veggies/id488677930?mt=8</p>
]]></content:encoded>
			<wfw:commentRss>http://codingstube.de/2011/12/catch-the-veggies-iphone-ipad-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Ankündigung]Game Center für deHangman2</title>
		<link>http://codingstube.de/2010/11/ankundigunggame-center-fur-dehangman2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ankundigunggame-center-fur-dehangman2</link>
		<comments>http://codingstube.de/2010/11/ankundigunggame-center-fur-dehangman2/#comments</comments>
		<pubDate>Tue, 09 Nov 2010 15:34:18 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Spiele]]></category>

		<guid isPermaLink="false">http://codingstube.de/?p=853</guid>
		<description><![CDATA[Das Game Center erfreut sich immer größerer Beliebtheit und deswegen habe ich mich auch entschlossen, diese Unterstützung in deHangman2 zu integrieren. Die ersten Funktionen werden sich auf die Leaderboards und Achievements beschränken. Die Standardfunktionen Friends und Authentication werden automatisch mit dem Game Center integriert. Noch ist keine Zeile Code geschrieben, aber mit der gute Dokumentation [...]]]></description>
			<content:encoded><![CDATA[<p><a class="thickbox" href="http://codingstube.de/wp-content/uploads/2010/11/Unbenannt-1.png"><img src="http://codingstube.de/wp-content/uploads/2010/11/Unbenannt-1-small.png" alt="" /></a></p>
<p>Das Game Center erfreut sich immer größerer Beliebtheit und deswegen habe ich mich auch entschlossen, diese Unterstützung in deHangman2 zu integrieren.</p>
<p>Die ersten Funktionen werden sich auf die <strong>Leaderboards</strong> und <strong>Achievements</strong> beschränken. Die Standardfunktionen <strong>Friends</strong> und <strong>Authentication</strong> werden automatisch mit dem Game Center integriert.</p>
<p>Noch ist keine Zeile Code geschrieben, aber mit der gute Dokumentation von Apple: <a href="http://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/GameKit_Guide/GameKit_Guide.pdf">Game Center Implementierung</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://codingstube.de/2010/11/ankundigunggame-center-fur-dehangman2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>deHangman 2 im Appstore erschienen</title>
		<link>http://codingstube.de/2010/11/dehangman-2-im-appstore-erschienen/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dehangman-2-im-appstore-erschienen</link>
		<comments>http://codingstube.de/2010/11/dehangman-2-im-appstore-erschienen/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 07:02:02 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://codingstube.de/?p=845</guid>
		<description><![CDATA[Nach einem langen hin und her mit dem Review-Team von Apple, kann ich euch heute mitteilen, dass deHangman2 es endlich in den Appstore geschafft hat. deHangman2: Status: Im Appstore verfügbar. deHangman2 basiert auf den bekannten Hangmanspiel! Ziel des Spieles ist es, die Begriffe zu erraten ohne dabei erhängt zu werden. Man sollte deswegen seine Buchstaben [...]]]></description>
			<content:encoded><![CDATA[<p>Nach einem langen hin und her mit dem Review-Team von Apple, kann ich euch heute mitteilen, dass deHangman2 es endlich in den Appstore geschafft hat.</p>
<p>deHangman2:<br /><a href="http://itunes.apple.com/de/app/de-hangman-2-deutsch/id388880291?mt=8"><img src="http://codingstube.de/wp-content/uploads/2010/11/iTunes-dehangman2.png" alt="" title="iTunes-dehangman2" width="199" height="229" class="alignleft size-full wp-image-847" /></a><br />
<strong>Status:</strong> Im Appstore verfügbar.</p>
<p>deHangman2 basiert auf den bekannten Hangmanspiel!<br />
<a href="http://codingstube.de/wp-content/uploads/2010/08/IMG_0247.png"><img src="http://codingstube.de/wp-content/uploads/2010/08/IMG_0247.png" alt="" title="Spiel" class="alignleft size-full wp-image-810" /></a><br />
Ziel des Spieles ist es, die Begriffe zu erraten ohne dabei erhängt zu werden. Man sollte deswegen seine Buchstaben nicht sinnlos wählen, sondern etwas nachdenken und rätseln.<br />
Das Spiel enthält knapp 1000 Wörter und wird mit Updates erweitert. </p>
<p>Neue Features in deHangman2:<br />
Änderungen zum Vorgänger:</p>
<ul>
- komplette Grafiken und Code überarbeitet<br />
 &#8211; 2 Spieler Modus vorhanden<br />
 &#8211; längere Wörter sind nun möglich<br />
 &#8211; dynamische Hintergründe<br />
 &#8211; Highscore kann an Twitter gesendet werden<br />
 &#8211; komplett neue Soundkulisse<br />
 &#8211; und noch einiges mehr&#8230;</ul>
<p><strong>Screenshots:</strong></p>
<p><a href="http://codingstube.de/wp-content/uploads/2010/08/IMG_0250.png"><img src="http://codingstube.de/wp-content/uploads/2010/08/IMG_0250.png" alt="" title="IMG_0250" class="alignnone size-full wp-image-812" /></a><a href="http://codingstube.de/wp-content/uploads/2010/08/IMG_0246.png"><img src="http://codingstube.de/wp-content/uploads/2010/08/IMG_0246.png" alt="" title="IMG_0246" class="alignnone size-full wp-image-809" /></a><a href="http://codingstube.de/wp-content/uploads/2010/08/IMG_0255.png"><img src="http://codingstube.de/wp-content/uploads/2010/08/IMG_0255.png" alt="" title="IMG_0255" class="alignnone size-full wp-image-811" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://codingstube.de/2010/11/dehangman-2-im-appstore-erschienen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[UPDATE]deHangman aus dem Appstore entfernt &#8211; deHangman2 bei Apple eingereicht</title>
		<link>http://codingstube.de/2010/10/dehangman-aus-dem-appstore-entfernt-dehangman2-bei-apple-eingereicht/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dehangman-aus-dem-appstore-entfernt-dehangman2-bei-apple-eingereicht</link>
		<comments>http://codingstube.de/2010/10/dehangman-aus-dem-appstore-entfernt-dehangman2-bei-apple-eingereicht/#comments</comments>
		<pubDate>Thu, 21 Oct 2010 17:52:57 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://codingstube.de/?p=838</guid>
		<description><![CDATA[UPDATE: Apple hat wieder die App rejected, da man mit zwei Versionen durcheinander kommen könnte. Obwohl es nur noch eine Version gibt. deHangman ist nicht mehr verfügbar im Appstore. Die erste Version kann ich nicht mehr hinzufügen und deHangman2 wird nicht zugelassen. Super Apple. Stehe zur Zeit in Kontakt mit dem ReviewTeam, aber Hoffnung habe [...]]]></description>
			<content:encoded><![CDATA[<p><strong>UPDATE:</strong><br />
Apple hat wieder die App rejected, da man mit zwei Versionen durcheinander kommen könnte. Obwohl es nur noch eine Version gibt. deHangman ist nicht mehr verfügbar im Appstore. Die erste Version kann ich nicht mehr hinzufügen und deHangman2 wird nicht zugelassen. Super Apple. Stehe zur Zeit in Kontakt mit dem ReviewTeam, aber Hoffnung habe ich immer weniger.</p>
<p>deHangman2 wurde gestern bei Apple eingereicht und wartet auf sein Review.</p>
<p>Da nur eine Version im Appstore vorhanden sein kann, musste ich für diese Zeit deHangman aus dem Appstore entfernen.</p>
<p>Sobald deHangman2 freigegeben wird. Werde ich es hier veröffentlichen.</p>
]]></content:encoded>
			<wfw:commentRss>http://codingstube.de/2010/10/dehangman-aus-dem-appstore-entfernt-dehangman2-bei-apple-eingereicht/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Update]deHangman Update 1.8 im Review Prozess bei Apple</title>
		<link>http://codingstube.de/2010/10/dehangman-update-1-8-im-review-prozess-bei-apple/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dehangman-update-1-8-im-review-prozess-bei-apple</link>
		<comments>http://codingstube.de/2010/10/dehangman-update-1-8-im-review-prozess-bei-apple/#comments</comments>
		<pubDate>Fri, 08 Oct 2010 15:17:03 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Dev]]></category>

		<guid isPermaLink="false">http://codingstube.de/?p=834</guid>
		<description><![CDATA[So das Update ist fertig und entfernt den nervigen Fehler mit der Kategorie-Auswahl. Ausserdem wurde die Abfrage, ob die deHangman2 Information noch mal angezeigt werden soll, vereinfacht bzw. funktioniert nun auch richtig. Entschuldigt bitte nochmals das fehlerhafte Update 1.7. [Update]Update 1.8 ist nun im Appstore verfügbar![/Update]]]></description>
			<content:encoded><![CDATA[<p>So das Update ist fertig und entfernt den nervigen Fehler mit der Kategorie-Auswahl.</p>
<p>Ausserdem wurde die Abfrage, ob die deHangman2 Information noch mal angezeigt werden soll, vereinfacht bzw. funktioniert nun auch richtig.</p>
<p>Entschuldigt bitte nochmals das fehlerhafte Update 1.7.</p>
<p><strong>[Update]Update 1.8 ist nun im Appstore verfügbar![/Update]</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://codingstube.de/2010/10/dehangman-update-1-8-im-review-prozess-bei-apple/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>deHangman fehlerhaftes Update</title>
		<link>http://codingstube.de/2010/10/dehangman-fehlerhaftes-update/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dehangman-fehlerhaftes-update</link>
		<comments>http://codingstube.de/2010/10/dehangman-fehlerhaftes-update/#comments</comments>
		<pubDate>Thu, 07 Oct 2010 16:23:39 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[Intern]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://codingstube.de/?p=831</guid>
		<description><![CDATA[Hallo zusammen, bin heute erst nach ca. 1 Monat aus dem Urlaub zurück gekommen. In der Zeit war ich leider sehr schlecht technisch angebunden. Leider hat das letzte Update diesen Fehler mitgebracht, dass man eine bestimme Kategorie nicht mehr auswählen kann. Da ich mir schon denken kann wo das Problem liegt, werde ich den Fehler [...]]]></description>
			<content:encoded><![CDATA[<p>Hallo zusammen,</p>
<p>bin heute erst nach ca. 1 Monat aus dem Urlaub zurück gekommen. In der Zeit war ich leider sehr schlecht technisch angebunden.<br />
Leider hat das letzte Update diesen Fehler mitgebracht, dass man eine bestimme Kategorie nicht mehr auswählen kann.</p>
<p>Da ich mir schon denken kann wo das Problem liegt, werde ich den Fehler so schnell wie möglich beheben. Denke aber, dass das Update ca. 1 Woche im Apple Prozess braucht.</p>
<p>Als Entschädigung kann ich jedem einen Rabattcode (limitiert auf 50 mehr Codes gibt es leider für eine App nicht) für das nächste deHangman2 anbieten, womit Ihr dieses gratis beziehen könnt.<br />
Schreibt mir nach der Erscheinung von deHangman2 einfach eine E-Mail an hangman(at)codingstube.de mit dem Betreff &#8220;Update-Promo&#8221;.</p>
<p>Ich gehe davon aus, dass deHangman2 Ende Oktober im Appstore erscheint. Natürlich werde ich es auch im Blog bekannt geben.</p>
<p>Ich entschuldige mich noch einmal für den Fehler und bitte um Verständnis.</p>
<p>Mit freundlichen Grüßen<br />
MS</p>
]]></content:encoded>
			<wfw:commentRss>http://codingstube.de/2010/10/dehangman-fehlerhaftes-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Benuteranlage GUI via Powershell</title>
		<link>http://codingstube.de/2010/08/benuteranlage-gui-via-powershell/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=benuteranlage-gui-via-powershell</link>
		<comments>http://codingstube.de/2010/08/benuteranlage-gui-via-powershell/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 10:28:29 +0000</pubDate>
		<dc:creator>MS</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://codingstube.de/?p=796</guid>
		<description><![CDATA[CreateUserGUI_V1.ps1: Einer der anstregendsten Aufgaben, die Administratoren durchführen, ist das Anlegen neuer Benutzer. Wenn wir 50 bis 100 Nutzer anlegen müssen, wird man uns bei einer Reihe von sehr starren Mausklicks beobachten können. In diesem Fall sollte muss ein Powershell-Skript mit Hilfe einer csv-Datei zum Einsatz kommen. Die o.a. GUI ist eher für die Benutzeranlage [...]]]></description>
			<content:encoded><![CDATA[<p><strong>CreateUserGUI_V1.ps1:</strong></p>
<p><a href="http://codingstube.de/wp-content/uploads/2010/08/CreateUserGUIV1.png"><img src="http://codingstube.de/wp-content/uploads/2010/08/CreateUserGUIV1.png" alt="" title="CreateUserGUIV1" class="alignnone size-full wp-image-797" /></a></p>
<p>Einer der anstregendsten Aufgaben, die Administratoren durchführen, ist das Anlegen neuer Benutzer. Wenn wir 50 bis 100 Nutzer anlegen müssen, wird man uns bei einer Reihe von sehr starren Mausklicks beobachten können. In diesem Fall sollte muss ein Powershell-Skript mit Hilfe einer csv-Datei zum Einsatz kommen. </p>
<p>Die o.a. GUI ist eher für die Benutzeranlage für einige wenige Benutzer während des Betriebs gedacht. Diese ist auf unseren Betrieb angepasst und erstellt zusätzlich auf einem Fileserver ein Benutzerordner, wo nur der angelegte Benutzer Schreibrechte hat + Administratoren.</p>
<p>Das Skript ist einfach aufgebaut. Man trägt die Daten für den Benutzer ein, wählt die OU und die Gruppen aus, wo der oder die Benutzer Mitglied werden soll.</p>
<pre lang="powershell">[System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") 

[system.windows.forms.messagebox]::Show("Only run in Quest Powershell!")

Function createmailbox{
	#Pfad zum Laufwerk, welches ggf. für den Benutzer angelegt werden soll
	$path = "\Server-IP-Addressdatenaustausch"

	#Richtige Domäne eintregen
	$objUser = [ADSI]“LDAP://localhost:389/dc=domain,dc=com”

	$OU = $OUhash1[$ouOuNameDrop.SelectedItem.ToString()]
	$OU = $OU.substring($OU.lastindexof("/")+1)
	$TSOU=[ADSI]“LDAP://localhost:389/ou=$OU,OU=Companies,dc=domain,dc=com”

	if($TSOU.true){

	foreach($row in $dgDataGrid.rows){
		if ($row.Cells[0].Value -ne $null){

			$CN=$row.Cells[1].Value + " " + $row.Cells[0].Value								

			$SN=$row.Cells[1].Value									

			$title="#"

			$description=$row.Cells[3].Value

			$department="#"

			$streetAddress=$row.Cells[5].Value

			$postalcode=$row.Cells[4].Value

			$telephoneNumber=$row.Cells[6].Value

			$givenName=$row.Cells[0].Value	

			$company=$row.Cells[7].Value	

			$mail="#"

			$userPrincipalName=$row.Cells[2].Value + "@domain.com"

			$Samaccountname=$row.Cells[2].Value

			$group1Name=$UD.Gruppe1inOU

			$group2Name=$UD.Gruppe2inOU

			$group3Name=$UD.Gruppe3

			$group4Name=$UD.Gruppe4

			$group5Name=$UD.Gruppe5

			$group6Name=$UD.Gruppe6

			$group7Name=$UD.Gruppe7

			$Location="Deutschland"

			$User=$TSOU.create(“user”,”cn=$cn”)

			$User.Put(“sAMAccountName”,$Samaccountname)

			$User.put(“SN”,$SN)

			$User.put(“Title”,$title)

			$User.put(“Description”,$description)

			$User.put(“department”,$department)

			$User.put(“streetAddress”,$streetAddress)

			$User.put(‘telephoneNumber’,$telephoneNumber)

			$User.put(‘givenName’,$givenName)

			$User.put(‘company’,$company)

			$User.put(‘mail’,$mail)

			$User.put(‘L’,$Location)

			$User.put(‘userPrincipalName’,$userPrincipalName)

			$User.setinfo()

			$User.psbase.Invoke(“SetPassword”,”Caliber1”)

			$User.psbase.InvokeSet(‘Accountdisabled’,$false)

			$User.psbase.CommitChanges()

			write-host "Bitte 5 Sekunden warten - Benutzer wird angelegt..." + $result
			[System.Threading.Thread]::Sleep(5000)
			[system.windows.forms.messagebox]::Show("User " + $row.Cells[0].Value + " " + $row.Cells[1].Value + " created")

			foreach ($objItem in $objListbox.SelectedItems)
   			{
				$group = $Grouphash1[$objItem]
				$groupname = $group.substring($group.lastindexof("/")+1)
				Write-Host $groupname

				Add-QADGroupMember  -Identity $groupname -Member $row.Cells[2].Value
			}

			if ($checkbox.Checked)
			{

			write-host "Datenaustauschlaufwerk anlegen..."

			if (!(Test-Path ($path + $row.Cells[2].Value))){
				new-item -path $path -name $row.Cells[2].Value -type directory
			}else {
				Write-Host $row.Cells[2].Value " folder already exists"
 			}

  			$Acl = Get-Acl ($path+ "" + $row.Cells[2].Value)
    		$Ar = New-Object system.security.accesscontrol.filesystemaccessrule($row.Cells[2].Value,"Modify","ContainerInherit,ObjectInherit","None","Allow")
    		$acl.setAccessRule($ar)
    		Set-Acl ($path + "" + $row.Cells[2].Value) $acl

			Write-Host "Datenaustauschlaufwerk wurde erfolgreich angelegt"
			}
		}
	}

	}else{Write-host “Error OU doesn’t exist to proceed further, please create one” -foregroundcolor RED}

}

$OUhash1 = @{ }
$Grouphash1 = @{ }
$MBhash1 = @{ }

$form = new-object System.Windows.Forms.form
$form.Text = "Quick User Create Form"
$form.size = new-object System.Drawing.Size(910,520) 

$msTable = New-Object System.Data.DataTable

$msTable.TableName = "GroupName"
$msTable.Columns.Add("FirstName")
$msTable.Columns.Add("LastName")
$msTable.Columns.Add("UserName")
$msTable.Columns.Add("Description")
$msTable.Columns.Add("Postal-Code")
$msTable.Columns.Add("StreetAddress")
$msTable.Columns.Add("Telephone")
$msTable.Columns.Add("Company")

# Add DataGrid View

$dgDataGrid = new-object System.windows.forms.DataGridView
$dgDataGrid.Location = new-object System.Drawing.Size(10,10)
$dgDataGrid.size = new-object System.Drawing.Size(870,200)
$dgDataGrid.AutoSizeRowsMode = "AllHeaders"
$form.Controls.Add($dgDataGrid)

$dgDataGrid.DataSource = $msTable

# Add OU Drop Down
$ouOuNameDrop = new-object System.Windows.Forms.ComboBox
$ouOuNameDrop.Location = new-object System.Drawing.Size(100,260)
$ouOuNameDrop.Size = new-object System.Drawing.Size(230,30)
$ouOuNameDrop.Items.Add("/Users")
$OUhash1.Add("/Users","Users")
$root = [ADSI]''
$searcher = new-object System.DirectoryServices.DirectorySearcher($root)
$searcher.Filter = '(objectClass=organizationalUnit)'
$searcher.PropertiesToLoad.Add("canonicalName")
$searcher.PropertiesToLoad.Add("Name")
$searcher1 = $searcher.FindAll()
foreach ($person in $searcher1){
[string]$ent = $person.Properties.canonicalname
$OUhash1.Add($ent.substring($ent.indexof("/"),$ent.length-$ent.indexof("/")),$ent)
$ouOuNameDrop.Items.Add($ent.substring($ent.indexof("/"),$ent.length-$ent.indexof("/")))
}
$form.Controls.Add($ouOuNameDrop)

$objListbox = New-Object System.Windows.Forms.Listbox
$objListbox.Location = New-Object System.Drawing.Size(435,220)
$objListbox.Size = New-Object System.Drawing.Size(445,250) 

$objListbox.SelectionMode = "MultiExtended"

$objListbox.Height = 250

$form.Controls.Add($objListbox)

# Add OU DropLable
$ouOuNamelableBox = new-object System.Windows.Forms.Label
$ouOuNamelableBox.Location = new-object System.Drawing.Size(10,260)
$ouOuNamelableBox.size = new-object System.Drawing.Size(100,20)
$ouOuNamelableBox.Text = "OU Name"
$form.Controls.Add($ouOuNamelableBox) 

# Add Group Drop Down
$searcherGroup = new-object System.DirectoryServices.DirectorySearcher($root)
$searcherGroup.Filter = '(objectClass=group)'
$searcherGroup.PropertiesToLoad.Add("canonicalName")
$searcherGroup1 = $searcherGroup.FindAll()
foreach ($person2 in $searcherGroup1){
[string]$ent = $person2.Properties.canonicalname
$Grouphash1.Add($ent.substring($ent.indexof("/"),$ent.length-$ent.indexof("/")),$ent)
$objListbox.Items.Add($ent.substring($ent.indexof("/"),$ent.length-$ent.indexof("/")))
}  

# Add Group DropLable
$snServerNamelableBox = new-object System.Windows.Forms.Label
$snServerNamelableBox.Location = new-object System.Drawing.Size(380,220)
$snServerNamelableBox.size = new-object System.Drawing.Size(100,20)
$snServerNamelableBox.Text = "Groups:"
$form.Controls.Add($snServerNamelableBox) 

# create radiobutton1
$checkbox = New-Object Windows.Forms.checkbox
$checkbox.text = "Datenaustauschlaufwerk anlegen?"
$checkbox.height = 20
$checkbox.width = 200
$checkbox.top = 300
$checkbox.left =10
$form.controls.add($checkbox)

# Add Create Button

$crButton = new-object System.Windows.Forms.Button
$crButton.Location = new-object System.Drawing.Size(10,360)
$crButton.Size = new-object System.Drawing.Size(150,23)
$crButton.Text = "Create User"
$crButton.Add_Click({CreateMailbox})
$form.Controls.Add($crButton)

$form.topmost = $true
$form.Add_Shown({$form.Activate()})
$form.ShowDialog()
</pre>
]]></content:encoded>
			<wfw:commentRss>http://codingstube.de/2010/08/benuteranlage-gui-via-powershell/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[Powershell]Dateisystemrechte analog bestehender Rechte hinzufügen</title>
		<link>http://codingstube.de/2010/04/powershelldateisystemrechte-analog-bestehender-rechte-hinzufugen/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=powershelldateisystemrechte-analog-bestehender-rechte-hinzufugen</link>
		<comments>http://codingstube.de/2010/04/powershelldateisystemrechte-analog-bestehender-rechte-hinzufugen/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 11:17:58 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://codingstube.de/2010/04/powershelldateisystemrechte-analog-bestehender-rechte-hinzufugen/</guid>
		<description><![CDATA[Man stelle sich vor: Ein Fileserver mit diversen Gruppenberechtigungen am Dateisystem soll durch neue Sicherheitsgruppen, analog der alten Gruppen, erweitert werden. Beispiel: Die Sicherheitsgruppe G_Test hat in dem Ordner Fileserver:DatenTemp Vollzugriff. Nun soll Gruppe N_Test dieselben Berechtigungen auf diesen Ordner erhalten. Und da kommt Powershell wie gerufen. Mit folgendem Skript wird abgefragt, ab welchem Ordner [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="ps" align="left" src="http://codingstube.de/wp-content/uploads/2010/04/ps-1.png" width="131" height="105" />Man stelle sich vor: Ein Fileserver mit diversen Gruppenberechtigungen am Dateisystem soll durch neue Sicherheitsgruppen, analog der alten Gruppen, erweitert werden.</p>
<p><strong>Beispiel:</strong></p>
<blockquote>
<p>Die Sicherheitsgruppe G_Test hat in dem Ordner <em>Fileserver:DatenTemp</em> Vollzugriff. Nun soll Gruppe N_Test dieselben Berechtigungen auf diesen Ordner erhalten.</p>
</blockquote>
<p>Und da kommt Powershell wie gerufen. Mit folgendem Skript wird abgefragt, ab welchem Ordner + (Unterordner) überprüft werden soll. Danach wird automatisch nach den <strong>angegebenen</strong> Gruppen gesucht und diese duch die neue Domäne ersetzt. Auch die Vererbung wird geprüft und ggf. übertragen. Es funktioniert nur, wenn die Gruppen gleich heißen, kann aber schnell abgeändert werden.</p>
<pre lang="powershell">
#ChangeACL.ps1

#The possible values for Rights are
# ListDirectory, ReadData, WriteData
# CreateFiles, CreateDirectories, AppendData
# ReadExtendedAttributes, WriteExtendedAttributes, Traverse
# ExecuteFile, DeleteSubdirectoriesAndFiles, ReadAttributes
# WriteAttributes, Write, Delete
# ReadPermissions, Read, ReadAndExecute
# Modify, ChangePermissions, TakeOwnership
# Synchronize, FullControl

$StartingDir=Read-Host "What directory do you want to start at?"

foreach ($file in $(Get-ChildItem $StartingDir -recurse | where {$_.PsIsContainer})) {
  " "
  "Objekt: " + $file.FullName

  $name = Get-Acl $file.FullName | ForEach-Object { $_.Access  } | Group-Object IdentityReference | % {$_.Name}
  $rights = Get-Acl $file.FullName | % {$_.Access} | % {$_.FileSystemRights}
  $IsInherited = Get-Acl $file.FullName | % {$_.Access} | % {$_.InheritanceFlags}

  for($i=0;$i -lt $name.count ;$i++)
  {
        "User: " + $name[$i]
        "Rights: " + $rights[$i]

        #Insert your groups which will be replaced
        if($name[$i] -eq "domain_ATest" -or $name[$i] -eq "domain_ATest2")
        {
                $name[$i] = $name[$i].Substring(13)
                $name[$i] = "domain_B"+$name[$i] #type in the new domainname
                $acl = Get-Acl $file.FullName

                $permission = $name[$i],$rights[$i],$IsInherited[$i],"None","Allow"
                $rule=new-object System.Security.AccessControl.FileSystemAccessRule $permission

                $acl.SetAccessRule($rule)
                $acl | Set-Acl $file.FullName

        }
  }

 }
</pre>
]]></content:encoded>
			<wfw:commentRss>http://codingstube.de/2010/04/powershelldateisystemrechte-analog-bestehender-rechte-hinzufugen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Exchange 2010]GUI Mailbox Übersicht</title>
		<link>http://codingstube.de/2010/04/exchange-2010gui-mailbox-ubersicht/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=exchange-2010gui-mailbox-ubersicht</link>
		<comments>http://codingstube.de/2010/04/exchange-2010gui-mailbox-ubersicht/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 09:55:08 +0000</pubDate>
		<dc:creator>MS</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://codingstube.de/?p=772</guid>
		<description><![CDATA[Vielen ist es bekannt, dass die Exchange Server Konsole nur wenig Informationen über Postfächer ausgibt, zumindest, wenn man mehrere Postfächer vergleichen möchte. Powershell kann da schon mehr Infos gleichzeitig ausgeben, wobei hier die Übersichtlichkeit leidet. Mit Hilfe des Exchange Dev Blogs von Glen Scales habe ich eine neue GUI erstellt, welche sehr viele Infos über [...]]]></description>
			<content:encoded><![CDATA[<p align="center"><a class="thickbox" href="http://codingstube.de/wp-content/uploads/2010/04/Sumby-Full-2.png"><img alt="Sumby-Full" src="http://codingstube.de/wp-content/uploads/2010/04/sumby-full-2-small.png" width="450" height="337" /></a></p>
<p>Vielen ist es bekannt, dass die Exchange Server Konsole nur wenig Informationen über Postfächer ausgibt, zumindest, wenn man mehrere Postfächer vergleichen möchte. Powershell kann da schon mehr Infos gleichzeitig ausgeben, wobei hier die Übersichtlichkeit leidet.</p>
<p>Mit Hilfe des <a href="http://gsexdev.blogspot.com/">Exchange Dev Blogs</a> von Glen Scales habe ich eine neue GUI erstellt, welche sehr viele Infos über die Mailboxen auf einem oder mehreren Exchange-Servern darstellt. Z.B.: Kann nach Postfachgröße (Anzahl der Elemente oder der Speicherbelegung) sortiert werden. Eine Auflistung der Unterordner in einem Postfach ist auch möglich.</p>
<p>Einen Auszug von Filtern zeigt der folgende Screenshot:</p>
<p align="center"><img class="thickbox" alt="sumby-filters" src="http://codingstube.de/wp-content/uploads/2010/04/sumby-filters.png" width="138" height="173" /></p>
<p>Außerdem kann zwischen <em>verbundenen</em> und <em>nicht-verbundenen</em> Postfächern geschaltet werden:</p>
<p align="center"><img class="thickbox" alt="sumby-disconnected" src="http://codingstube.de/wp-content/uploads/2010/04/sumby-disconnected.png" width="450" height="143" /></p>
<p>Das Skript muss auf einem Exchange-Server ausgeführt werden. Getestet wurde es auf einem deutschen Exchange-Server 2010. Das Skript muss daher in diesen Ordner kopiert werden: <em>C:Program FilesMicrosoftExchange ServerV14Scripts</em></p>
<p>Außerdem muss der ausführende Account Zugriffsberechtigungen auf den restlichen Postfächern besitzen.</p>
<p>Das Skript ist <a href="http://codingstube.de/downloads/sumby.zip">hier</a> zum Download verfügbar.</p>
]]></content:encoded>
			<wfw:commentRss>http://codingstube.de/2010/04/exchange-2010gui-mailbox-ubersicht/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>{How-To}Out of Office über Exchange Server einstellen (Powershell)</title>
		<link>http://codingstube.de/2010/02/how-toout-of-office-uber-exchange-server-einstellen-powershell/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-toout-of-office-uber-exchange-server-einstellen-powershell</link>
		<comments>http://codingstube.de/2010/02/how-toout-of-office-uber-exchange-server-einstellen-powershell/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 11:08:29 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[autoresponder]]></category>
		<category><![CDATA[exchange]]></category>
		<category><![CDATA[out of office]]></category>
		<category><![CDATA[Outlook]]></category>
		<category><![CDATA[powershell]]></category>

		<guid isPermaLink="false">http://codingstube.de/?p=723</guid>
		<description><![CDATA[Normalerweise ist es nur an einem Outlook Client oder über OWA möglich seinen eigenen Abwesenheits-Einstellungen zu ändern, bzw. eine automatische Antwort an den Sender zu schicken. In einem aktuellen Fall zieht Kunde X mit seinem Mailserver um. In dieser Umstellungszeit sollen nun alle Sender eine automatische Antwort erhalten, dass es eben zu Problemen kommen kann [...]]]></description>
			<content:encoded><![CDATA[<p>Normalerweise ist es nur an einem Outlook Client oder über OWA möglich seinen eigenen Abwesenheits-Einstellungen zu ändern, bzw. eine automatische Antwort an den Sender zu schicken.</p>
<p>In einem aktuellen Fall zieht Kunde X mit seinem Mailserver um. In dieser Umstellungszeit sollen nun alle Sender eine automatische Antwort erhalten, dass es eben zu Problemen kommen kann oder der Empfang von E-Mail&#8217;s nicht zu 100% gewährleistet ist.</p>
<p>Wie schon erwähnt, gibt es keine Transport-Regel o.ä. um so eine automatische-Antwort für bestimmte Postfächer zu setzen.  Dann bin ich auf das Glen&#8217;s <a href="http://gsexdev.blogspot.com/" target="_blank">Exchange Dev Blog</a> aufmerksam geworden. Glen Scales hat eine Library geschrieben (<strong>EWSOofUtil.dll</strong>), die es für einen Administrator ermöglicht, die Automatische Antwort für jeder Postfach über EWS zu setzen.</p>
<p>Wie es funktioniert, erkläre ich im Folgenden:</p>
<p><span id="more-723"></span></p>
<p>Als erstes braucht ihr die <strong>EWSOofUtil.dll</strong>:</p>
<p><a href="http://go2.wordpress.com/?id=725X1342&amp;site=telnetport25.wordpress.com&amp;url=http%3A%2F%2Fmsgdev.mvps.org%2Fexdevblog%2FEWSOofUtil.zip" target="_blank">EWSOofUtil.dll [92.3KB] –enthält auch den Quellcode</a></p>
<p>Als nächstes müsst ihr euren Client Access Server (CAS) das Ausführen von Scripten erlauben:</p>
<blockquote><p><span style="color: #3366ff;"><strong><em>set-ExecutionPolicy RemoteSigned</em></strong></span></p></blockquote>
<p>Um Änderungen an einem Postfach durchzuführen, müsst ihr die Berechtigung daran haben:</p>
<blockquote><p><span style="color: #3366ff;"><strong>Add-MailboxPermission &#8220;test.user&#8221; -User &#8220;Administrator&#8221; -AccessRights FullAccess</strong></span></p></blockquote>
<p>Hier gebe ich dem Administrator volle Berechtigung auf das Postfach von test.user.</p>
<p>Nun können wir die Oof-Einstellungen setzen:</p>
<blockquote><p><span style="color: #3366ff;"><strong>[Reflection.Assembly]::LoadFile(&#8220;C:UsersadministratorDesktopEWSOofUtilEWSOofUtil.dll&#8221;)<br />
$ExternalMessage=&#8221;I&#8217;m out of office!&#8221;<br />
$oofutil = new-object EWSOofUtil.OofUtil<br />
$oofutil.setoof(&#8220;test.user@test.org&#8221;,&#8221;Enabled&#8221;,&#8221;",$ExternalMessage)</strong></span></p></blockquote>
<ul>
<li>Als erstes müsst ihr die dll in die Powershell laden</li>
<li>Danach wird die Nachricht gesetzt, hier kann auch kompletter html Code genommen werden. Einfach über $ExternalMessage = &#8220;&lt;html&gt;&lt;&#8230;&gt;&lt;/html&gt;&#8221;</li>
<li>Der letzte Befehl setzt die automatische Antwort für den User: &#8220;test.user&#8221; mit der externen Nachricht</li>
</ul>
<p>Weitere Befehle können auch die Zeit einstellen, wann diese Nachricht gesendet wird:</p>
<blockquote><p><span style="color: #3366ff;"><strong>$oofutil.setoof(&#8220;test.user@test.org&#8221;,&#8221;Scheduled&#8221;, [datetime]::Now.Date.ToLocalTime(),[datetime]::Now.Date.AddDays(4).ToLocalTime())</strong></span></p></blockquote>
<p>Überprüfen kann man es dann im OWA:</p>
<p><a href="http://codingstube.de/wp-content/uploads/2010/02/oof.png"><img class="aligncenter size-full wp-image-728" title="oof" src="http://codingstube.de/wp-content/uploads/2010/02/oof.png" alt="" width="458" height="236" /></a></p>
<p>Weitere Beispiele für den Einsatz der dll findet ihr hier:</p>
<p><a href="http://msgdev.mvps.org/setoofexamples.htm">http://msgdev.mvps.org/setoofexamples.htm</a></p>
<p>So kann man mit schönen Powershell Skripts eine automatische Wartungsmeldung an alle Postfächer binden.</p>
<blockquote><p><span style="color: #3366ff;"><strong>$users = Get-Mailbox -Filter (&#8220;customAttribute1 -eq &#8216;Firma1&#8242;&#8221;)<br />
$email = $users | % {$_.userprincipalname}</strong></span></p>
<p><span style="color: #3366ff;"><strong>$emails = $users | % {$_.userprincipalname}</strong></span></p>
<p><span style="color: #3366ff;"><strong>foreach($mail in $emails){$oofutil.setoof($mail,&#8221;Enabled&#8221;,&#8221;",$ExternalMessage)}</strong></span></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://codingstube.de/2010/02/how-toout-of-office-uber-exchange-server-einstellen-powershell/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

