<?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>Markus Bäker &#187; Tools</title>
	<atom:link href="http://www.mbaeker.de/category/tools/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mbaeker.de</link>
	<description>Use %~dp0 !!!</description>
	<lastBuildDate>Tue, 31 Jan 2012 10:49:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>SCOM2Nagios 1.5</title>
		<link>http://www.mbaeker.de/2011/10/scom2nagios-1-5/</link>
		<comments>http://www.mbaeker.de/2011/10/scom2nagios-1-5/#comments</comments>
		<pubDate>Sun, 16 Oct 2011 19:07:08 +0000</pubDate>
		<dc:creator>markus</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Operations Manager]]></category>
		<category><![CDATA[SCOM2Nagios]]></category>

		<guid isPermaLink="false">http://www.mbaeker.de/?p=747</guid>
		<description><![CDATA[Find the newest version on top of: http://www.mbaeker.de/tag/scom2nagios/ Released a new Version of the SCOM2Nagios Connector. Changes: 1.5 * NEW: NagiosHost2 and NagiosPort2 in config (fast change upon request) * BUG: Processings equals instruction hasnt&#8217;t worked correctly This is currently a fast release without much testing. Please add a comment if anything is broken! Download:]]></description>
			<content:encoded><![CDATA[<p>Find the newest version on top of: <a href="http://www.mbaeker.de/tag/scom2nagios/">http://www.mbaeker.de/tag/scom2nagios/</a></p>
<p>Released a new Version of the SCOM2Nagios Connector. Changes:</p>
<p>1.5<br />
* NEW: NagiosHost2 and NagiosPort2 in config (fast change upon request)<br />
* BUG: Processings equals instruction hasnt&#8217;t worked correctly</p>
<p>This is currently a fast release without much testing. Please add a comment if anything is broken!</p>
<p>Download: <a class="downloadlink" href="http://www.mbaeker.de/downloads/SCOM2Nagios_1.5.zip" title=" downloaded 167 times" >SCOM2Nagios (Version 1.5) (167)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbaeker.de/2011/10/scom2nagios-1-5/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Enteo: Statische Computer-Gruppenzuordnung klonen</title>
		<link>http://www.mbaeker.de/2011/09/enteo-statische-computer-gruppenzuordnung-klonen/</link>
		<comments>http://www.mbaeker.de/2011/09/enteo-statische-computer-gruppenzuordnung-klonen/#comments</comments>
		<pubDate>Thu, 15 Sep 2011 18:06:31 +0000</pubDate>
		<dc:creator>markus</dc:creator>
				<category><![CDATA[Deutsch]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Enteo]]></category>
		<category><![CDATA[Powershell]]></category>

		<guid isPermaLink="false">http://www.mbaeker.de/?p=715</guid>
		<description><![CDATA[Wird Software in Enteo per statischen Gruppen zugeordnet, so ist es bei einem Hardwareaustausch notwendig, die Zuordnungen des alten PCs auf den neuen zu übertragen. Dies kann man natürlich durch manuelles Drag&#38;Drop machen, oder aber über ein kleines Powershell Skript: Das Skript selber ist recht einfach aufgebaut. Es wird der Quellcomputer gesucht und das Objekt [...]]]></description>
			<content:encoded><![CDATA[<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; float: left; padding-top: 0px; border: 0px;" title="configuration" src="http://www.mbaeker.de/wp-content/uploads/2011/09/configuration.png" alt="configuration" width="64" height="64" align="left" border="0" />Wird Software in Enteo per statischen Gruppen zugeordnet, so ist es bei einem Hardwareaustausch notwendig, die Zuordnungen des alten PCs auf den neuen zu übertragen. Dies kann man natürlich durch manuelles Drag&amp;Drop machen, oder aber über ein kleines Powershell Skript:</p>
<pre class="brush: powershell; title: ; notranslate">
param([string]$sourcename=&quot;source&quot;, [string]$targetname=&quot;target&quot;)
Add-PSSnapin NwcServices.BlsAdministration
$server=&quot;\\enteoserver&quot;
New-PSDrive -Name emdb -psProvider BlsEmdb -Root $server
cd &quot;emdb:\rootdse&quot;
$source=get-emdbcomputer -recurse $sourcename

if ($source)
{
    $target=get-emdbcomputer -recurse $targetname
    if ($target)
    {
        $source.GetAssociatedItems() | where {$_.SchemaDisplayName -eq 'Static Group'} |foreach-Object{
        write-host &quot;Cloning group &quot; $_.Name &quot; from $sourcename to $targetname&quot;
        $_.addMember($target)
        }
    }
    else
    {
        write-host &quot;Target $targetname cannot be found!&quot;
    }
}
else
{
    Write-host &quot;Source $sourcename cannot be found!&quot;
}
</pre>
<p>Das Skript selber ist recht einfach aufgebaut. Es wird der Quellcomputer gesucht und das Objekt abgefragt, welche Verbindungen es hat.<br />
Diese Verbindungen werden nach dem Typ statische Gruppen gefiltert. Über diese Gruppen wird iteriert und jeweils dem Zielobjekt hinzugefügt.</p>
<p>Um das Powershellskript einfach aufzurufen hier noch eine Batch-Datei:</p>
<pre class="brush: plain; title: ; notranslate">
@echo off
set /p source=Bitte Quellrechnernamen eingeben:
set /P target=Bitte Zielrechnernamen eingeben:
powershell &quot;%~dp0clonecomputer.ps1&quot; -sourcename &quot;%source%&quot; -targetname &quot;%target%&quot;
pause
</pre>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbaeker.de/2011/09/enteo-statische-computer-gruppenzuordnung-klonen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Profilepfad per Batch-Datei auslesen</title>
		<link>http://www.mbaeker.de/2011/06/profilepfad-per-batch-datei-auslesen/</link>
		<comments>http://www.mbaeker.de/2011/06/profilepfad-per-batch-datei-auslesen/#comments</comments>
		<pubDate>Tue, 28 Jun 2011 18:51:30 +0000</pubDate>
		<dc:creator>markus</dc:creator>
				<category><![CDATA[Deutsch]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[adds]]></category>
		<category><![CDATA[Batchdatei]]></category>
		<category><![CDATA[HAL]]></category>

		<guid isPermaLink="false">http://www.mbaeker.de/?p=554</guid>
		<description><![CDATA[Bei einigen Automatisierungen ist es notwendig den Profilpfad eines Benutzers auszulesen und einen eventuellen DFS Pfad in einen physikalischen Pfad aufzulösen. Hierfür habe ich eine kleine Batch-Datei geschrieben: Der Profilpfad wird in Zeile 3 mit Hilfe von adfind anhand des Benutzernamens ermittelt, per for ausgewertet und an eine Umgebungsvariable übergeben. Diese wird in Zeile 7 [...]]]></description>
			<content:encoded><![CDATA[<p>Bei einigen Automatisierungen ist es notwendig den Profilpfad eines Benutzers auszulesen und einen eventuellen DFS Pfad in einen physikalischen Pfad aufzulösen.</p>
<p>Hierfür habe ich eine kleine Batch-Datei geschrieben:</p>
<pre class="brush: plain; title: ; notranslate">
@echo off
set samaccountname=%~1
for /f &quot;tokens=* usebackq&quot; %%a in (`AdFind.exe -f &quot;samaccountname=%samaccountname%&quot; profilePath /list`) do (
set profilePath=%%a
)

for /f &quot;delims=&lt;&gt; usebackq tokens=1,2,3,4,5&quot; %%a in (`dfsutil diag viewdfspath %profilepath%`) do (
     if NOT %%e.==. set profilePath=%%e
)

echo %profilePath%
</pre>
<p>Der Profilpfad wird in Zeile 3 mit Hilfe von adfind anhand des Benutzernamens ermittelt, per for ausgewertet und an eine Umgebungsvariable übergeben.<br />
Diese wird in Zeile 7 an dfsutil übergeben, dass mit dem Befehl diag den physikalischen Pfad anzeigt (ermittelt mit dem aktuellen Standort). Die Ausgabe wird erneut mittels for ausgewertet, wobei die Zeilen an den Größer- und Kleinerzeichen getrennt werden. An fünfter Stelle steht dabei der physikalische Pfad. Handelt es sich bei dem Profilpfad um keinen DFS basierten, dann ist die fünfte Stelle leer und wird daher nicht an die Variable übergeben.</p>
<p>Innerhalb einer anderen Batch-Datei kann diese einfach per call getprofilepath.cmd SAMACCOUNTNAME aufgerufen und die Variable profilePath später weiterverwendet werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbaeker.de/2011/06/profilepfad-per-batch-datei-auslesen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enteo und Automatisierung Teil 2</title>
		<link>http://www.mbaeker.de/2011/06/enteo-und-automatisierung-teil-2/</link>
		<comments>http://www.mbaeker.de/2011/06/enteo-und-automatisierung-teil-2/#comments</comments>
		<pubDate>Sat, 25 Jun 2011 16:21:41 +0000</pubDate>
		<dc:creator>markus</dc:creator>
				<category><![CDATA[Deutsch]]></category>
		<category><![CDATA[Powershell]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Enteo]]></category>
		<category><![CDATA[HAL]]></category>

		<guid isPermaLink="false">http://www.mbaeker.de/?p=539</guid>
		<description><![CDATA[In diesem Blog Post werde ich eine Funktion vorstellen, die anhand eines Abteilungsnamens eine Hierarchie von Organisationseinheiten in Enteo erstellt. Nehmen wir an, dass die Abteilungen nach einem klaren Muster benannt sind. Jede Hierarchie wird durch einen Buchstaben dargestellt. Eine Abteilung ABC steht somit an dritter Stelle in der Hierarchie. Über ihr steht die Abteilung [...]]]></description>
			<content:encoded><![CDATA[<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; float: left; padding-top: 0px; border: 0px;" title="tools" src="http://www.mbaeker.de/wp-content/uploads/2011/06/tools.png" border="0" alt="tools" width="60" height="60" align="left" />In diesem Blog Post werde ich eine Funktion vorstellen, die anhand eines Abteilungsnamens eine Hierarchie von Organisationseinheiten in Enteo erstellt.</p>
<p>Nehmen wir an, dass die Abteilungen nach einem klaren Muster benannt sind. Jede Hierarchie wird durch einen Buchstaben dargestellt. Eine Abteilung ABC steht somit an dritter Stelle in der Hierarchie. Über ihr steht die Abteilung AB und darüber A.</p>
<p>Diese Hierarchie soll beim Provisionieren eines Computers nachgebildet werden. Der neu zu installierende PC aus der Abteilung ABC wird daher in die OU A\AB\ABC abgelegt werden.</p>
<p>Dies ermöglicht einen abteilungsweisen Rollout.</p>
<p>Die hier vorgestellte Funktion muss daher folgendes leisten:</p>
<ol>
<li>Überprüfen ob die OU schon existiert</li>
<li>Falls nicht, den übergebenen Abteilungsnamen zeichenweise zerlegen und bei jeder übergeordneten Abteilung ebenfalls überprüfen, ob diese bereits existiert</li>
<li>Die neue OU unter der übergeordneten Abteilung anlegen</li>
<li>Die Abteilungs-OU wieder zurückgeben.</li>
</ol>
<p><span id="more-539"></span></p>
<pre class="brush: powershell; title: ; notranslate">
function createOU
{param([string]$name,$ou)
    cd $ou.path
    $ouRT=Get-EmdbOrganizationalUnit -recurse $name
    if (-not $ouRT) {
        $name.toCharArray() | foreach {
            $ouname=$ouname + $_
            $oupath=$ou.path + &quot;\&quot; + $ouname
            $ou=Get-EmdbOrganizationalUnit -recurse $ouname
            if (-not $ou) {
                write-host &quot;Anlegen: &quot; $oupath
                $ou=new-EmdbOrganizationalUnit -Path $oupath
            }
        }
        $ou
    }
    else
    {
        $ouRT
    }
}
</pre>
<p>Folgendes passiert hier:</p>
<ul>
<li>Zeile 2: die Funktion benötigt als Übergabeparameter einen String mit dem Namen der Abteilung und ein Emdb-OrganisationalUnit Objekt unter dem die neuen OUs angelegt bzw. gesucht werden sollen</li>
<li>Zeile 3: Wechsel in den übergebenen Startpfad</li>
<li>Zeile 4: Suchen, ob es schon eine OU mit Namen gibt (unterhalb des Startpfads)</li>
<li>Zeile 5: Falls keine existiert, dann muss eine neue angelegt werden.</li>
<li>Zeile 6: den OU Namen in ein Zeichenarray zerlegen und jedes Zeichen einzelnd durchlaufen</li>
<li>Zeile 7+8: den aktuellen OU Namen in der Hierarchie wieder zusammensetzen und den aktuellen OU Pfad entsprechend erweitern</li>
<li>Zeile 9-10: kontrollieren, ob diese Hierarchiestufe schon existiert</li>
<li>Zeile 11: falls nicht, die OU mit New-EmdbOrganisationalUnit anlegen.</li>
<li>Zeile 15-19: Ein Powershell-Funktion gibt ein Ergebnis wieder zurück, indem es die ensprechenden Objekte einfach in die Pipe ausgibt</li>
</ul>
<p>Funktionen in Powershell werden etwas anders als in den meisten anderen Programmiersprachen aufgerufen. Parameter werden nicht durch Komma, sondern durch ein Leerzeichen getrennt. Diese Funktion lässt sich somit folgendermaßen aufrufen:</p>
<pre class="brush: powershell; light: true; title: ; notranslate">
$ou=Get-EmdbOrganizationalUnit -recurse &quot;Powershell&quot;
$ou=createOU &quot;ABC&quot; $ou
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.mbaeker.de/2011/06/enteo-und-automatisierung-teil-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Enteo V6+ und Automatisierung</title>
		<link>http://www.mbaeker.de/2011/06/enteo-v6-und-automatisierung/</link>
		<comments>http://www.mbaeker.de/2011/06/enteo-v6-und-automatisierung/#comments</comments>
		<pubDate>Thu, 23 Jun 2011 15:06:31 +0000</pubDate>
		<dc:creator>markus</dc:creator>
				<category><![CDATA[Deutsch]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Enteo]]></category>
		<category><![CDATA[Neuinstallation]]></category>
		<category><![CDATA[Powershell]]></category>
		<category><![CDATA[pxe]]></category>

		<guid isPermaLink="false">http://www.mbaeker.de/?p=522</guid>
		<description><![CDATA[Im Rahmen eines aktuellen Projektes darf ich mich ein bisschen mit Enteo beschäftigen. Im Kern basiert Enteo V6 auf WebServices. Das ist leider auch die einzige Schnittstelle, die meines Wissens vom Hersteller für Automatisierungen angeboten wird. Gerade in einem größeren Rollout Projekt ist Automatisierung überlebenswichtig (bzw. sinnvoll, damit man sich nicht zu sehr bei Drag&#38;Drop [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-532" title="notepad" src="http://www.mbaeker.de/wp-content/uploads/2011/06/notepad.png" alt="" width="32" height="32" />Im Rahmen eines aktuellen Projektes darf ich mich ein bisschen mit Enteo beschäftigen. Im Kern basiert Enteo V6 auf WebServices. Das ist leider auch die einzige Schnittstelle, die meines Wissens vom Hersteller für Automatisierungen angeboten wird.</p>
<p>Gerade in einem größeren Rollout Projekt ist Automatisierung überlebenswichtig (bzw. sinnvoll, damit man sich nicht zu sehr bei Drag&amp;Drop langweilt). Zum Glück  hat <a href="http://www.nwc-services.de/de/produkte/psxv6" target="_blank">NWC Services</a> diese Lücke erkannt und als Wrapper um die WebServices ein Powershell Modul erstellt.</p>
<p>Meine Testerfahrungen mit diesem Tool werde ich in diesem Blogeintrag und wahrscheinlich in ein paar weiteren anhand von Beispielen beschreiben.<br />
<span id="more-522"></span><br />
Die Software ist kostenpflichtig und muss anhand der vorhanden Clients im Enteo lizenziert werden. Beim Verbinden mit einem Enteo Server liest es die Clientanzahl aus und würde melden, wenn die lizenzierte Anzahl die tatsächliche um eine Toleranzgrenze hinaus überschreitet.</p>
<p>Das Powershell Snapin kann über</p>
<pre class="brush: powershell; light: true; title: ; notranslate">Add-PSSnapin NwcServices.BlsAdministration</pre>
<p>in einem Script geladen werden.</p>
<p>Eine Verbindung wird mittels</p>
<pre class="brush: powershell; light: true; title: ; notranslate">
$server=&quot;\\enteowebservice.server&quot;
New-PSDrive -Name emdb -psProvider BlsEmdb -Root $server</pre>
<p>aufgebaut werden.</p>
<p>Danach kann mittels</p>
<pre class="brush: powershell; light: true; title: ; notranslate">cd &quot;emdb:\rootdse&quot;</pre>
<p>auf das neu eingehängt Enteo Laufwerk gewechselt werden.</p>
<p>Ein einfacher Befehl wie</p>
<pre class="brush: powershell; light: true; title: ; notranslate">get-EmdbComputer –recurse &quot;computername&quot; </pre>
<p>sucht in allen Unterordnern nach einem Computer mit dem Namen computernamen und gibt das Objekt zurück.</p>
<p>Auch detailiertere Suchen sind problemlos möglich. Ein neuer Computer, der sich per PXE Boot gemeldet hat, steht zuerst nur mit seiner MAC-Adresse im System und ist ungemanaged. Um bei der Anpassung eines Rechners herauszufinden, ob ein gemanagetes oder ungemanagtes Objekt schon besteht, ist es am einfachsten nach der Initialen MAC-Adresse zu suchen.</p>
<pre class="brush: powershell; light: true; title: ; notranslate">
$filter=&quot;Computer.InitialMACAddress=&quot;+$Mac
$pc=Get-EmdbComputer -recurse -filter $filter
</pre>
<p>Hier zeigt sich meiner Meinung nach schon das Problem der Zwei-Hersteller-Strategie: NWC hat seine Powershell Kommandos in zwei Hilfedateien ausreichend gut beschrieben. Der Filter wird aber an die WebServices weitergereicht und ist somit nicht mehr in der Verantwortung des Powershell Herstellers, sondern bei Enteo. Bei Enteo habe ich aber keine passenden Beschreibungen gefunden, sondern habe mich herantasten müssen. Dazu habe ich den einen oder anderen möglichen Filter ausprobiert. Als Fehlermeldung kam dann die verwendete SQL Abfrage zurück. Mit dieser bin ich in die Datenbank gegangen und habe anhand des Datenbankaufbaues die passende Tabelle und Tabellenspalte herausgefunden. Kennt jemand einen eleganteren Weg?</p>
<p>Soweit im ersten Blog Eintrag. In den nächsten Posts möchte ich zeigen, wie Organisationseinheiten angelegt, Computerobjekte da hineinverschoben werden und Zuordnungen zu statischen Gruppen durchgeführt werden. Danach eventuell noch ein Exkurse wie man mit Powershell eine OS-Neuinstallation weitestgehen automatisieren kann (erkennen ob Rechner an ist, ob ein User angemeldet ist, Rechnerneustart oder Wake-on-Lan, OS-Installation anstoßen und überwachen).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbaeker.de/2011/06/enteo-v6-und-automatisierung/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>System Center Updates Publisher 2011</title>
		<link>http://www.mbaeker.de/2011/06/system-center-updates-publisher-2011/</link>
		<comments>http://www.mbaeker.de/2011/06/system-center-updates-publisher-2011/#comments</comments>
		<pubDate>Tue, 07 Jun 2011 17:51:09 +0000</pubDate>
		<dc:creator>markus</dc:creator>
				<category><![CDATA[Configuration Manager]]></category>
		<category><![CDATA[Deutsch]]></category>
		<category><![CDATA[Software Updates]]></category>
		<category><![CDATA[System Center]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[HAL]]></category>
		<category><![CDATA[SC Software Updates]]></category>
		<category><![CDATA[SCA]]></category>
		<category><![CDATA[SCCM]]></category>
		<category><![CDATA[SCUP]]></category>
		<category><![CDATA[update]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.mbaeker.de/2011/06/system-center-updates-publisher-2011/</guid>
		<description><![CDATA[Vor einigen Tagen hat Microsoft den System Center Updates Publisher (SCUP) in der Version 2011 veröffentlicht.&#160; Er beinhaltet einige interessante Neuerungen: &#160; Automatic Updates mit SCCM: zuerst wird ein Update nur als metadata veröffentlicht ohne das eigentliche Update herunterzuladen. Bei einer späteren Synchronisation ließt der SCUP aus dem SCCM (System Center Configuration Manager 2007 oder [...]]]></description>
			<content:encoded><![CDATA[<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="star" border="0" alt="star" align="left" src="http://www.mbaeker.de/wp-content/uploads/2011/06/star.png" width="64" height="64" />Vor einigen Tagen hat Microsoft den System Center Updates Publisher (SCUP) in der Version 2011 veröffentlicht.&#160; Er beinhaltet einige interessante Neuerungen:</p>
<p>&#160;</p>
<ul>
<li>Automatic Updates mit SCCM: zuerst wird ein Update nur als metadata veröffentlicht ohne das eigentliche Update herunterzuladen. Bei einer späteren Synchronisation ließt der SCUP aus dem SCCM (System Center Configuration Manager 2007 oder höher) aus, ob Clients dieses update benötigen. Ist dies der Fall, dann lädt er das komplette Update herunter und stellt es in den WSUS zur Verteilung bereit</li>
<li>Software update Cleanup Wizard: Ermöglicht es nicht mehr benötigte Updates zu bereinigen, indem sie auf expired gesetzt werden</li>
<li>…</li>
</ul>
<p>Herunterzuladen ist das Tool unter <a title="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=083f45ca-1ede-4f7a-be74-77854c3a9b01" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=083f45ca-1ede-4f7a-be74-77854c3a9b01">http://www.microsoft.com/downloads/en/details.aspx?FamilyID=083f45ca-1ede-4f7a-be74-77854c3a9b01</a>.</p>
<p>Eine gute Installationsanleitung ist hier zu finden: <a title="http://blogs.technet.com/b/jasonlewis/archive/2011/05/24/getting-started-with-updates-publisher-2011.aspx" href="http://blogs.technet.com/b/jasonlewis/archive/2011/05/24/getting-started-with-updates-publisher-2011.aspx">http://blogs.technet.com/b/jasonlewis/archive/2011/05/24/getting-started-with-updates-publisher-2011.aspx</a> (Keine Bilder, aber dafür alle wesentlichen Punkte enthalten, ich konnte problemlos nach ein “Upgrade” machen, daher werde ich es nicht nochmal hier beschreiben)</p>
<p>Meine Vorgehensweise zum Publizieren von Updates (nachdem die Konfiguration inkl. WSUS und SCCM abgeschlossen ist):</p>
<ul>
<li>Importieren der ausgewählten Kataloge</li>
<li>Auswahl aller Updates auf oberster Ebene</li>
<li>Publish drücken und dabei Automatic auswählen</li>
<li>WSUS Sync in der SCCM Konsole anstoßen</li>
<li>etwas warten, damit Clients einen Scan mit dem neuen Katalog ausgeführt haben (oder einen Scan auf einem oder mehreren Clients manuell starten)</li>
<li>Erneuten Sync im SCUP mit Automatic: jetzt lädt er die benötigten Updates herunter</li>
<li>Verteilung der benötigten Updates im SCCM wie normale Windows Updates</li>
</ul>
<ul>Insgesamt eine wirklich gelungene Aktualisierung mit der der SCUP endlich erwachsen wird.</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.mbaeker.de/2011/06/system-center-updates-publisher-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Re-Import VMs into Hyper-V</title>
		<link>http://www.mbaeker.de/2011/05/re-import-vms-into-hyper-v/</link>
		<comments>http://www.mbaeker.de/2011/05/re-import-vms-into-hyper-v/#comments</comments>
		<pubDate>Tue, 03 May 2011 16:57:21 +0000</pubDate>
		<dc:creator>markus</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Batchdatei]]></category>
		<category><![CDATA[scripts]]></category>
		<category><![CDATA[Snapshot]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.mbaeker.de/2011/05/re-import-vms-into-hyper-v/</guid>
		<description><![CDATA[Normaly you can only import a Virtual Machine (VM) into Hyper-V if you have exported it. If you lose your Hyper-V settings or have to import it into a new Hyper-V Server in case of a desaster recovery than you can use the steps descripted in this (and other) blog post: http://blogs.msdn.com/b/robertvi/archive/2008/12/19/howto-manually-add-a-vm-configuration-to-hyper-v.aspx The problem is [...]]]></description>
			<content:encoded><![CDATA[<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; float: left; padding-top: 0px; border: 0px;" title="tools" src="http://www.mbaeker.de/wp-content/uploads/2011/05/tools.png" border="0" alt="tools" width="99" height="99" align="left" />Normaly you can only import a Virtual Machine (VM) into Hyper-V if you have exported it. If you lose your Hyper-V settings or have to import it into a new Hyper-V Server in case of a desaster recovery than you can use the steps descripted in this (and other) blog post: <a title="http://blogs.msdn.com/b/robertvi/archive/2008/12/19/howto-manually-add-a-vm-configuration-to-hyper-v.aspx" href="http://blogs.msdn.com/b/robertvi/archive/2008/12/19/howto-manually-add-a-vm-configuration-to-hyper-v.aspx">http://blogs.msdn.com/b/robertvi/archive/2008/12/19/howto-manually-add-a-vm-configuration-to-hyper-v.aspx</a></p>
<p>The problem is that you have to handle many long pathes and cryptical GUIDs. I had to do that for a bunch of different VMs and being chronical lacy I created three batch files for it:</p>
<ol>
<li>importVM.cmd “GUID” “Path to Virtual Machine” creates the link and corrects the permissions on the link and the vm folder</li>
<li>importSnapshot.cmd “SnapshotGuid” “VMGuid” “Path to Snapshot” creates the snapshot link and the right permission.</li>
</ol>
<p>Not very impressiv? Well, the third batch files combines this two scripts:</p>
<ol>
<li>addMachine.cmd: Takes the basis path (the path where the sub-folder Virtual Machine, Snapshots exists) and extracts the VM-GUID, all Snapshots-GUIDs and the other pathes to automaticly create the links and permissions.</li>
</ol>
<p>So with one simple command (addMachine.cmd C:\ClusterStorage\Volume4\VM1) you can import the complete VM.</p>
<p>&#8212; addMachine.cmd &#8212;&#8212;</p>
<p><span id="more-454"></span></p>
<pre>setlocal ENABLEDELAYEDEXPANSION

set vmBasisPath=%~1

for /f %%a in ('dir "%vmBasisPath%\Virtual Machines\" /b /ad') do (
  set guid=%%a
)

echo %guid%
call "%~dp0importVM.cmd" %guid% "%vmBasisPath%"

for /f %%a in ('dir "%vmBasisPath%\Snapshots\" /b /ad') do (
  call "%~dp0importSnapshot.cmd" %%a %guid% "%vmBasisPath%\Snapshots"
)

endlocal</pre>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>&#8212; importVM.cmd &#8212;&#8212;&#8212;-</p>
<pre>setlocal

set guid=%~1
set vmPath=%~2
set xmlPath=%vmpath%\Virtual Machines\%guid%.xml

mklink "c:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines\%guid%.xml" "%xmlpath%"

Icacls "c:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines\%guid%.xml" /grant "NT VIRTUAL MACHINE\%GUID%":(F) /L
Icacls "%vmpath%" /grant "NT VIRTUAL MACHINE\%GUID%":(F) /T

Endlocal</pre>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>&#8212; importSnapshot.cmd &#8211;</p>
<pre>setlocal

set guid=%~1
set vmguid=%~2

rem C:\ClusterStorage\Volume4\mcFly2\Snapshots
set snapPath=%~3

if not EXIST "%snapPath%\%guid%.xml" goto ende

Mklink "C:\ProgramData\Microsoft\Windows\Hyper-V\Snapshots\%guid%.xml" "%snapPath%\%guid%.xml"
Icacls C:\ProgramData\Microsoft\Windows\Hyper-V\Snapshots\%guid%.xml /grant "NT VIRTUAL MACHINE\%vmguid%":(F) /L

:ende
Endlocal</pre>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbaeker.de/2011/05/re-import-vms-into-hyper-v/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Kleine Tools &#8211; gro&#223;e Wirkung</title>
		<link>http://www.mbaeker.de/2011/05/kleine-tools-groe-wirkung/</link>
		<comments>http://www.mbaeker.de/2011/05/kleine-tools-groe-wirkung/#comments</comments>
		<pubDate>Sun, 01 May 2011 08:41:39 +0000</pubDate>
		<dc:creator>markus</dc:creator>
				<category><![CDATA[Active Directory Domain Service]]></category>
		<category><![CDATA[Deutsch]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.mbaeker.de/2011/05/kleine-tools-groe-wirkung/</guid>
		<description><![CDATA[Gerade im AD-Umfeld finde ich die Tools von Joe Richards (http://joeware.net) immer wieder großartig. Mit ihnen lassen sich durch geschickte Verkettungen sehr schnell Aufgaben lösen. Dabei ist der Ansatz ähnlich wie bei Unix, d.h. ein Tool hat ein Aufgabenspektrum (z.B. finden, ändern, löschen, …) – die Tools wiederum können über die Std-out Ausgabe gekoppelt werden. [...]]]></description>
			<content:encoded><![CDATA[<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="lock_open" border="0" alt="lock_open" align="left" src="http://www.mbaeker.de/wp-content/uploads/2011/05/lock_open.png" width="75" height="75" />Gerade im AD-Umfeld finde ich die Tools von Joe Richards (<a href="http://joeware.net">http://joeware.net</a>) immer wieder großartig. Mit ihnen lassen sich durch geschickte Verkettungen sehr schnell Aufgaben lösen. Dabei ist der Ansatz ähnlich wie bei Unix, d.h. ein Tool hat ein Aufgabenspektrum (z.B. finden, ändern, löschen, …) – die Tools wiederum können über die Std-out Ausgabe gekoppelt werden. Wer also nicht immer gleich die Power Shell starten will, sollte sich diese Programm verlinken.</p>
<p>Ein Beispiel, um die Anzahl der Mitglieder einer Gruppe zu zählen:</p>
<blockquote><p>adfind -f &quot;samaccountname=GRUPPENNAME&quot; member -list | adfind -c</p>
<p>AdFind V01.41.00cpp Joe Richards (joe@joeware.net) February 2010</p>
<p>Using server: dc01:389</p>
<p>Directory: Windows Server 2008</p>
<p>201 Objects returned</p>
</blockquote>
<p>In Worten: Suche ein Objekt mit dem NT4-Namen GRUPPENNAME und gibt das Attribut member als Liste aus. Die Rückgabe wird erneut an adfind gegeben, das die Anzahl zählt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbaeker.de/2011/05/kleine-tools-groe-wirkung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ninite&#8211;Tool zur Installation von Standardsoftware</title>
		<link>http://www.mbaeker.de/2011/03/ninitetool-zur-installation-von-standardsoftware/</link>
		<comments>http://www.mbaeker.de/2011/03/ninitetool-zur-installation-von-standardsoftware/#comments</comments>
		<pubDate>Sun, 20 Mar 2011 19:12:48 +0000</pubDate>
		<dc:creator>markus</dc:creator>
				<category><![CDATA[Deutsch]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[Neuinstallation]]></category>
		<category><![CDATA[Ninite]]></category>
		<category><![CDATA[Softwarepaket]]></category>
		<category><![CDATA[thunderbird]]></category>

		<guid isPermaLink="false">http://www.mbaeker.de/?p=422</guid>
		<description><![CDATA[Es gibt mittlerweile mehrere verschiedene Anbieter dieser Softwareart: Ein Programm, dass automatisiert bestimmte Standardsoftware wie Firefox, Thunderbird, VLC, Skype usw. installiert. Ninite.com ist eines davon. Auf der Webseite werden die gewünschten Programme ausgesucht und der Download des Tools gestartet. Dieses installiert dann automatisch die ausgewählten Softwarepakete mit angepassten Einstellungen. Die Installationen laufen jeweils silent ab. [...]]]></description>
			<content:encoded><![CDATA[<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="icon-20" border="0" alt="icon-20" align="left" src="http://www.mbaeker.de/wp-content/uploads/2011/03/icon-201.png" width="64" height="64" />Es gibt mittlerweile mehrere verschiedene Anbieter dieser Softwareart: Ein Programm, dass automatisiert bestimmte Standardsoftware wie Firefox, Thunderbird, VLC, Skype usw. installiert.</p>
<p><a href="http://Ninite.com" target="_blank">Ninite.com</a> ist eines davon. Auf der Webseite werden die gewünschten Programme ausgesucht und der Download des Tools gestartet. Dieses installiert dann automatisch die ausgewählten Softwarepakete mit angepassten Einstellungen. Die Installationen laufen jeweils silent ab. Browsertoolbars und ähnliche unnütze Ergänzungen werden jeweils abgewählt.</p>
<p>Das Programm erkennt, wenn die Software bereits installiert ist und aktualisiert diese bzw. überspringt es, wenn die neueste Version vorhanden ist.</p>
<p>Insgesamt eine gute Hilfe, um nach einer Neuinstallation des Betriebssystem schnell seine Standardsoftware zu installieren bzw. zu kontrollieren, ob die neueste Version installiert ist.</p>
<p>Link: <a href="http://ninite.com">http://ninite.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbaeker.de/2011/03/ninitetool-zur-installation-von-standardsoftware/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Massenhafte Anpassung von DHCP Optionen</title>
		<link>http://www.mbaeker.de/2010/06/massenhafte-anpassung-von-dhcp-optionen/</link>
		<comments>http://www.mbaeker.de/2010/06/massenhafte-anpassung-von-dhcp-optionen/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 17:25:25 +0000</pubDate>
		<dc:creator>markus</dc:creator>
				<category><![CDATA[Active Directory Domain Service]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.mbaeker.de/?p=332</guid>
		<description><![CDATA[Möchte man auf die schnelle bei einem Windows 2008 DHCP Server in jedem Scope DHCP Options anpassen, so lässt sich dies mit ein paar Zeilen Batchcode erledigen: &#160; for /f &#34;usebackq skip=4&#34; %%a in (`netsh dhcp server \\DHCPSERVER show scope`) do ( netsh dhcp server \\DHCPSERVER scope %%a set optionvalue 006 IPADDRESS ip.des.dns.servers ip.des.zweiten.dns netsh [...]]]></description>
			<content:encoded><![CDATA[<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="source" border="0" alt="source" align="left" src="http://www.mbaeker.de/wp-content/uploads/2010/06/source.png" width="64" height="64" /> Möchte man auf die schnelle bei einem Windows 2008 DHCP Server in jedem Scope DHCP Options anpassen, so lässt sich dies mit ein paar Zeilen Batchcode erledigen:</p>
<p>&#160;</p>
<blockquote><p>for /f &quot;usebackq skip=4&quot; %%a in (`netsh dhcp server <a href="file://\\DHCPSERVER">\\DHCPSERVER</a> show scope`) do (</p>
<p>netsh dhcp server <a href="file://\\DHCPSERVER">\\DHCPSERVER</a> scope %%a set optionvalue 006 IPADDRESS ip.des.dns.servers ip.des.zweiten.dns</p>
<p>netsh dhcp server <a href="file://\\DHCPSERVER">\\DHCPSERVER</a> scope %%a set optionvalue 015 STRING dns.name</p>
<p>)</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.mbaeker.de/2010/06/massenhafte-anpassung-von-dhcp-optionen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

