Two Blogs you should go read!

I just noticed a couple of guys I’ve work with lately have started blogging. These guys really know their stuff so you should go take a look:

Read more

Unattended Installation for the .NET Framework 3.5

There seems to be a bit of confusion around the place about installing the .NET Framework 3.5 and it’s prerequisites. Firstly I’ll say that the .NET Framework 3.5 standalone redistributable package available from the Microsoft Download Center contains all the prerequisites for .NET 3.5 except the Windows Installer 3.1 Redistributable. Yes it’s true, everything you need is in the one file: dotnetfx35.exe.

Secondly there is some great information on deploying the .NET Framework 3.5 on MSDN at

You will see from the article above you can silently install the .NET Framework 3.5 but running the following command:

  • dotnetfx35.exe /q /norestart

Wow! Couldn’t be easier! However what if you’re in an environment where everything is installed via MSIs and undergoes a certain degree of package standardization before deployment??? I found myself in this situation and as it turns out there is a lot of information available on this as well. Aaron Stebner has a wealth of information on installing the .NET Framework. In particular:

There is also a batch script at the bottom of for creating the Administrator installation points. I had a few problems with the script on MSDN so I used my own version which is included below. Download dotnetfx35.exe from Microsoft Downloads and place it in a temp folder somewhere under a directory called 3.5. I used C:\netFramework\3.5 as my location. Then copy the batch file below into a file called Create35AdminInstall.cmd under C:\netFramework. Double-Click the Batch file and you’re away!! When the script is finished you will end up with admin install points for:

  • MSXML Parser 6 – msiexec /i netfx35_deploy\AdminInstallPoint\MSXML6_x86\msxml6.msi /qb-
  • RGB Rasterizer – msiexec /i netfx35_deploy\AdminInstallPoint\RGBRAST_x86\RGB9RAST_x86.msi /qb-
  • .NET Framework 2.0 SP1 – msiexec /i netfx35_deploy\AdminInstallPoint\NETFX20_x86\netfx20a_x86.msi /qb VSEXTUI=1
  • .NET Framework 3.0 SP1 – msiexec /i netfx35_deploy\AdminInstallPoint\NETFX30_x86\netfx30a_x86.msi /qb VSEXTUI=1
  • .NET Framework 3.5 – msiexec /i netfx35_deploy\AdminInstallPoint\netfx35_x86\vs_setup.msi  /qb VSEXTUI=1


@Echo Off
set WORKFOLDER=%~dp0netfx35_deploy
set dotNetFX35build=%WORKFOLDER%\dotnetfx35.exe
echo Creating Admin Install points for NETFX3 %PROCESSOR_ARCHITECTURE%

REM Create folders where work will be done
md “%WORKFOLDER%\extracted”
md “%WORKFOLDER%\AdminInstallPoint”
md “%WORKFOLDER%\logs”

REM Extract the files from the NETFX35 redist SFX
Echo Extract the files from the NETFX35 redist SFX
call “%~dp03.5\dotnetfx35.exe” /q /x:”%WORKFOLDER%\extracted”

REM ————————————————————
REM create the MSXML6 x86 admin install point
Echo Create the MSXML6 x86 admin install point
md “%WORKFOLDER%\AdminInstallPoint\MSXML6_x86”
call msiexec /a “%WORKFOLDER%\extracted\wcu\dotNetFramework\dotNetFX30\x86\msxml6.msi” /qb /l*v “%WORKFOLDER%\logs\MSXML6_x86.log” Targetdir=”%WORKFOLDER%\AdminInstallPoint\MSXML6_x86″

REM ————————————————————
REM create the RGBRAST x86 admin install point
Echo Create the RGBRAST x86 admin install point
md “%WORKFOLDER%\AdminInstallPoint\RGBRAST_x86”
call msiexec /a “%WORKFOLDER%\extracted\wcu\dotNetFramework\dotNetFX30\RGB9RAST_x86.msi” /qb /l*v “%WORKFOLDER%\logs\RGBRAST_x86.log” REBOOT=ReallySuppress Targetdir=”%WORKFOLDER%\AdminInstallPoint\RGBRAST_x86″

REM ————————————————————
REM Extract NETFX 35 x86 components
Echo Extract NETFX 35 x86 components
md “%WORKFOLDER%\extracted\netfx35_x86”
call “%WORKFOLDER%\extracted\wcu\dotNetFramework\dotNetFX35\x86\netfx35_x86.exe” /q /x: “%WORKFOLDER%\extracted\netfx35_x86”

