Archive for the ‘Altiris’ Category.

Altiris Likes Index Memory

Came across an interesting problem in Altiris while working with Patch Management, and seems it is one of those undocumented tidbits.

I basically found myself in the situation where, post-install/repair, Patch Management wasn’t detecting that Patch Management for Windows Report Pack was installed when the application indicated that it was. This is a fairly common error, and anybody who has had to uninstall/reinstall PM via the Solution Center has probably had to deal with it at some point.

Patch Management Core has detected that the following component is not installed: Patch Management for Windows Report Pack This component is required by the page you tried to view and must be installed before you can continue.

But what made this (un)fun was that the standard solution to this problem - repair the NS install and then the SP - didn’t work. In fact, none of the solutions in the KB worked.

Now my stupid moment was in not checking the log file sooner; I assumed it was the standard problem that I had worked with before. However, I was wrong. There were two key items in the log file:

[CDATA[Transaction being rolled back automatically during dispose. To disable this warning rollback your transaction explicitly! Dispose location:

and

[CDATA[Failed to install product. [This index operation requires 2048 KB of memory per DOP. The total requirement of 8192 KB for DOP of 4 is greater than the sp_configure value of 1024 KB set for the advanced server configuration option "index create memory (KB)". Increase this setting or reduce DOP and rerun the query.
The statement has been terminated.] ( Unhandled exception. Type=System.Data.SqlClient.SqlException Msg=This index operation requires 2048 KB of memory per DOP. The total requirement of 8192 KB for DOP of 4 is greater than the sp_configure value of 1024 KB set for the advanced server configuration option “index create memory (KB)”. Increase this setting or reduce DOP and rerun the query. The statement has been terminated.

The net effect of this is that the option is not actually installed by the Solution Center, even though the application indicates that it is installed.

Fortunately the solution was easy: In SQL 2005, modify the server properties so that Index Memory Size is configured to use dynamic values. I rebooted the Altiris server as a precaution, then tried things again. And it worked!

Forcing Inventory via Deployment Server

Here’s an easy way to force computers to report inventory to Notification Server via a job on Deployment Server:

1. Copy the file AeXWebInvPkg.exe to the client;

2. Copy a batch file to the client to run the executible:

@echo off
echo Altiris is collecting inventory on this computer.
echo Please do not close this window. It will close on it’s own in a moment.
c:\aexwebinvpkg.exe

3. Run a vb script to launch the batch file:

Set sh = CreateObject(”WScript.Shell”)
Set fso = CreateObject(”Scripting.FileSystemObject”)

sh.run “c:\inventory_ns.bat”

Set sh = Nothing
Set fso = Nothing

Since we have a fairly aggressive purge policy in place on NS, I use this script to get computers back quickly after a campus has been offline for the summer.

An Altiris Collection to Find Deep Freeze (or Any Other Program)

If you have Altiris, at some point you have no doubt wanted to create a collection based on a program that may be installed on the desktop.  For me, this program was the administrative nightmare known as Deep Freeze, however you can modify the query to reflect whatever program you want to hunt for.

It is important to note that the SQL to build the collection for this is NOT the same as the SQL used to build a report for this, and if you start with a report to find the software and then try to create the collection, you won’t get all the data.  To create the collection statement, I poked around at a SQL level first until I got the desired result set.  At that point I was able to use the query to create the computer collection.

The bold items represent what you would swap out for your own query.

select Guid from vResource where Guid in (select ResourceGuid as Guid from (SELECT DISTINCT
i.[Name],
csw.KnownAs [Product Name],
csw.ProductVersion [Version],
csw.Manufacturer,
i.[Guid] [ResourceGuid]
FROM dbo.vComputer i
JOIN dbo.Inv_AeX_SW_Audit_Software_spt t1
ON t1.[_ResourceGuid] = i.Guid
JOIN dbo.Cmn_SW_Common csw
ON csw.[_KeyHash] = t1.[_KeyHash]
JOIN dbo.Inv_AeX_AC_Identification d
ON d.[_ResourceGuid] = i.Guid
JOIN dbo.CollectionMembership cm
ON cm.ResourceGuid = d.[_ResourceGuid]
JOIN dbo.vCollection it
ON it.Guid = cm.CollectionGuid
/* WHERE csw.KnownAs = ‘Deep Freeze‘ OR csw.KnownAs = ‘Deep Freeze 5‘ OR csw.KnownAs = ‘Deep Freeze 6‘ */
WHERE csw.KnownAs LIKE ‘Deep Freeze%
AND d.[System Type] LIKE ‘Win%’
AND i.[Name] LIKE ‘%’ ) xxx)