Mittwoch, 18. Januar 2012

DSM 7: Erstellen einer WinPE Boot-CD

Die DSM 7 kann mit Bordmitteln bereits einen Bootfähigen USB Stick erzeugen. Das ist besonders für 2nd Level bzw. OnSite Supporter durchaus schonmal eine große Hilfe. Wenn man jetzt jedoch keine USB Sticks nutzen kann, oder ein ISO File benötigt, ist das aber auch kein Beinbruch, denn der Weg hierhin ist denkbar einfach. Folgendes wird dafür benötigt:

Eine Arbeitsstation mit Zugriff auf die DSM 7
Ein installiertes WAIK f. Windows 7
Etwas freien Speicherplatz

Schritt 1: Ein freies Laufwerk
Der USB Stick Assistent von der DSM braucht zum erstellen des USB Sticks einen Laufwerksbuchstaben. Die Angabe eines Verzeichnisses klappt hier leider nicht. Das ist jedoch nicht schlimm, da man sich ganz einfach und schnell ein solches erzeugen kann.
  1. Zuerst einmal legt man sich ein leeres Verzeichnis an. Nehmen wir mal c:\temp.
  2. Danach erzeugen wir ein virtuelles Laufwerk mittels "subst z: c:\temp"
Es ist nun ein Laufwerk mit dem Buchstaben Z: im Explorer sichtbar. Dieses Laufwerk verweist auf den Ordner c:\temp. Damit ist unser Verzeichnis schonmal Vorhanden.

Schritt 2: USB Stick Assistenten ausführen
Jetzt die DSM Konsole starten und zum gewünschten Boot Environment durchklicken. Sobald dieses gefunden wurde, Rechtsklick drauf und den Menüpunkt "Bootfähigen USB Stick erstellen" auswählen. Damit wird der entsprechende Assistent gestartet. Als Ziellaufwerk jetzt einfach "Z:\" eingeben und OK klicken. Die Daten werden jetzt in das Verzeichnis geschrieben.

Schritt 3: Verzeichnis aufräumen
Es werden nicht alle Dateien benötigt. Daher kann alles bis auf das Verzeichnis und die Datei "bootmgr" gelöscht werden.

Schritt 4: ISO erstellen
Als letzten Schritt muss nun noch der Bootloader vervollständigt und das ISO File erstellt werden. Hierzu brauchen wir das WAIK, genauer gesagt die Eingabeaufforderung der Bereitstellungstools.
Im Startmenü nun aus dem Ordner WAIK die Eingabeaufforderung starten. Wichtig ! Sie muss als Administrator gestartet werden, sonst klappts nicht mit der Erstellung. Wenn die Eingabeaufforderung dann offen ist, den folgenden Befehl eingeben:

"oscdimg -n -m -o -bx86\boot\etfsboot.com c:\temp c:\boot.iso"

Der Befehl bewirkt, dass das Tool oscdimg den Bootloader vervollständigt und ein bootfähiges ISO erstellt. Nicht von dem "x86" verwirren lassen, der bootloader ist sowohl für x86 als auch x64 Gleich.

Wir haben nun also ein bootfähiges WinPE welches wir für virtuelle Maschinen einbinden können. Wenn CDs benötigt werden kann das ISO ganz einfach gebrannt werden.

Dienstag, 10. Januar 2012

Windows 7 Setup Log File Locations

Zum Troubleshooting von Windows 7, Server 2008 (R2) und Vista Installationen, kann es hilfreich sein, die Orte zu kennen, an denen die Logs abgelegt werden. In dem Nachfolgenden Link sind die Ablageorte für die jeweiligen Logs angegeben:

http://support.microsoft.com/kb/927521

DSM7: Ändern von Client-Related Schema Informations

in der v6 und der DSM 7 (7.0.0) war es bisher so, dass beim Anlegen einer Gruppe von Schema Erweiterungen festgelegt werden musste, wie diese Informationen befüllt werden. Zur Auswal standen "Managed" und "Client".

"Managed" bewirkte, dass die Werte in der Schema Erweiterung ausschliesslich über die Konsole befüllt werden konnten.
"Client" wiederum bewirkte, dass die Änderungen ausschliesslich durch Nutzung des Befehls "ModifyObjectProperty" geändert werden konnten.