REM ————————————————————
REM create the NETFX35 x86 admin install point
Echo Create the NETFX35 x86 admin install point
md “%WORKFOLDER%\AdminInstallPoint\netfx35_x86”
call msiexec /qb /a “%WORKFOLDER%\extracted\netfx35_x86\vs_setup.msi” USING_EXUIH=1 REBOOT=ReallySuppress /l*v “%WORKFOLDER%\logs\netfx35_x86.log” TARGETDIR=”%WORKFOLDER%\AdminInstallPoint\netfx35_x86″

REM ————————————————————
REM create the NETFX20 x86 SP1 admin install point
Echo Create the NETFX20 x86 SP1 admin install point

REM 2.0 SP1 files location
Set fx20=%WORKFOLDER%\extracted\wcu\dotNetFramework\dotNetFX20\
md “%WORKFOLDER%\AdminInstallPoint\NETFX20_x86”
call msiexec /a “%fx20%netfx20a_x86.msi” TARGETDIR=”%WORKFOLDER%\AdminInstallPoint\NETFX20_x86″
call msiexec /a “%WORKFOLDER%\AdminInstallPoint\NETFX20_x86\netfx20a_x86.msi” PATCH=”%fx20%ASPNET.msp;%fx20%CLR.msp;%fx20%CRT.msp;%fx20%NetFX_CA.msp;%fx20%NetFX_Core.msp;%fx20%NetFX_Other.msp;%fx20%PreXP.msp;%fx20%WinForms.msp;%fx20%DW.msp” USING_EXUIH=1 REBOOT=ReallySuppress /l*v “%WORKFOLDER%\logs\netfx20_x86.log”

REM msiexec.exe /i c:\netfx20sp1\x86\AIP\netfx20a_x86.msi /l*v %temp%\netfx20sp1x86log.txt /qb VSEXTUI=1

REM ————————————————————
REM create the NETFX30 SP1 x86 admin install point
Echo Create the NETFX30 x86 SP1 admin install point

REM 3.0 SP1 files location
Set fx30=%WORKFOLDER%\extracted\wcu\dotNetFramework\dotNetFX30\
md “%WORKFOLDER%\AdminInstallPoint\NETFX30_x86”
call msiexec /a “%fx30%netfx30a_x86.msi” TARGETDIR=”%WORKFOLDER%\AdminInstallPoint\NETFX30_x86″
call msiexec /a “%WORKFOLDER%\AdminInstallPoint\NETFX30_x86\netfx30a_x86.msi” PATCH=”%fx30%WCF.msp;%fx30%WCS.msp;%fx30%WF.msp;%fx30%WPF1.msp;%fx30%WPF2.msp;%fx30%WPF_Other.msp;%fx30%XPS.msp;%fx30%WF_32.msp;%fx30%WPF2_32.msp;%fx30%WPF_Other_32.msp” USING_EXUIH=1 REBOOT=ReallySuppress /l*v “%WORKFOLDER%\logs\netfx30_x86.log”


The batch file can be download (1.87 KB)

Read more

GImageX (ImageX GUI)

Head on over to Richard Smith’s blog to get GImageX. GImageX is a GUI for imageX. The original verison was written in AutoIT but this version has been completely rewritten in C++. The new version v2.0.1 BETA feature list on Richard’s site:

  • Native x86 and x64 versions entirely written in C++.  Tiny ~100KB executable.
  • Doesn’t use the imagex.exe utility at all – instead it uses the WIMGAPI interface (the wimgapi.dll file from the imagex directory)
  • Progress bars, time elapsed, time remaining, file counts have been added
  • Clean “abort” option
  • Ability to mount, change and get info on WIM images

So what are you waiting for, click here to get it.

Read more

Force VMWare Workstation to use a different Network Card

I noticed today that WinPE 2, like all the WinPEs before it, does not have a built in network card driver for VMWare. Now you could add a driver to WinPE 2 by using the peimg /inf command but I just wanted to test something really quickly and didn’t want the hastle of making a new WinPE 2 disk.

So I discovered you can tell VMWare to use emulate an Intel e1000 network card which works great with WinPE 2.

Just add ethernet0.VirtualDev = “e1000″ to your .vmx file!!

