<?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.de</title>
	<atom:link href="http://codingstube.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://codingstube.de</link>
	<description>Das heterogene Blog</description>
	<lastBuildDate>Mon, 30 Aug 2010 11:32:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>deHangman2</title>
		<link>http://codingstube.de/2010/08/dehangman2/</link>
		<comments>http://codingstube.de/2010/08/dehangman2/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 11:32:59 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://codingstube.de/?p=824</guid>
		<description><![CDATA[deHangman2: Status: Im Review bei Apple. 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 nicht sinnlos wählen, sondern etwas nachdenken und rätseln. Das Spiel enthält knapp 1000 Wörter und wird mit Updates erweitert. Neue Features in deHangman2: Änderungen [...]]]></description>
			<content:encoded><![CDATA[<p>deHangman2:<br />
<strong>Status:</strong> Im Review bei Apple.</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/08/dehangman2/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/</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-Address\datenaustausch\"

	#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>0</slash:comments>
		</item>
		<item>
		<title>Active Sync mit Exchange Server schlägt fehl &#8211; (z.B. iPhone &#8211; Keine Verbindung zum Server)</title>
		<link>http://codingstube.de/2010/06/active-sync-mit-exchange-server-schlagt-fehl-z-b-iphone-keine-verbindung-zum-server/</link>
		<comments>http://codingstube.de/2010/06/active-sync-mit-exchange-server-schlagt-fehl-z-b-iphone-keine-verbindung-zum-server/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 14:22:24 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://codingstube.de/2010/06/active-sync-mit-exchange-server-schlagt-fehl-z-b-iphone-keine-verbindung-zum-server/</guid>
		<description><![CDATA[Die letzten Tage waren wirklich spannend. Bis vor dem iOS4 Update hatte ich kein Exchange Konto bei mir im Telefon eingetragen. Nun wollte ich das doch auch mal testen, Unified Inbox sei dank. Problembeschreibung Nun zum Problem: Serverdaten Domäne Benutzername Passwort alles eingetragen. Account wird überprüft, sollte funktionieren. Bei den Syncoptionen nur Mail gewählt und [...]]]></description>
			<content:encoded><![CDATA[<p>Die letzten Tage waren wirklich spannend. Bis vor dem iOS4 Update hatte ich kein Exchange Konto bei mir im Telefon eingetragen. Nun wollte ich das doch auch mal testen, Unified Inbox sei dank.</p>
<p><strong>Problembeschreibung</strong></p>
<p>Nun zum Problem:</p>
<ul>
<li>
<div>Serverdaten</div>
</li>
<li>
<div>Domäne</div>
</li>
<li>
<div>Benutzername</div>
</li>
<li>
<div>Passwort</div>
</li>
</ul>
<p>alles eingetragen. Account wird überprüft, sollte funktionieren. Bei den Syncoptionen nur Mail gewählt und schon konnte es losgehen, <del>nicht</del>.</p>
<p>Mail auf dem iPhone aufgerufen und die erste Meldung, die ich bekam, lautete &#8220;Die Verbindung zum Server ist fehlgeschlagen&#8221;. Natürlich alle Daten 5x geprüft, mit anderen Kollegen (bei denen das Exchange-Profil funktioniert) verglichen, ohne Ergebnis.</p>
<p>Mail.app auf dem iMac oder MacBook zeigt keinen Fehler an. Also Active Sync mit meinem Account hat wohl ein Problem.</p>
<p>Also die schöne Seite: <a href="https://www.testexchangeconnectivity.com/">https://www.testexchangeconnectivity.com/</a> aufgerufen und einen Test gestartet. Diese Seite testet den eigenen Exchange-Server und den angegeben Benutzeraccount auf diverse Konfigurationsprobleme u.a. mit ActiveSync.</p>
<p>Und es tauchte ein Fehler auf. Bei Aufruf von ActiveSync bekam ich einen Fehler 500 zurück. Berechtigungsproblem? Bin doch Exchange- und Domänenadmin?!</p>
<p><strong>Lösung</strong></p>
<p>Um es zu verkürzen. Lt. meiner Recherche tritt das Problem nur bei Adminkonten nach einer Exchange Migration auf. Ob dies nun &#8220;nur&#8221; Exchange-Admin-Accounts betrifft oder auch Domänen-Admins kann ich nicht genau sagen. Und zwar liegt es an der Berechtigung des Problemkontos. Dort wurden die Berechtigungen für diese Accounts nicht vererbt.</p>
<p>Um die Vererbung wieder zu aktivieren, startet den ADSI-Editor. Wählt den Namenskontext aus und navigiert zu dem Problemkonto. Dort unter den Reiter &#8220;Sicherheit&#8221; navigieren und die Vererbung analog zum folgenden Screenshot wieder aktivieren:</p>
<p style="text-align: center;"><a href="http://codingstube.de/wp-content/uploads/2010/06/Vererbung1.png"><img class="aligncenter size-full wp-image-791" title="Vererbung" src="http://codingstube.de/wp-content/uploads/2010/06/Vererbung1.png" alt="" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://codingstube.de/2010/06/active-sync-mit-exchange-server-schlagt-fehl-z-b-iphone-keine-verbindung-zum-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[How-To]Windows RDP Client 7 auf Windows Server 2003 x86 installieren</title>
		<link>http://codingstube.de/2010/05/how-towindows-rdp-client-7-auf-windows-server-2003-x86-installieren/</link>
		<comments>http://codingstube.de/2010/05/how-towindows-rdp-client-7-auf-windows-server-2003-x86-installieren/#comments</comments>
		<pubDate>Tue, 18 May 2010 10:44:15 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://codingstube.de/2010/05/how-towindows-rdp-client-7-auf-windows-server-2003-x86-installieren/</guid>
		<description><![CDATA[Der RDP-Client 7 ist normalerweise nur für folgende Betriebssysteme verfügbar: Windows XP Service Pack 3 (SP3), Windows Vista Service Pack 1 (SP1) und Windows Vista Service Pack 2 (SP2). Windows 7 und Windows Server 2008 R2 bringen diese Clientversion von Haus aus mit. Leider fehlt hier der Support vom Windows Server 2003. Beim Versuch den [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="Remote desktop connection icon" align="left" src="http://codingstube.de/wp-content/uploads/2010/05/remote_desktop_connection_icon.png" width="128" height="128" />Der RDP-Client 7 ist normalerweise nur für folgende Betriebssysteme verfügbar: Windows XP Service Pack 3 (SP3), Windows Vista Service Pack 1 (SP1) und Windows Vista Service Pack 2 (SP2).</p>
<p>Windows 7 und Windows Server 2008 R2 bringen diese Clientversion von Haus aus mit.</p>
<p>Leider fehlt hier der Support vom Windows Server 2003. Beim Versuch den Client dort zu installieren, bekommt man den freundlichen Hinweis, dass das Betriebssystem nicht unterstützt wird.</p>
<p>Erfreulicherweise klappt die Installation mit einem kleinen Workaround trotzdem.</p>
<p><strong>How-To:</strong></p>
<p>Als erstes braucht ihr den Client.</p>
<blockquote>
<p><a title="Download" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=72158b4e-b527-45e4-af24-d02938a95683">www.microsoft.com/downloads/details.aspx?FamilyId=72158b4e-b527-45e4-af24-d02938a95683</a></p>
</blockquote>
<p>Das Paket muss nun extrahiert werden. Öffnet die Kommandozeile und navigiert zum Downloadpaket. Danach gebt ihr folgenden Befehl ein:</p>
<blockquote>
<p>WindowsXP-KB969084-x86-deu.exe /extract</p>
</blockquote>
<p>Ihr werdet gefragt, wohin das Paket extrahiert werden soll. Speichert es am besten unter <strong>C:\RDP70</strong>.</p>
<p>In dem neuen Ordner findet ihr den Unterordner update. Dort liegt die Datei <strong>update.inf</strong>. Öffnet diese mit dem Editor und ändert die oberen Einträge wie folgt:</p>
<blockquote>
<p>[Version]<br />
RebootRequired=0<br />
Signature = &#8220;$Windows NT$&#8221;<br />
LanguageType = %LangTypeValue%<br />
NtBuildToUpdate = 3790<br />
NtMajorVersionToUpdate = 5<br />
NtMinorVersionToUpdate = 2<br />
MaxNtBuildToUpdate = 3790<br />
MaxNtMajorVersionToUpdate = 5<br />
MaxNtMinorVersionToUpdate = 2<br />
MinNtServicePackVersion = 512<br />
MaxNtServicePackVersion = 512<br />
ThisServicePackVersion = 512<br />
CatalogFile = %SP_SHORT_TITLE%.cat</p>
</blockquote>
<p>Speichert die Datei mit folgendem Namen: <strong>update.inf.new</strong>. Die originale <strong>update.inf</strong> Datei benennt ihr in <strong>update.inf.old</strong> um.</p>
<p>So nun erstellen wir ein kleines Skript, welches das Update aufrufen soll. Dieses wird das Update mit der veränderten <strong>update.inf</strong> aufrufen und während der Installation die originale <strong>update.inf</strong> wieder zurückschreiben. Dies <del>gaukelt</del> gibt dem Update vor, es sei alles in Ordnung.</p>
<p>Das Skript sieht wie folgt aus:</p>
<p>&nbsp;</p>
<pre lang="winbatch">
@echo off

echo Das Paket installiert RDP 7.0 auf einem Windows Server 2003 x86.

echo Es wird in das Verzeichnis c:\rdp70 gewechselt

c:

cd "C:\RDP70\update"

echo Die originale update.inf wird durch update.inf.new ersetzt

copy update.inf.new update.inf /y

echo Update ausführen

start update.exe

ping -n 1 -w 20 1.2.3.4&gt;nul

echo Ersetze modifizierte update.inf mit der originalen Version. Anonsten gibt der Installer einen Fehler aus.

echo Ggf. muss die Zahl hinter "ping -n 1 -w". Eine größere Nummer bedeutet eine größere Pause.

echo Wenn die Pause zu klein ist, dann erscheint ein Fehler, dass ein flasches Betriebssystem vorliegt.

echo Wenn die Pause zu groß ist, dann erscheint ein Fehler, dass die ini-Datei nicht verifiziert werden kann.

copy update.inf.old update.inf /y
</pre>
<p>Das Skript geht davon aus, dass das Paket unter <strong>C:\RDP70</strong> liegt. Der Befehl <em>ping -n 1 -w 20 1.2.3.4 &gt; nul</em> muss ggf. angepasst werden, da kommt es auf die Geschwindigkeit des Systems an. Einfach mal durchtesten. Die Fehler werden euch sagen, ob ihr zu schnell die <strong>update.inf</strong> wieder austauscht oder eben zu langsam.</p>
]]></content:encoded>
			<wfw:commentRss>http://codingstube.de/2010/05/how-towindows-rdp-client-7-auf-windows-server-2003-x86-installieren/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>FreeBusy Board für Exchange EWS Managed API mit Hilfe von Powershell</title>
		<link>http://codingstube.de/2010/04/freebusy-board-fur-exchange-ews-managed-api-mit-hilfe-von-powershell/</link>
		<comments>http://codingstube.de/2010/04/freebusy-board-fur-exchange-ews-managed-api-mit-hilfe-von-powershell/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 13:09:02 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://codingstube.de/?p=782</guid>
		<description><![CDATA[Das Skript generiert eine html-Seite mit der Übersicht aller Termine für alle Exchange Accounts. So kann übersichtlich gelistet werden, wer heute wo, wann und wie beschäftigt ist. Als Grundlage habe ich das super Skript von Glen Scales benutzt. Dieses hatte leider noch Probleme die Kalendereinträge richtig auf die Zeiten zu zuordnen. Außerdem habe ich die [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="exchange" align="left" src="http://codingstube.de/wp-content/uploads/2010/04/exchange.png" width="131" height="130" /></p>
<p>Das Skript generiert eine html-Seite mit der Übersicht aller Termine für alle Exchange Accounts. So kann übersichtlich gelistet werden, wer heute wo, wann und wie beschäftigt ist.</p>
<p>Als Grundlage habe ich das super Skript von <a href="http://gsexdev.blogspot.com/2010/03/freebusy-board-for-exchange-ews-managed.html">Glen Scales</a> benutzt.</p>
</p>
<p align="center"><a class="thickbox" href="http://codingstube.de/wp-content/uploads/2010/04/fbboard.png"><img alt="fbboard" src="http://codingstube.de/wp-content/uploads/2010/04/fbboard-small.png" width="465" height="315" /></a></p>
</p>
<p>Dieses hatte leider noch Probleme die Kalendereinträge richtig auf die Zeiten zu zuordnen. Außerdem habe ich die Zeitspanne bei einem Tag von 8:00 Uhr bis 20:00 Uhr erweitert und die Termine werden verkürzt in den einzelnen Zellen angezeigt. Der komplette Terminname wird angezeigt, wenn man mit dem Cursor über die Zelle fährt. Desweiteren habe ich den Start des Skripts mit einem Parameter versehen, so dass die Termine für bestimmte Tage in der Vergangenheit oder auch in der Zukunft generiert werden können.</p>
<p>Bitte beachtet das die Exchange Web Services installiert sein müssen und in Zeile 56 der richtige Exchange-Server eingetragen wird: <strong><em>$casserverName = &#8220;Exchange-Server&#8221;.</em></strong></p>
<p><strong><em>Hier das Skript:</em></strong></p>
</p>
<pre lang="powershell">
function cleanDescription([string] $url)
{
	$url = $url.Replace("title=", "")
	$url = $url.Replace("`"","")
	$url = $url.Substring(0,6)

    return $url
}

if ($Args.count -lt 1) {

    'No Parameter!'
    'Usage:'
    './fb.ps1 days in the future (e.g. 0 - Today; 1 - Tomorrow; -1 - Yesterday)'
    ''
	'Today:'
	'./fb.ps1 0'
    }
else{
[int]$days = $args[0]

$casserverName = "Exchange-Server"
$dllpath = "C:\Program Files\Microsoft\Exchange\Web Services\1.0\Microsoft.Exchange.WebServices.dll"
[void][Reflection.Assembly]::LoadFile($dllpath)
$service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2007_SP1)

$uri=[system.URI] ("https://" + $casserverName + "/ews/exchange.asmx")
$service.Url = $uri

$mbHash = @{ }

$tmValHash = @{ }
$tidx = 0
for($vsStartTime=[DateTime]::Parse([DateTime]::Now.ToString("yyyy-MM-dd 0:00")).AddDays($days);$vsStartTime -lt [DateTime]::Parse([DateTime]::Now.ToString("yyyy-MM-dd 0:00")).AddDays($days+1);$vsStartTime = $vsStartTime.AddMinutes(30)){
	$tmValHash.add($vsStartTime.ToString("HH:mm"),$tidx)
	$tidx++
}

get-mailbox -ResultSize unlimited | foreach-object{
	if ($mbHash.ContainsKey($_.WindowsEmailAddress.ToString()) -eq $false){
		$mbHash.Add($_.WindowsEmailAddress.ToString(),$_.DisplayName)
	}
}
$Attendeesbatch = [activator]::createinstance(([type]'System.Collections.Generic.List`1').makegenerictype([Microsoft.Exchange.WebServices.Data.AttendeeInfo]))

$StartTime = [DateTime]::Parse([DateTime]::Now.ToString("yyyy-MM-dd 0:00")).AddDays($days)
$EndTime = $StartTime.AddDays(1)

$displayStartTime =  [DateTime]::Parse([DateTime]::Now.ToString("yyyy-MM-dd 08:00")).AddDays($days)
$displayEndTime = [DateTime]::Parse([DateTime]::Now.ToString("yyyy-MM-dd 20:30")).AddDays($days)

$drDuration = new-object Microsoft.Exchange.WebServices.Data.TimeWindow($StartTime,$EndTime)
$AvailabilityOptions = new-object Microsoft.Exchange.WebServices.Data.AvailabilityOptions
$AvailabilityOptions.RequestedFreeBusyView = [Microsoft.Exchange.WebServices.Data.FreeBusyViewType]::DetailedMerged

$batchsize = 100
$bcount = 0
$bresult = @()
if ($mbHash.Count -ne 0){
	$mbHash.GetEnumerator() | Sort Value | foreach-object {
		if ($bcount -ne $batchsize){
			$Attendee1 = new-object Microsoft.Exchange.WebServices.Data.AttendeeInfo($_.Key)
			$Attendeesbatch.add($Attendee1)
			$bcount++
		}
		else{
			$availresponse = $service.GetUserAvailability($Attendeesbatch,$drDuration,[Microsoft.Exchange.WebServices.Data.AvailabilityData]::FreeBusy,$AvailabilityOptions)
			foreach($avail in $availresponse.AttendeesAvailability.OverallResult){$bresult += $avail}
			$Attendeesbatch = [activator]::createinstance(([type]'System.Collections.Generic.List`1').makegenerictype([Microsoft.Exchange.WebServices.Data.AttendeeInfo]))
			$bcount = 0
			$Attendee1 = new-object Microsoft.Exchange.WebServices.Data.AttendeeInfo($_.Key)
			$Attendeesbatch.add($Attendee1)
			$bcount++
		}
	}
}
$availresponse = $service.GetUserAvailability($Attendeesbatch,$drDuration,[Microsoft.Exchange.WebServices.Data.AvailabilityData]::FreeBusy,$AvailabilityOptions)
$usrIdx = 0
$frow = $true
foreach($res in $availresponse.AttendeesAvailability){
      if ($frow -eq $true){
	  	$fbBoard = $fbBoard + "
<table>
<tr>
<td align=`"center`"><b>"+$StartTime.ToString("dd-MM-yyyy")+"</b></td>
<td align=`"right`" style=`"width=50;`"><b>Free:</b></td>
<td bgcolor=`"#41A317`" align=`"center`" style=`"width=50;`" ></td>

" + "`r`n"
		$fbBoard = $fbBoard + "
<td align=`"center`" style=`"width=50;`"><b>Tentative:</b></td>
<td bgcolor=`"#828383`" align=`"center`" style=`"width=50;`" ></td>

" + "`r`n"
		$fbBoard = $fbBoard + "
<td align=`"center`" style=`"width=50;`"><b>Busy:</b></td>
<td bgcolor=`"#153E7E`" align=`"center`" style=`"width=50;`" ></td>

" + "`r`n"
		$fbBoard = $fbBoard + "
<td align=`"center`" style=`"width=50;`"><b>OOF:</b></td>
<td bgcolor=`"#4E387E`" align=`"center`" style=`"width=50;`" ></td>

" + "`r`n"
		$fbBoard = $fbBoard + "</tr>

"
		$fbBoard = $fbBoard + "
<tr bgcolor=`"#95aedc`">" +"`r`n"
		$fbBoard = $fbBoard + "
<td align=`"center`" style=`"width=200;`" ><b>User</b></td>

" +"`r`n"
		for($stime = $displayStartTime;$stime -lt $displayEndTime;$stime = $stime.AddMinutes(30)){
			$fbBoard = $fbBoard + "
<td align=`"center`" style=`"width=50;`" ><b>" + $stime.ToString("HH:mm") + "</b></td>

" +"`r`n"
		}
		$fbBoard = $fbBoard + "</tr>

" + "`r`n"
		$frow = $false
	}
	for($stime = $displayStartTime;$stime -lt $displayEndTime;$stime = $stime.AddMinutes(30)){

		if ($stime -eq $displayStartTime){
			$fbBoard = $fbBoard + "
<td bgcolor=`"#CFECEC`"><b>" + $mbHash[$Attendeesbatch[$usrIdx].SmtpAddress] + "</b></td>

"  + "`r`n"
			$c = 0
		}

		$title = "title="
		$description = ""
		if ($res.MergedFreeBusyStatus[$tmValHash[$stime.ToString("HH:mm")]] -ne $null){
			$gdet = $false
			$FbValu = $res.MergedFreeBusyStatus[$tmValHash[$stime.ToString("HH:mm")]]
			switch($FbValu.ToString()){
				"Free" {$bgColour = "bgcolor=`"#41A317`""}
				"Tentative" {$bgColour = "bgcolor=`"#828383`""
					     $gdet = $true

					}
				"Busy" {$bgColour = "bgcolor=`"#153E7E`""
					     $gdet = $true

					}
				"OOF" {$bgColour = "bgcolor=`"#4E387E`""
					     $gdet = $true

					}
				"NoData" {$bgColour = "bgcolor=`"#98AFC7`""}
				"N/A" {$bgColour = "bgcolor=`"#98AFC7`""}
			}
			if ($gdet -eq $true){
				if ($res.CalendarEvents.Count -ne 0){
					if($c -lt $res.CalendarEvents.Count){
					#for($ci=0;$ci -lt $res.CalendarEvents.Count;$ci++){
						[int]$start = $res.CalendarEvents[$c].StartTime.ToString("HHmm")
						[int]$end = $res.CalendarEvents[$c].EndTime.ToString("HHmm")
						if($end -ge 0)
						{
							$end = 2000
						}
						[int]$time = $stime.ToString("HHmm")
						#Write-Host $start $time $end
						if ($time -ge $start-25 -band $time -le $end){
							$c += 1
							if($res.CalendarEvents[$c-1].Details.IsPrivate -eq $False){
								$subject = ""
								$location = ""
								#Write-Host $c
								#Write-Host $mbHash[$Attendeesbatch[$usrIdx].SmtpAddress]
								#Write-Host $res.CalendarEvents[$c-1].StartTime.ToString("HH:mm")

								#Write-Host $time
								#Write-Host $res.CalendarEvents[$c-1].EndTime.ToString("HH:mm")
								#Write-Host $res.CalendarEvents[$c-1].Details.Subject
								if ($res.CalendarEvents[$c-1].Details.Subject -ne $null){

									$subject = $res.CalendarEvents[$c-1].Details.Subject.ToString()
								}
								if ($res.CalendarEvents[$c-1].Details.Location -ne $null){
									$location = $res.CalendarEvents[$c-1].Details.Location.ToString()
								}
								$title = $title + "`"" + $subject + "`r`n" + "Wo: " + $location + "`" "
							}else{
								$title = $title + "Privat"
							}
						}
					}

				}
			}

		}
		else{
			$bgColour = "bgcolor=`"#98AFC7`""
		}
		if($title -ne "title="){

			$description = cleanDescription($title)
			$fbBoard = $fbBoard + "
<td " + $bgColour + " " + $title + "><font color=#FFFFFF>"+$description+"</font></td>

"  + "`r`n"
		}
		else{
			$fbBoard = $fbBoard + "
<td " + $bgColour + "></td>

"  + "`r`n"
		}

	}
	$fbBoard = $fbBoard + "</tr>

"  + "`r`n"
	$usrIdx++
}
$fbBoard = $fbBoard + "</table>

"  + "  "
$fbBoard | out-file "c:\fbboard\fbboard$days.htm"
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://codingstube.de/2010/04/freebusy-board-fur-exchange-ews-managed-api-mit-hilfe-von-powershell/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[Powershell]Dateisystemrechte analog bestehender Rechte hinzufügen</title>
		<link>http://codingstube.de/2010/04/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:\Daten\Temp 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:\Daten\Temp</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_A\Test" -or $name[$i] -eq "domain_A\Test2")
        {
                $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>1</slash:comments>
		</item>
		<item>
		<title>[Exchange 2010]GUI Mailbox Übersicht</title>
		<link>http://codingstube.de/2010/04/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 Files\Microsoft\Exchange Server\V14\Scripts</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>GeekTool ist klasse Part 2 (Skript-Downloads für Geektool v3)</title>
		<link>http://codingstube.de/2010/03/geektool-ist-klasse-part-2-skript-downloads-fur-geektool-v3/</link>
		<comments>http://codingstube.de/2010/03/geektool-ist-klasse-part-2-skript-downloads-fur-geektool-v3/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 14:49:11 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://codingstube.de/?p=754</guid>
		<description><![CDATA[Ein paar neue Geektool-Skripte Vor einiger Zeit habe ich hier schon ein paar Skripte für Geektool präsentiert. Folgende Skripte stehen weiter unten zum Download bereit: Wetter-Icon von Yahoo TV-Programm um 20:15 Uhr Kalendereinträge Für das Wetter-Icon benötigt man zwei Skripte. Einmal eins um das Bild herunterzuladen und das Andere um das Bild anzuzeigen. WetterBild_abrufen.glet WetterBild_laden.glet [...]]]></description>
			<content:encoded><![CDATA[<p align="center"><strong>Ein paar neue Geektool-Skripte</strong></p>
<p>Vor einiger Zeit habe ich <a href="http://codingstube.de/2009/04/geektool-ist-klasse/">hier</a> schon ein paar Skripte für Geektool  präsentiert.</p>
<p>Folgende Skripte stehen weiter unten zum Download bereit:</p>
<ul>
<li>
<div align="left">Wetter-Icon von Yahoo</div>
</li>
<li>
<div align="left">TV-Programm um 20:15 Uhr</div>
</li>
<li>
<div align="left">Kalendereinträge</div>
</li>
</ul>
<p align="center"><a class="thickbox" href="http://codingstube.de/wp-content/uploads/2010/03/geektool-1.png"><img alt="geektool" src="http://codingstube.de/wp-content/uploads/2010/03/geektool-1-small.png" width="240" height="477" /></a></p>
<ul>
<li>
<div align="left">Für das Wetter-Icon benötigt man zwei Skripte. Einmal eins um das Bild herunterzuladen und das Andere um das Bild anzuzeigen.</div>
</li>
</ul>
<p align="center"><font color="#0066CC"><font color="black"><br />
<a title="WetterBild_abrufen.glet" href="http://codingstube.de/downloads/WetterBild_abrufen.glet">WetterBild_abrufen.glet</a><br />
<a title="WetterBild_laden" href="http://codingstube.de/downloads/WetterBild_laden.glet">WetterBild_laden.glet</a></font></font></p>
<ul>
<li>
<div align="left">Das TV-Programm wird mit dem folgenden Skript angezeigt:</div>
</li>
</ul>
<p align="center"><a title="Tv-Info" href="http://codingstube.de/downloads/TV-Info.glet">TV-Info.glet</a></p>
<p><a title="Wetter-Icon laden" href="http://test"></a> </p>
<ul>
<li>
<div align="left">Für die Kalendereinträge braucht man noch ein extra Programm namens <a title="iCalBuddy" href="http://hasseg.org/icalBuddy/">iCalBuddy</a>. Nach dem Download des Paketes, wird es extrahiert. Dann navigiert ihr im Terminal in das icalBuddy-Verzeichnis und ruft: ./install_command auf. Die Installation könnt ihr prüfen indem ihr im Terminal folgendes eingebt: <em>icalbuddy EventsToday</em>. Mit diesem Kommandozeilen-Tool kann man nun auch die Ausgabe per Geektool erfolgen lassen.</div>
</li>
</ul>
<p align="center"><a title="Kalender" href="http://codingstube.de/downloads/kalender.glet">kalender.glet</a></p>
<blockquote>
<p>Eine Überschrift für die Kalenderausgabe kann man einfach mit echo selbst erstellen.</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://codingstube.de/2010/03/geektool-ist-klasse-part-2-skript-downloads-fur-geektool-v3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Business Contact Manager Silent-Installationspaket mit Autoit-GUI</title>
		<link>http://codingstube.de/2010/03/business-contact-manager-silent-installationspaket-mit-autoit-gui-2/</link>
		<comments>http://codingstube.de/2010/03/business-contact-manager-silent-installationspaket-mit-autoit-gui-2/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 13:45:21 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://codingstube.de/2010/03/business-contact-manager-silent-installationspaket-mit-autoit-gui-2/</guid>
		<description><![CDATA[Der Business Contact Manager kommt eigentlich nur im Paket mit Outlook daher. Dieser Artikel beschreibt, wie man ein kleines Installationspaket schnürt auch ohne die Installation von Outlook durchzuführen, falls dieses z.B. schon installiert ist. Nachdem ihr euer Outlook &#8211; BCM Paket extrahiert habt, solltet ihr folgende Dateien vorfinden: In meinem Fall war oder ist bereits [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://codingstube.de/wp-content/uploads/2010/03/bcm-1.png" border="0" alt="" hspace="0" align="baseline" /></p>
<p>Der Business Contact Manager kommt eigentlich nur im Paket mit Outlook daher. Dieser Artikel beschreibt, wie man ein kleines Installationspaket schnürt auch ohne die Installation von Outlook durchzuführen, falls dieses z.B. schon installiert ist.</p>
<p>Nachdem ihr euer <em>Outlook &#8211; BCM</em> Paket extrahiert habt, solltet ihr folgende Dateien vorfinden:</p>
<p><img src="http://codingstube.de/wp-content/uploads/2010/03/bcm-files1.png" alt="BCM-Files" width="215" height="695" /></p>
<p>In meinem Fall war oder ist bereits Outlook überall installiert, so dass wir Outlook aus der Installation ausschliessen können. Dazu löscht ihr einfach den oben markierten Ordner &#8220;Outlook&#8221; und öffnet die Datei &#8220;Wizard.exe.config&#8221; mit einem beliebigen Texteditor. In dieser Datei müsst ihr folgenden Abschnitt löschen:</p>
<blockquote><p><span style="background-color: #ffffff;">&lt;Application&gt;<br />
&lt;ApplicationName&gt;Microsoft Office Outlook 2007&lt;/ApplicationName&gt;<br />
&lt;ShortName&gt;Outlook&lt;/ShortName&gt;<br />
&lt;Installer&gt;Outlook\setup.exe&lt;/Installer&gt;<br />
&lt;ProductCode&gt;&lt;/ProductCode&gt;<br />
&lt;LaunchParameter&gt;&lt;/LaunchParameter&gt;<br />
&lt;Required&gt;false&lt;/Required&gt;<br />
&lt;UseWindowsInstaller&gt;false&lt;/UseWindowsInstaller&gt;<br />
&lt;RegistryKey&gt;SOFTWARE\Microsoft\Office\12.0\Outlook\InstallRoot&lt;/RegistryKey&gt;<br />
&lt;RegistryValue&gt;Path&lt;/RegistryValue&gt;<br />
&lt;SpaceRequired_MB&gt;0&lt;/SpaceRequired_MB&gt;<br />
&lt;UseWizardForUninstall&gt;false&lt;/UseWizardForUninstall&gt;<br />
&lt;UninstallExe&gt;&lt;/UninstallExe&gt;<br />
&lt;UninstallParameter&gt;&lt;/UninstallParameter&gt;<br />
&lt;UseSQLInstance&gt;false&lt;/UseSQLInstance&gt;<br />
&lt;ParentApplication&gt;&lt;/ParentApplication&gt;<br />
&lt;/Application&gt;</span></p></blockquote>
<p>Gut! Um nun eine Installation im Hintergrund aufzurufen, startet das Setup mit folgendem Befehl: setup.exe /q.</p>
<p>Leider erhaltet ihr mit diesem Aufruf auch keine Rückinfo, wann das Paket fertig installiert ist. Dazu habe ich kleines Programm in AutoIt geschrieben, welches die Installation automatisch aufruft und den Prozess überprüft:</p>
<p><img src="http://codingstube.de/wp-content/uploads/2010/03/bcm-install1.png" alt="bcm-install" width="334" height="242" /></p>
<p>Wichtig ist, dass das BCM-Installationpaket in den Ordner BCM umbenannt wird. Dann das Programm &#8220;BCM-Install.exe&#8221; aufrufen und die Installation mit dem einzigen Button starten! Sobald die Installation abgeschlossen ist, erscheint folgende Meldung:</p>
<p><a href="http://codingstube.de/wp-content/uploads/2010/03/bcm-install-finish.png"><img class="aligncenter size-full wp-image-744" title="bcm-install-finish" src="http://codingstube.de/wp-content/uploads/2010/03/bcm-install-finish.png" alt="" width="444" height="159" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://codingstube.de/2010/03/business-contact-manager-silent-installationspaket-mit-autoit-gui-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Business Contact Manager auf Windows Server 2008 R2 installieren (Office 2007 Client)</title>
		<link>http://codingstube.de/2010/03/business-contact-manager-auf-windows-server-2008-r2-installieren-office-2007-client/</link>
		<comments>http://codingstube.de/2010/03/business-contact-manager-auf-windows-server-2008-r2-installieren-office-2007-client/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 15:53:55 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://codingstube.de/2010/03/business-contact-manager-auf-windows-server-2008-r2-installieren-office-2007-client/</guid>
		<description><![CDATA[Folgende Systemversionen wurden für diesen Test eingesetzt: Windows Server 2008 R2 (deutsch) MS-SQL Server 2005 (deutsch) MS-SQL Server 2005 SP3 (deutsch) Sql Server Management Studio Express Business Contact Manager for Outlook 2007 Database Tool Ich gehe davon aus, dass der R2-Server schon aufgesetzt ist und funktioniert (interne Windows Firewall deaktiviert). Als erstes wird der SQL-Server [...]]]></description>
			<content:encoded><![CDATA[<p align="center"><img alt="BCM" src="http://codingstube.de/wp-content/uploads/2010/03/bcm-1.png" width="225" height="46" /></p>
<p>Folgende Systemversionen wurden für diesen Test eingesetzt:</p>
<ul>
<li>Windows Server 2008 R2 (deutsch)</li>
<li><a href="http://www.microsoft.com/downloads/details.aspx?familyid=220549B5-0B07-4448-8848-DCC397514B41&amp;displaylang=de">MS-SQL Server 2005 (deutsch)</a></li>
<li><a href="http://www.microsoft.com/downloads/details.aspx?displaylang=de&amp;FamilyID=ae7387c3-348c-4faa-8ae5-949fdfbe59c4">MS-SQL Server 2005 SP3 (deutsch)</a></li>
<li><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c243a5ae-4bd1-4e3d-94b8-5a0f62bf7796&amp;DisplayLang=en">Sql Server Management Studio Express</a></li>
<li><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=b8e7aa0f-f593-4fb4-b822-dd662af1a6cb&amp;displaylang=en">Business Contact Manager for Outlook 2007 Database Tool</a></li>
</ul>
<p>Ich gehe davon aus, dass der R2-Server schon aufgesetzt ist und funktioniert (interne Windows Firewall deaktiviert).</p>
<p>Als erstes wird der SQL-Server installiert, es kommt zwar die Warnung, dass die Version nicht kompatibel zum Betriebssystem ist, aber ihr guten Mutes fortfahren. Danach könnt ihr das Service-Pack 3 installieren. Das sollte soweit alles ohne Probleme laufen.</p>
<p>Die Management Studio Express msi Installation-Datei solltet ihr über die Kommandozeile aufrufen. Ruft die Kommandozeile unbedingt mit Administrationsrechten auf. Navigiert zur msi Datei und ruft diese ganz normal über den Prompt auf, ansonsten erhaltet ihr wahrscheinlich folgenden <strong>Error-Code: 29506</strong>!</p>
<p>Zum Schluss installiert ihr das BCM Database Tool. Damit ist es relativ einfach eine neue Datenbank zu erstellen. Als nächstes gebt ihr die angelegte Datenbank frei, natürlich auch wieder über das Datenbank-Tool.</p>
<p>Leider werdet ihr feststellen, dass die Verbindung mit einem Outlook-Client immer noch nicht funktioniert. Dazu müsst ihr einen Wert in der Tabelle OrgTable in eurer Datenbank ändern. Sucht den Eintrag &#8220;LocaleID&#8221; und ändert den Wert von &#8220;<strong>en-US</strong>&#8221; auf &#8220;<strong>de-DE</strong>&#8220;.</p>
<p>Nun sollte auch die Verbindung funktioniern und ihr könnt den BCM in Outlook einrichten.</p>
]]></content:encoded>
			<wfw:commentRss>http://codingstube.de/2010/03/business-contact-manager-auf-windows-server-2008-r2-installieren-office-2007-client/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
