The first thing I noticed is that $HKCUSM is not defined anywhere, I gues you might want to add a line in the beginning of the script $HKCUSM='HKEY_CURRENT_USER\SOFTWARE\Microsoft'

Secondly, if you are running Kixtart fromt he local drive then your Kixtart update part will not work because Kixtart is in use at that moment. It is better to update the Kixtart files from a batch file that is used to call the Kixtart script.

Thirdly, you might want to rewrite your IF -ENDIF routine for the user drive mapping. Since the users are unique yous hould rather use SELECT - CASE - ENDSELECT and also replace %USERNAME% with the build-in Kixtart macro @USERID.
code:
SELECT
CASE @USERID='w20acdnt' ; ...Don Thompson
USE G: '\\W20LAN01\Don'
$retcode=AddPrinterConnection('\\w20lan04\w20acct')
$retcode=SetDefaultPrinter('\\w20lan04\w20acct')
CASE @USERID='w20acggm' ; ...Greg Morgan
USE G: '\\W20LAN01\Morgan'
$retcode=AddPrinterConnection('\\w20lan04\w20acct')
$retcode=SetDefaultPrinter('\\w20lan04\w20acct')
ENDSELECT

I also removed the '=0' after the SetDefaultPrinter and removed the spaces between the AddPrinterConnection commands and the parenthesis. The $retocde prevents the output of the printer mapping return values to the console.

You might also want to think about organizing users into groups and then do the drive and/or priner mappings based on group membership. This should cut down on the number of cases that you will need to check and you won't need to modify your script whenever a user gets added, removed, or changes printers.
_________________________
There are two types of vessels, submarines and targets.