Mit dem Hotfix 1 (7.0.1) wurde nun in der DSM 7 eine Möglichkeit geschaffen, dieses Verhalten dahingehend abzuändern, dass es nun Möglich ist, Clientseitig änderbare Einstellungen ebenfalls über die Konsole zu Verändern. Ermöglicht wird dies durch einen neuen Kontextmenü Punkt, der da lautet "Clientseitig änderbare benutzerdefinierte Einstellungen ändern" (was für ein Zungenbrecher !). Hierzu das gewünschte Computer- bzw. Userobjekt markieren und dann das Kontext Menü öffnen. Der Punkt sollte dann zwischen "Kopieren" und "Eigenschaften" zu sehen sein. Wenn dieser Menüpunkt ausgewählt wird, öffnet sich ein neues Fenster, in welchem Alle Clientseitigen Schema Erweiterungen des Objektes aufgelistet sind. Im Unterschied zur Anzeige in den Eigenschaften, sind diese jetzt jedoch Veränderbar.

Anwendungsbeispiel:
Ein Kunde von Mir stellt auf diese Art und Weise dem Helpdesk ein lokales Notfallpasswort für jeden Rechner zur Verfügung. Weiterhin gibt es ein Feld, welches angibt, ob das Passwort an den Benutzer herausgegeben wurde. Der Helpdesk kann nun über das Eigenschaftenfeld das Kennwort auslesen und dem Benutzer per Telefon mitteilen. Wird das Passwort als herausgegeben vermerkt, registriert das ein Job Script und es wird beim nächsten Durchlauf automatisch ein neues Zufallspasswort auf dem Rechner generiert und dieses wieder in die Schema Erweiterung geschrieben.

Donnerstag, 5. Januar 2012

Nützliche iCal Kalender zum Abonnieren

Wer viel mit iCal arbeitet, wünscht sich schnell ein paar zusätzliche Anzeigen. Wie z.B. Feiertage, Wochennummern etc.

Hier mal ne kleine Linksammlung

Kalenderwochen Anzeigen
Kalenderwochen für iCal

(Gesetzliche) Feiertage und Mehr, auswählen, Link erstellen, abonnieren, Fertig.
iFeiertage

Schulferien im iCal Format, aussuchen und abonnieren
Schulferien.org

Mittwoch, 21. Dezember 2011

Infos für Telekom Geschädigte

Ich versuche aktuell, wieder zur Telekom zurück zu Wechseln (Ja, manch einer wird mich für Verrückt halten, aber das hat schon seine Gründe). Wie nicht anders zu erwarten, lief das ganze Thema bisher alles andere als Zufriedenstellend.

Für alle, die mit dem Verein Stress haben, hier ein paar Nützliche Informationen:

Telefonnummer Beschwerde Team: 0228/1810

Das ist die Nummer der Vermittlung in der Telekom Zentrale in Bonn. Einfach dem Gesprächspartner sagen, man habe eine Beschwerde. Dann wird man ans Service Team weiterverbunden.

Mailadresse vom Vorstands Service:
Die nächste Stufe wäre der Vorstandsservice. Per Mail ist dieser unter "V-Support@telekom.de" erreichbar.

Allgemeiner Tipp für Hotline Geschädigte:

Die Mitarbeiter an der allgemeinen Hotline sind in der Regel Arme Schweine, die praktisch keinerlei Berechtigungen haben. Wenn es um speziellere Themen geht, z.B. Komplettwechsel, Rechnungsthemen etc., wird man in der Regel an ein entsprechendes Serviceteam weiterverbunden. Da diese Serviceteams jedoch nicht von ausserhalb erreichbar sind, muss man jedesmal die Odyssee über die reguläre Hotline über sich ergehen lassen. Es gibt jedoch eine Möglichkeit, den ganzen Stress vermeiden zu können:

UNBEDINGT den Namen des Ansprechpartners beim Serviceteam notieren. Die Kollegen an der Hotline können demjenigen nämlich eine Mail mit der Bitte um Rückruf schicken. Das setzt natürlich Voraus, dass der entsprechende Mitarbeiter auch gewillt ist, dies zu tun. Aber wenn man den Namen schonmal hat, kann man natürlich bei der Beschwerdestelle sich explizit über diese Person beschweren...

