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&Drop machen, oder aber über ein kleines Powershell Skript:
param([string]$sourcename="source", [string]$targetname="target")
Add-PSSnapin NwcServices.BlsAdministration
$server="\\enteoserver"
New-PSDrive -Name emdb -psProvider BlsEmdb -Root $server
cd "emdb:\rootdse"
$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 "Cloning group " $_.Name " from $sourcename to $targetname"
$_.addMember($target)
}
}
else
{
write-host "Target $targetname cannot be found!"
}
}
else
{
Write-host "Source $sourcename cannot be found!"
}
Das Skript selber ist recht einfach aufgebaut. Es wird der Quellcomputer gesucht und das Objekt abgefragt, welche Verbindungen es hat.
Diese Verbindungen werden nach dem Typ statische Gruppen gefiltert. Über diese Gruppen wird iteriert und jeweils dem Zielobjekt hinzugefügt.
Um das Powershellskript einfach aufzurufen hier noch eine Batch-Datei:
@echo off
set /p source=Bitte Quellrechnernamen eingeben:
set /P target=Bitte Zielrechnernamen eingeben:
powershell "%~dp0clonecomputer.ps1" -sourcename "%source%" -targetname "%target%"
pause
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:
@echo off
set samaccountname=%~1
for /f "tokens=* usebackq" %%a in (`AdFind.exe -f "samaccountname=%samaccountname%" profilePath /list`) do (
set profilePath=%%a
)
for /f "delims=<> usebackq tokens=1,2,3,4,5" %%a in (`dfsutil diag viewdfspath %profilepath%`) do (
if NOT %%e.==. set profilePath=%%e
)
echo %profilePath%
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 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.
Innerhalb einer anderen Batch-Datei kann diese einfach per call getprofilepath.cmd SAMACCOUNTNAME aufgerufen und die Variable profilePath später weiterverwendet werden.
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 AB und darüber A.
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.
Dies ermöglicht einen abteilungsweisen Rollout.
Die hier vorgestellte Funktion muss daher folgendes leisten:
Überprüfen ob die OU schon existiert
Falls nicht, den übergebenen Abteilungsnamen zeichenweise zerlegen und bei jeder übergeordneten Abteilung ebenfalls überprüfen, ob diese bereits existiert
Die neue OU unter der übergeordneten Abteilung anlegen
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&Drop langweilt). Zum Glück hat NWC Services diese Lücke erkannt und als Wrapper um die WebServices ein Powershell Modul erstellt.
Meine Testerfahrungen mit diesem Tool werde ich in diesem Blogeintrag und wahrscheinlich in ein paar weiteren anhand von Beispielen beschreiben. Read more…
Vor einigen Tagen hat Microsoft den System Center Updates Publisher (SCUP) in der Version 2011 veröffentlicht. Er beinhaltet einige interessante Neuerungen:
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
Software update Cleanup Wizard: Ermöglicht es nicht mehr benötigte Updates zu bereinigen, indem sie auf expired gesetzt werden
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:
importVM.cmd “GUID” “Path to Virtual Machine” creates the link and corrects the permissions on the link and the vm folder
importSnapshot.cmd “SnapshotGuid” “VMGuid” “Path to Snapshot” creates the snapshot link and the right permission.
Not very impressiv? Well, the third batch files combines this two scripts:
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.
So with one simple command (addMachine.cmd C:\ClusterStorage\Volume4\VM1) you can import the complete VM.
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. Wer also nicht immer gleich die Power Shell starten will, sollte sich diese Programm verlinken.
Ein Beispiel, um die Anzahl der Mitglieder einer Gruppe zu zählen:
adfind -f "samaccountname=GRUPPENNAME" member -list | adfind -c
AdFind V01.41.00cpp Joe Richards (joe@joeware.net) February 2010
Using server: dc01:389
Directory: Windows Server 2008
201 Objects returned
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.
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. Browsertoolbars und ähnliche unnütze Ergänzungen werden jeweils abgewählt.
Das Programm erkennt, wenn die Software bereits installiert ist und aktualisiert diese bzw. überspringt es, wenn die neueste Version vorhanden ist.
Insgesamt eine gute Hilfe, um nach einer Neuinstallation des Betriebssystem schnell seine Standardsoftware zu installieren bzw. zu kontrollieren, ob die neueste Version installiert ist.
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:
for /f "usebackq skip=4" %%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 dhcp server \\DHCPSERVER scope %%a set optionvalue 015 STRING dns.name
Ich arbeite als Systemingenieur in diversen Kundenprojekten bei der TechniData IT Service GmbH, die u.a. Standorte in Karlsruhe und Markdorf unterhält.