Read more

Prepare eTrust ITM v8 Antivirus for Imaging with sysprep

Most antivirus products these days have a unique ID stored in the registry so that management consoles can distinguish the clients. In you are using some form of cloning in your organisation this can cause problems with clients not updating or reporting back to the management console.

This week I ran into this very issue with eTrustITM v8. Fortunately all you need to do is delete a couple of ID values from the registry before running sysprep.

For eTrustITM delete the following key:

For eTrust Antivirus delete the following:

Remember to do this immediately before running sysprep otherwise the clients will register again, particularly if you do a reboot before running sysprep. In my builds I usually have a sysprep.cmd that deletes keys like this and then runs sysprep.exe.

Read more

System Center Essentials Resources

It looks like there is already a lot of good information out there about System Center Essentials 2007. Here are a few of handy spots I have found already:

Know of any other great resources??

Read more

System Center Essentials RTM Installation Issue

In my spare time over the last few days I’ve been getting ready to install the System Center Essentials RTM. After getting all the pre-reqs. installed I fired off the SCE 2007 installer only to find that after getting all the way through to installing and configuring reporting setup fails. Setup then promptly rolls back.

After digging a bit I found that this is actually a known issues with the RTM and Microsoft is working to fix the issue as soon as possible. The issue is to do with disjoint namespaces. Basically your NetBios Name doesn’t match your FQDN for your domain. For instance, my netbios name for my domain is AD but my FQDN is ad.internal.

There is a thread on TechNet if you are interested in following the issue:

Read more

Require Ctrl+Alt+Del on Windows Vista

I’ve been wondering how to do this in Vista. The registry key is:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
Set DisableCAD to 0

Thanks to John at for this one.

Read more

Finding large files with Powershell

I find that my free space is one of those things I don’t check regularly enough. This morning I logged on only to find my system was really struggling. I didn’t take long to realise I only had 600MB of disk space left. Dratt!!

I immediately wondered what was the quickest way to find out where all my space went, Powershell maybe? My first thought was something like this:

get-ChildItem –path C:\ –recurse | where-Object {$_.Length -gt 50000000} | sort-Object –property length –Descending |select-Object –first 10 | format-Table Name, Length –auto

This seemed to work ok but took ages:
Days              : 0
Hours             : 0
Minutes           : 1
Seconds           : 55
Milliseconds      : 828
Ticks             : 1158286885
TotalDays         : 0.00134060982060185
TotalHours        : 0.0321746356944444
TotalMinutes      : 1.93047814166667
TotalSeconds      : 115.8286885
TotalMilliseconds : 115828.6885

Anyone know a better way??

Read more

Using PowerShell to find nested Groups for Active Directory Migration

I’ve been involved in an Active Directory Migration lately and one of the things that was taking a lot of time was finding the groups for a group of users and then finding the nested groups. Why, you might ask? Well in this particular instance it was easier for us to migrate groups first than users but we had to make sure we got all the groups for the users we wanted to migrate moved over first.

The first part of the script involves search Active Directory for the user we wish to find group membership for. This is pretty easy:
#Setup Tasks
$query = new-object system.directoryservices.directorysearcher
$root = [adsi]“”

#Setup for Query
$query.Filter = “(&(objectCategory=user)(objectClass=person)(samAccountName=$accountName))”

The next thing to do after we find the user is to get the memberOf Property:

So I found it was easy enough to get a list of groups for a user but how could a get a list for several users without getting duplicates? The logical thing seemed like a hashtable:
$groups = @{}
foreach ( $user in $users ) {
foreach ($group in Get-Groups $user)
$groupName=$($group.split(“,”)[0]).split(“=”)[1] if(!$groups.Contains($groupname)){$groups.Add($groupname,$group)}

The Properties[“memberOf”] returns a collection of distinguished names, (CN=GroupName,OU=Groups,DC=domain,DC=local), so the above code splits up that string to extract the groupName to be the key for the hashtable and then the DN as the value. After this it is simply a case of connecting to each group and listing the memberOf property to see if there is any nested groups.

The code will only check 1 level deep so if you have a chain of nested groups you’ll have to check it manually.

To Run the script just run .\GetGroups “username1″,”username2″,”username3″. Please let me know what you think.

FindNestedGroups.ps1.txt (.91 KB)

Read more
Page 4 of 10« First...23456...10...Last »