Montag, 19. Dezember 2011

DSM 7: Ausschluß von SMBIOS GUIDs u. MAC Adressen

Die DSM 7 liest eine ganze Menge an Informationen aus einem System aus und speichert diese in seiner SQL Datenbank. Das ist Grundsätzlich notwendig, damit all die Coolen Funktionen auch so funktionieren, wie Sie sollen.

SMBIOS GUID
Jetzt kann es aber durchaus mal vorkommen, dass ein Rechner ( in der Regel NoName Geräte), manchmal Informationen enthält, die nicht Eineindeutig sind. Ein gutes Beispiel hierfür ist die SMBIOS GUID, welche fest auf dem Motherboard hinterlegt ist. Bei Markenherstellern ist diese GUID Eineindeutig, sprich es gibt Sie tatsächlich nur 1 einziges Mal. Hersteller von NoName Geräten machen sich diese Mühe oftmals nicht. Hier hat dann plötzlich eine ganze Charge die gleiche ID. Da dies zu Problemen in der DSM 7 führen kann, müssen die betroffenen GUID Einträge ausgeschlossen werden. Doch dazu später mehr.

Initial MAC Adress
Wenn sich ein Client das erste Mal an der DSM 7 meldet, wird normalerweise ersteinmal die MAC Adresse der verwendeten Netzwerkkarte als Computername hinterlegt. Wird der Rechner jedoch nicht über PXE installiert und der DSM Client statt dessen im Windows installiert, sind pot. mehrere Netzwerkkarten im System bekannt, von denen jede eine eigene MAC Adresse besitzt. Bei modernen Notebooks können das mittlerweile bis zu 5 od. mehr MAC Adressen sein (LAN, WLAN, Bluetooth, UMTS, VPN) In diesem Fall kann es passieren, dass die falsche MAC Adresse an die DSM 7 übermittelt wird. Auch hier muss dann mit Ausschlüssen gearbeitet werden.

Ausschliessen von Werten
SMBIOS GUIDs und MAC Adressen können über eine spezielle Datei im sog. Blacklisting Verfahren ausgeschlossen werden. Die DSM schreibt diese dann nicht in die SQL Datenbank. Die hierfür notwendige Datei muss in folgendem Pfad liegen:

file://%25nishare%25/SSI/Extern$

Wer mittels Explorer auf diesen Ordner navigiert, wird eine Datei mit dem Namen "InvalidValues.ini.sam" stoßen. Hierbei handelt es sich um eine Beispieldatei, welche von Frontrange mitgeliefert wird. Es empfiehlt sich, eine Kopie der Datei anzufertigen und diese dann in "InvalidValues.ini" umzubenennen. Sobald dies geschehen ist, werden die Dort gespeicherten Einträge wirksam

Donnerstag, 17. November 2011

Entfernen von COM-Add-In's bei Outlook 2003

Das automatisierte entfernen von COM-Add-In's bei Outlook 2003 stellt eine Herausforderung dar, da es gilt, Fehlermeldungen beim nächsten Outlook Start zu vermeiden. Die Lösung hierfür ist eigentlich ganz Simpel. Da Sie jedoch nirgendwo Dokumentiert ist, ist es jedoch sehr schwer darauf zu kommen. Doch dazu später mehr. Erstmal ein kurzer Ausflug in die allgemeine Funktionsweise.

Prinzipiell kann Outlook 2003 relativ einfach um neue COM-Add-Ins erweitert werden. Hierfür ist es lediglich notwendig, eine *.ecf Datei (welche die entsprechenden Konfig Infos enthält) in den Ordner "%ProgramFilesDir%\Microsoft Office\Office11\Addins" abzulegen. Beim nächsten Start einer Office Anwendung wird dieser Ordner gelesen und das Addin dann entsprechend installiert. Im Falle von Outlook wird das Add-In ebenfalls noch im COM-Add-In Manager mit aufgenommen. Der Benutzer kann dort einzelne Add-Ins gezielt deaktivieren. Man erreicht das Menü über folgdenden Weg: Extras > Optionen > Weitere > Erweiterte Optionen > Add-In-Manager. Wichtig an dieser Stelle ist es, dass diese Informationen für Jeden Benutzer getrennt in einer Datei namens extend.dat abgespeichert werden. Leider ist verhält es sich so, dass diese Datei nur additiv angepasst wird. Das bedeutet, wenn Outlook beim Start feststellt, dass ein neues Add-In hinzugekommen ist, wird dieses in die Liste mit aufgenommen. Wenn nun aber ein Add-In entfernt wird, wird die Liste bzw. die Datei nicht angepasst. Statt dessen wird versucht, das, nun nicht mehr existierende, Add-In mit den gespeicherten Informationen zu laden. Dieses Verhalten führt dann dazu, dass beim erneuten Start von Outlook eine Fehlermeldung erscheint, die Erweiterung könne nicht geladen werden.

