This a feature that has plauged us since we started working with Altiris.
Using a concept from a techy in England, I did the following:
1. Locate psexec.exe from Sysinternals on Microsoft's web site. http://technet.microsoft.com/en-us/sysinternals/bb897553
2. I used VBSEdit to compile my HTA script into box.exe. For some reason the SQL portion doesn't work, but the rest does. Step 3 is below the HTA Code
<html>
<!--
Put a box on the screen to let the user know that a software build is in
progress.
*********************************************************************************
* Date : August 4, 2011
* Author : Wolfgang M. Heid
*********************************************************************************
-->
<head>
<title>Software Installation is in Progress</title>
<HTA:APPLICATION
APPLICATIONNAME="My HTML application"
ID="MyHTMLapplication"
VERSION="1.0"/>
</head>
<script language="VBScript">
Option Explicit
Dim objWMIService, colItems, objItem, oReg, strKeyPath, strValueName, strValue
Dim dwValue, objWMISvc, strComputerName, iTimerID
Dim strComputer, intHorizontal, intVertical, intLeft, intTop, build
Const HKEY_LOCAL_MACHINE = &H80000002
Sub Window_OnLoad
'This method will be called when the application loads
window.resizeTo 900,600
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor")
For Each objItem in colItems
intHorizontal = objItem.ScreenWidth
intVertical = objItem.ScreenHeight
If intHorizontal<>"" Then Exit For
Next
intLeft = (intHorizontal - 900) / 2
intTop = (intVertical - 600) / 2
window.moveTo intLeft, intTop
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_
strComputer & "\root\default:StdRegProv")
Set objWMIService = Nothing
Set colItems = Nothing
' Call the update status sub every 20 seconds
' UpdateStatus
' iTimerID = window.setInterval("UpdateStatus", 5000)
End Sub
Sub UpdateStatus
Const adOpenStatic = 3
Const adLockOptimistic = 3
Dim objFSO, objConnection, objRecordSet, objLog
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objWMISvc = GetObject( "winmgmts:\\.\root\cimv2" )
Set colItems = objWMISvc.ExecQuery( "Select * from Win32_ComputerSystem", , 48 )
For Each objItem in colItems
strComputerName = objItem.Name
Next
Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")
objConnection.Open _
"Provider=SQLOLEDB;Data Source=Altiris-ds2;" & _
"Trusted_Connection=Yes;Initial Catalog=eXpress;" & _
"User ID=Somewhere\Over;Password=therainbow;"
objRecordSet.Open "SELECT * FROM dbo.computer dc INNER JOIN dbo.computer_display dcd on dc.computer_id = dcd.computer_id WHERE dc.[name]='" & strComputerName & "' ", _
objConnection, adOpenStatic, adLockOptimistic
objRecordSet.MoveFirst
PCName.InnerHTML = "PC Name: " & objRecordSet.Fields("name")
IPAddress.InnerHTML = "IP Address: " & objRecordSet.Fields("ip_address")
CurrentEvent.InnerHTML = "Current Event: " & objRecordSet.Fields("event_name")
objRecordSet.Close
Set objRecordSet = Nothing
Set objConnection = Nothing
End Sub
</script>
<body bgcolor="white">
<p align="center">
<br>
<br>
<font size="10">
<em>
<strong>
Patience Please ...
</strong>
</em>
</font>
<br>
<img src="tgline.gif" width="800" height="5">
<br>
<font size="10">
<em>
<strong>
A Software Installation is in Progress
<br>
<br>
Your computer will restart automatically
<br>
after the installation is finished.
</strong>
</em>
</font>
<img src="tgline.gif" width="800" height="5">
<font size="5">
<em>
<strong>
Please Contact the Helpdesk at
<br>
Extension 1234
<br>
with any questions.
</strong>
</em>
</font>
<img src="tgline.gif" width="800" height="5">
</p>
<!--{{InsertControlsHere}}-Do not remove this line-->
</body>
</html>
Step 3: Copy the psexec and box.exe files to somewhere on drive c: I use C:\Windows\Temp\WSConfigFiles\WSSupportFiles
Step 4: This is the script to run it:
'Display Machine Building Banner
'vbscript
Set WS = CreateObject ("WScript.Shell")
WS.Run "C:\Windows\Temp\WSConfigFiles\WSSupportFiles\PSexec.exe -s -x -i 0 C:\Windows\Temp\WSConfigFiles\WSSupportFiles\Box.exe /accepteula",1,False
WScript.Quit
Ok, now put it together:
1. At the top of each job is a Copy File To Job based on Step 3
2. Add a Reboot
3. Add the Run Script from Step 4 and viola, you have a work around!
4. I include a reboot at the end of the job to clear the box.
If anyone fixes the SQL code, please let me know.
Here is the orginal inspiration for my version:
http://www.symantec.com/connect/articles/showing-build-status-deployment-solution-69
All credit goes to Rhys for the concept!