Der Eine oder Andere wird an dieser Stelle nun schon auf die Lösung des Problems gestossen sein, für Alle die noch nicht soweit sind, hier die Lösung: Wie wir Vorher ja bereits festgestellt hatten, werden die Add-Ins bei jedem Start neu eingelesen. Aus diesem Grund ist es notwendig, die extend.dat jedes einzelnen Benutzers auf einem System zu löschen, nachdem das Add-In deinstalliert wurde. Die Datei liegt im Verzeichnis "%UserProfile%\LocalSettings\ApplicationData\Microsoft\Outlook".

Donnerstag, 27. Oktober 2011

Zufallspasswort generieren und zuweisen

Das nachfolgende Script wurde aufgrund der Anforderung geschrieben, dass das Passwort des lokalen Administrators automatisiert auf allen Konzernclients auf ein Zufallspasswort geändert werden muss. Desweiteren muss dieses Passwort zurück übergeben werden, damit es automatisiert in der DSM 7 weiterverarbeitet werden kann.
Es wurde hier der Umweg über die Registry gewählt, weil die Basis ein W7 x64 Host ist, auf welchem die PowerShell Integration der DSM 7 derzeit leider nicht funktioniert.

#Script created by: Markus Zierer
#Script created at: 27.10.2011
#
#PowerShell Script to change the Password of the local User "Administrator"
#to a Random Value. Also write the Password back to Registry for further
#Processing.
#
#Prepare Variables
$computer
$user
= $env:COMPUTERNAME = "administrator"#generate Random Password$rand = New-Object System.Random1..15 | ForEach { $NewPassword = $NewPassword + [char]$rand.next(33,127) }#Set local Admin Password$de = [adsi]"WinNT://$computer/$user,user"$de.SetPassword($NewPassword)$de.SetInfo()#Hand Over Password to NetInstall as VariableSet-ItemProperty -Path "HKLM:\Software\Wow6432Node\Kunde\Software" -Name "LocalAdminPassword" -Value $NewPassword

Mittwoch, 26. Oktober 2011

DSM 7 Cmdlets und Syntax

Seit der DSM 7 ist es nun ebenfalls möglich, per "CallScript" Befehl, auch Powershell Scripts (.ps1) auszuführen. Durch das ausführen per CallScript besteht ausserdem die Möglichkeit, auf bestimmte Cmdlets zuzugreifen. Diese Methode ist sehr ähnlich zu der bisherigen Variante, auf Variablen aus VBScript heraus zugreifen zu können, ist aber gleichzeitig viel einfacher, da die Syntax von PowerShell wesentlich einfacher lesbar ist. Hier nun die einzelnen Cmdlets sowie eine kurze Beschreibung zu Ihrer Verwendung:

Get-NIVar
Syntax: Get-NIVar "NIVariable"

Set-NIVar
Syntax: Set-NIVar "NIVariable" "VariablenInhalt"

Write-NIReport
Syntax: Write-NIReport "Text"
Hier wird eine Infozeile ins aktuelle NI Logfile geschrieben

Set-NIError
Syntax: Set-NIError "Text"
Hier wird ein Fehlereintrag ("E") im Logfile erzeugt.

Get-NiInstParam
Dieses Cmdlet wird direkt so benutzt. Es liest ALLE definierten Installationsparameter für das aktuelle Projekt aus und schreibt diese in ein Array (welches dann per PowerShell weiter bearbeitet werden kann)

Freitag, 14. Oktober 2011

Disable Machine Password Change

Bei der Nutzung von Virtuellen Maschinen und Snapshots zur Entwicklung im SW Deployment Umfeld, gibt es ein wichtiges Detail zu beachten. Die Passwortänderung des Computerkontos in der Domäne.
Standardmässig ist jede Windows Maschine so konfiguriert, dass das Passwort des Computerkontos in der Domäne automatisch nach einer bestimmten Zeit geändert wird. Bei der regulären Nutzung von Rechnern und VDIs stellt das kein Problem dar. Bei der Nutzung von Snapshots jedoch, läuft man irgendwann in das Problem hinein, dass der Client das Passwort geändert hat, während im Snapshot noch der alte Hashwert enthalten ist. Die Folge ist, dass der Client aus der Domäne fliegt.

Dieses Problem kann man jedoch dadurch umgehen, dass man die Änderung des Passwortes in der Registry deaktiviert, BEVOR man den Snapshot erstellt. Der entsprechende Key ist wie folgt:

HKLM\System\CurrentControlSet\Services\NetLogOn\Parameters

Hier nun den Value "DisablePasswordChange" von 0 auf 1 abändern, und schon wird das Computerpasswort nicht mehr geändert.

Nutzung von Variablen in DSM 7

Neu in der DSM 7 ist die Möglichkeit, Systemweit Variablen verwalten zu können. Um auf diese Variablen wiederum zugreifen zu können, müssen diese Variablen aber auch anders referenziert werden. Die Varianten, wie Sie aus enteo 5.x und v6.x bekannt waren, funktionieren jetzt nur noch für sog. Script Interne Variablen, sprich Variablen, welche innerhalb eines NetInstall Scriptes gesetzt werden. Möchte man nun auf die restlichen Variablen Zugreifen, muss man diese über ein spezielles Namensscheck ansprechen.
Die Gute Nachricht ist, man muss das ganze Schema nicht permanent im Kopf behalten. Wenn man Anfängt eine Variable zu schreiben, also ein "%" Zeichen schreibt, erscheint wie bisher auch, eine Vorschlagsliste mit den aktuell Angezeigten Variablen. Wählt man hier nun eine Gruppe aus (z.B. CurrentComputer) und bestätigt die Auswahl mit der Eingabetaste, wird automatisch eine Auswahl aus der nächsten Gruppe angezeigt. Das ganze funktioniert so lange, bis die Variable komplett ist. Selbstverständlich kann man die ganzen Werte auch von Hand eintragen, sofern man die Werte im Kopf hat.
Hierüber lassen sich nicht nur selbstdefinierte Variablen nutzen, sondern man kann auch andere Werte Abfragen. Als Beispiel lassen sich hier Werte aus dem Basic Inventory nennen.

Möchte man nun auf dem aktuellen Computer eigene Variablen nutzen, sieht die Syntax wie folgt aus:

%CurrentComputer.Var.<GroupTag>.<VariableName>%

Mittwoch, 29. Dezember 2010

Delete specific files

This script was developed to delete files with a specific extension inside a given folder. In this case, installation logs from MS Patch / Hotfix Installations will be deleted. This script can easily be adopted to delete other files also.

DIM fso, f, fc, file
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder("c:\winxp")
Set fc = f.Files
For Each file in fc
  if strcomp(right(file.name,4),".log",1)=0 then
    fso.DeleteFile("c:\winxp\" & file.name)
  end if
Next

Delete specific folders

This script is designed to search and delete temporary folders, which are created by MS Patch / Hotfix Installations. The script can be easily adopted to be used for other folders also. This script will find and delete hidden and system folders also, so be careful when using it.
The script uses the Windows Scripting Host functions.

DIM fso, folder, subflds, fld
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder("c:\winxp")
Set subflds = folder.SubFolders
For Each fld in subflds
  if strcomp(left(fld.name,1),"$",1)=0 then
    fso.DeleteFolder("c:\winxp\" & fld.name)
  end if
Next

Donnerstag, 2. Dezember 2010

Enable TimeMachine for Unsupported Drives

By Default, TimeMachine only supports Network Drives capable of the "afp" protokoll. The problem is, that these drives often are more expensive then regular one's dedicated for use in Windows Networks. MacOS X Supports "smb" protokoll too, but TimeMachine would not accept those drives by default. Following there is a short guide, how to enable that support. You will need the Terminal Console, so open it an continue:

1. Enable use of unsupported drives

defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1

2. Create Sparsebundle File

hdiutil create -size 200G -fs HFS+J -type SPARSEBUNDLE "MACNAME_MAC-adress.sparsebundle"

where:
-size defines Max. space used for Backups
MACNAME is the name of your Mac e.g. iMac
MAC-Adress is the MAC adress of your Ethernet Card

3. Mount Share and copy Sparsebundle File

Now mount the NAS Share to your Mac and copy the sparsebundle file onto.

Take care the share is mounted always and start TimeMachine. Now you're Done.

Dienstag, 16. November 2010

Enable / Disable Client Side Caching (Offline Files)

On Windows System, the function "Client Side Caching" can be used. This funktion caches a definded file and folder structure to the local harddisk. This aims to support laptop users when they are not connected to their (corporate) LAN. Because the whole topic is quite difficult, there would no deeper explaination at this point. I assume, you know what you're doing. Here is just a list of used RegKeys:

Key:
HKLM\Software\Microsoft\Windows\ CurrentVersion\NetCache

Value:
Enabled

String Value:
1 = Active
0 = Disabled

P.S.This setting can also be controlled using a GPO. In this case,the GPO overrides this RegKey.

Clear Pagefile at Shutdown

Unter Windows existiert die Funktion "ClearPageFileAtShutdown". Es ist ein weit verbreiteter Irrglaube, dass hierdurch das Pagefile beim herunterfahren des Systems gelöscht würde. Ein genaues Lesen des entsprechenden Originalartikels in der MS KB (auf englisch !), fördert dann zutage, dass die Verwendung des Begriffes "Clear" nicht löschen, im Sinne eines physikalischen entfernens der Datei, bezeichnet, sondern statt dessen ein Überschreiben der gesamten Datei mit Nullen. Je mehr Hauptspeicher sich in dem betroffenen System befindet, desto größer die Auslagerungsdatei und umso länger benötigt das System, bis die gesamte Datei einmal komplett überschrieben wurde. Die mag in Zeiten von 256 MB RAM noch erträglich gewesen sein, aber da mittlerweile mehrere GB RAM Standard sind, ergibt das eine spürbare Verlängerung der Shutdownzeit. Daher sollte die betreffende Funktion möglichst NICHT verwendet werden.

Key:
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management

Value:
ClearPageFileAtShutdown

Wert:
1 = An
0 = Aus

Freitag, 5. November 2010

Remove Network Printers

The following script has been written to disconnect all mapped Network Printers on a client computer. There are two examples. One using WMI and the other is using WSH Methods. Both are working. It's just a question of personal preference which one is chosen.

WSH Method
'Remove all Network printers but not local printers
Set WshNetwork = WScript.CreateObject("WScript.Network")
Set Printers = WshNetwork.EnumPrinterConnections
For i = 0 to Printers.Count - 1 Step 2
    If Left(ucase(Printers.Item(i+1)),2) = "\\" Then
        WScript.Echo Printers.Item(i+1)
        WSHNetwork.RemovePrinterConnection Printers.Item(i+1)
    End IF
Next

WMI Method
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters =  objWMIService.ExecQuery _
    ("Select * from Win32_Printer Where Network = TRUE")
For Each objPrinter in colInstalledPrinters
    'objPrinter.Delete_
 Wscript.Echo objPrinter.Name
Next

Freitag, 10. September 2010

Search for specific Files and write to INI

This script was developed as a part of an automated backup solution for user data. It is the engine, which performs filesystem searches for files of a specified type (e.g. PST) using WMI Query. All found files will be written to an INI file with their complete path for further processing. The needed informations are read from a specific registry key.


'Script created by: Zierer, Markus
'Script created on: 2010 08 26
'
'This script performs file search operations and writes the results into an INI File.
'Note that it values stored in Windows Registry
'
'Prepare Variables
Dim objWMIService, objFSO, objTextFile
Const ForReading = 1, ForWriting = 2, ForAppending = 8
const HKCU = &H80000001
const HKLM = &H80000002
strComputer = "."
strRegKeyPath = "SOFTWARE\FITS\Software\Backup"
strRegValueExtension = "Extension"
strRegValueSearchDrive = "SearchDrive"
strRegValueINIFile = "INIFile"
strRegValueSection = "Section"

'Read Variable Values from Registry
Set objRegRead = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
objRegRead.GetStringValue HKLM,strRegKeyPath,strRegValueExtension,strExtension
objRegRead.GetStringValue HKLM,strRegKeyPath,strRegValueSearchDrive,strSearchDrive
objRegRead.GetStringValue HKLM,strRegKeyPath,strRegValueINIFile,strINIFile
objRegRead.GetStringValue HKLM,strRegKeyPath,strRegValueSection,strSection

'Wscript.Echo strExtension,strSearchDrive,strINIFile,strSection
'Wscript.Quit

'Perform File Search Operation
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery _
    ("Select * from CIM_DataFile Where Extension = '" & strExtension & "' AND Drive = '" & strSearchDrive & "'")

'Prepare Write to INI File Operation
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objINIFile = objFSO.OpenTextFile(strINIFile, ForAppending)

'Write Section to INI File
objINIFile.WriteLine(strSection)

'End Script if no files found
If colFiles.Count = 0 Then
objINIFile.WriteLine("1=")
Wscript.Quit
End If

'Write Keys and Values to INI File
intCounter = 1
intKey = intCounter

For Each objFile in colFiles
boolWriteToINI = True
Call Exception()
If boolWriteToINI = True Then
objINIFile.WriteLine(intKey & "=" & objFile.Drive & objFile.Path & objFile.FileName & "." & objFile.Extension)
intKey = intCounter + 1
intCounter = intKey
End If

Next

'Write an Empty Key to declare End of Section
objINIFile.WriteLine(intKey & "=")

'Function to Check for Excluded Paths
'Copy a IF Section to add additional Exception
Function Exception
If instr(objFile.Name, "c:\winxp\pchealth\") Then
boolWriteToINI = False
End If
If instr(objFile.Name, "c:\winxp\softwaredistribution\") Then
boolWriteToINI = False
End If
If instr(objFile.Name, "c:\winxp\system32\") Then
boolWriteToINI = False
End If
If instr(objFile.Name, "c:\recycler\") Then
boolWriteToINI = False
End If
If instr(objFile.Name, "c:\programme\microsoft office\") Then
boolWriteToINI = False
End If
If instr(objFile.Name, "c:\programme\sap\") Then
boolWriteToINI = False
End If
If instr(objFile.Name, "c:\programme\techsmith\") Then
boolWriteToINI = False
End If
If instr(objFile.Name, "c:\programme\vorlagen\fi-ts\") Then
boolWriteToINI = False
End If
If instr(objFile.Name, "normal.dot") Then
boolWriteToINI = False
End If
If instr(objFile.Name, "c:\temp\") Then
boolWriteToINI = False
End If
If instr(objFile.Name, "c:\programme\netinst\") Then
boolWriteToINI = False
End If
End Function

Write Windows Patches to INI

This script was developed as a part of an self-written update engine within enteo Netinstall. It's purpose is, to scan a specified directory for Windows Patches and write them to a INI File. Only Patches, using the "Update.exe", should be added to the list. Other Patches, like MSXML or .NET SP should NOT be mentioned, because they are using MSI and therefore the parameters are not compatible.


'Script created by: Zierer, Markus
'Script created on: 2010 09 09
'
'This script performs file search operations and writes the results into an INI File.
'
'Prepare Variables
strComputer = "."
strINIFile = "c:\winxp\Temp\updates.ini"
strSection = "[updates]"

'Perform File Search Operation
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery _
    ("Select * from CIM_LogicalFile Where Drive = 'c:' AND Path = '\\Winxp\\Temp\\Updates\\' AND FileName Like '%WindowsXP%'")

'Prepare Write to INI File Operation
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objINIFile = objFSO.CreateTextFile(strINIFile)

'Write Section to INI File
objINIFile.WriteLine(strSection)

'End Script if no files found
If colFiles.Count = 0 Then
objINIFile.WriteLine("1=")
Wscript.Quit
End If

'Write Keys and Values to INI File
intCounter = 1
intKey = intCounter

For Each objFile in colFiles
objINIFile.WriteLine(intKey & "=" & objFile.Name)
intKey = intCounter + 1
intCounter = intKey
Next

'Write an Empty Key to declare End of Section
objINIFile.WriteLine(intKey & "=")