Tuesday, 30 December 2008

Error ''Item has already been added'' when trying to set Resource Type in a CMDB or Connector Rule

Applies To

• Altiris Connector 6.5
• CMDB 6.5


After upgrading to CMDB/Asset 6.5, when trying to set the Resource Type within a CMDB or Connector rule, the following error may be shown:

Module: AltirisNativeHelper.dll
Source: global.asax
Description: Unhandled exception.  Type=System.ArgumentException Msg=Item has already been added.  Key in dictionary: "8b92ef99-7bac-49a0-8694-48d7558bc7ee"  Key being added: "8b92ef99-7bac-49a0-8694-48d7558bc7ee"
   at System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add)
   at System.Collections.Hashtable.Add(Object key, Object value)
   at Altiris.NS.Connector.Web.ImportExportRule.CreateDataClassesMappingsTable(Boolean bReloadColumns, Boolean bSetSavedValues)
   at Altiris.NS.Connector.Web.ImportExportRule.CreateAllMappingControls(Boolean bReloadColumns, Boolean bSetSavedValues)
   at Altiris.NS.Connector.Web.ImportExportRule.ResourceType_Change(Object sender, EventArgs e)
   at System.Web.UI.WebControls.ListControl.OnSelectedIndexChanged(EventArgs e)
   at System.Web.UI.WebControls.DropDownList.System.Web.UI.IPostBackDataHandler.RaisePostDataChangedEvent()
   at System.Web.UI.Page.RaiseChangedEvents()
   at System.Web.UI.Page.ProcessRequestMain()

The following Resource Types have been reported as affected by this issue, others could be affected:

Network Printer
Office Equipment


This can be caused by having the Accounting Information data class directly associated to a child Resource Type and the child's Base Resource Type, Asset.


  1. Back up the Altiris database
  2. Run the following sql script against the Altiris database

--Set up @ResourceTypeDataClassAssoc table variable
DECLARE @ResourceTypeDataClassAssoc TABLE
ResourceType nvarchar(250),
ResourceTypeGuid uniqueidentifier,
depth bit,
BaseResourceType nvarchar(250),
BaseResourceTypeGuid uniqueidentifier,
DataClass nvarchar(250),
ResourceDataClassGuid uniqueidentifier

populate @ResourceTypeDataClassAssoc with data classes
associated to resource types at each level in the hierarchy
INSERT INTO @ResourceTypeDataClassAssoc
SELECT i.name as ResourceType, rth.ResourceTypeGuid, rth.depth, i2.name as BaseResourceType,
rth.BaseResourceTypeGuid, i3.name as DataClass, rtdc.ResourceDataClassGuid
FROM ResourceTypeHierarchy rth
JOIN item i on rth.ResourceTypeGuid = i.Guid
JOIN item i2 on rth.BaseResourceTypeGuid = i2.Guid
JOIN ResourceTypeDataClass rtdc on rth.BaseResourceTypeGuid = rtdc.ResourceTypeGuid
JOIN item i3 ON rtdc.ResourceDataClassGuid = i3.Guid

Find resource types that have data classes associated directly, and indirectly through
any base resource type in their hierarchy, and delete them from the ResourceTypeDataClass table
DELETE FROM ResourceTypeDataClass
FROM @ResourceTypeDataClassAssoc rt1
  JOIN @ResourceTypeDataClassAssoc rt2 ON rt1.ResourceTypeGuid = rt2.ResourceTypeGuid
  AND rt1.BaseResourceType != rt2.BaseResourceType
  AND rt1.ResourceDataClassGuid = rt2.ResourceDataClassGuid
WHERE rt1.depth = 0
  AND ResourceTypeDataClass.ResourceTypeGuid = rt1.ResourceTypeGuid
  AND ResourceTypeDataClass.ResourceDataClassGuid = rt1.ResourceDataClassGuid

Tuesday, 9 December 2008

SBS 2003 and the 16 Gb Exchange limit solution

All credit goes to Michael for his post


  • Small Business Server 2003 - Release 2
  • Symptoms:
    • Users could not connect to Exchange via Outlook
    • Web Outlook was producing errors

Servers event logs showed following recurring errors:

Event Type: Error
Event Source: MSExchangeSA
Event Category: MAPI Session
Event ID: 9175
Date:  9/20/2007
Time:  3:53:59 PM
User:  N/A
The MAPI call ‘OpenMsgStore’ failed with the following error:
The attempt to log on to the Microsoft Exchange Server computer has failed.
The MAPI provider failed.
Microsoft Exchange Server Information Store
ID no: 8004011d-0512-00000000

A search on that Event ID produced all sorts of interesting results. I must have read through the first 15-20 entries there and settled on this Microsoft Knowledge Base article (#320705). [NOTE: this is NOT what I ended up doing!] I started to go through the steps and decided before I started running command line switches on things, messing with moving the Information Store around or merging .PST files, I would read up and dig around a bit more in the Event log.

I figured that it would be important to do a little forensics to see if I could see another event that may have caused the Information Store to crap out. So, I found an event that happened right before all of the 9175’s started happening. This is what it contained:

Event Type: Warning
Event Source: ESE
Event Category: Space Management
Event ID: 445
Date:  9/20/2007
Time:  1:46:26 PM
User:  N/A
Information Store (4996) First Storage Group: The database F:\Exchsrvr\MDBDATA\priv1.edb has reached its maximum size of 16383 MB. If the database cannot be restarted, an offline defragmentation may be performed to reduce its size.

Back to Google to see if Exchange SP2 can be installed on SBS 2003…and I came across this FAQ on Microsoft. In it, I came upon the answers I was looking for:

Q. Does SP2 work on Microsoft Windows Small Business Server 2003?
A. Yes. Windows Small Business Server 2003 with SP1 fully supports Exchange Server 2003 SP2. Exchange Server 2003 SP2 was tested to ensure compatibility.

Q. Did the storage limit change for SP2?
A. Based on feedback from customers and because of the evolution of e-mail usage, we are increasing the storage limit for Exchange Server 2003 Standard Edition with SP2 to 75 gigabytes (GB). In order to prevent the database from growing unexpectedly after an upgrade to SP2, the limit is set to 18 GB and can be set up to 75 GB by using a registry key. For more information about setting the limit, see the Exchange Server 2003 Help, updated during the SP2 installation.
Q. Does the storage limit change apply to Windows Small Business Server 2003?
A. Yes. Windows Small Business Server 2003 users can take advantage of the storage limit changes implemented in Exchange Server 2003 SP2.

GREAT! So the next thing was to get Exchange SP2 installed. The download is located here. (Saved you some search time, right?)

Installation went fine without issue. The installer stopped and started services as it was supposed to and everything updated perfectly. Once the install was complete, people could connect to Exchange via Outlook immediately. BUT WAIT! There was one more thing that had to be done after this upgrade. I guess that after the upgrade, the File Store is only updated to 18 Gigs (I believe). So, in order to really take advantage of more space, you have to do a registry hack. Here is what you need to do (oh, and one reminder: While I have personally done the steps above and they seemed to have worked for me, I cannot guarantee that they will work for you, nor that you are free from risk doing any of this stuff written above; you take these actions at your own risk and I will not be held responsible for anything “bad” that you may do to your computer...anyway…)
Here are the steps for the registry hack:

  1. Open your Registry Editor (if you don’t know how to do this…you shouldn’t be reading this article)
  2. Navigate to: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSExchangeIS\<Servername>\Private-GUID
  3. Create a DWORD entry by right-clicking on the folder and selecting NEW > DWORD Value
  4. Enter a DECIMAL value of anything between 18 and 75 (making sure that it is not larger than the free space on the drive where your store resides)
  5. Do Steps 3 and 4 again with: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSExchangeIS\<Servername>\Public-GUID
  6. Exit the Registry Editor and go into Services and restart the “Microsoft Exchange Information Store”
  7. That’s it!

To check to see if your new setting was stored properly, wait a few minutes and then look for Event ID#1216. That event should give you details on your new Store size (example below).

Event Type: Information
Event Source: MSExchangeIS Mailbox Store
Event Category: General
Event ID: 1216
Date:  9/20/2007
Time:  4:25:24 PM
User:  N/A
The Exchange store ‘First Storage Group\Mailbox Store (XXXXXXXXX-SERVER)’ is limited to 50 GB. The current physical size of this database (the .edb file and the .stm file) is 15 GB. If the physical size of this database minus its logical free space exceeds the limit of 50 GB, the database will be dismounted on a regular basis.

If you found this usefull remember to click on an AD.



Migrating a Citrix datastore ( access, sql express ) to Microsoft SQL ( sql , sql express )

I've found this post on one the forums and the procedure works like a charm !

Migrating a Citrix Access data store to Microsoft SQL Server 2005

The following instructions outline the process of migrating a Citrix MetaFrame XP Access data store to Microsoft SQL Server. Please note, this process requires the Citrix servers to be restarted and adequate backup measures should be taken prior to migration in case of failure. citrixInformation in this article has been taken from the following sources: • How to create a database for use as a data store using SQL Server (http://support.citrix.com/kb/entry!default.jspa?categoryID=118&entryID=3412)• Advanced Concepts - Farm Maintenance (http://support.citrix.com/kb/entry!default.jspa?categoryID=118&entryID=2188)
To migrate a Citrix Presetation Server data store to Microsoft SQL Server:

I. Create the target database on the SQL server:

1. Start SQL Enterprise Manager.

2. in the left-hand pane, expand the tree until you reach folder level.

3. Right-click on the databases folder and select New Database

4. In the dialog box, enter a name into the Name textbox and click OK. The name entered is not important.

5. Expand the security folder.

6. Right-click Logins and select New Login

7. A dialog box appears with the General tab displayed. In the Name textbox, enter a username for the new login. Make a note of this username, as you will need it during the migration procedure.

8. In the Authentication section of the General tab, click SQL Server Authentication and enter a password. Make a note of this password, as you will need it during the migration procedure.

9. In the Defaults are of the General tab, change the database to the name you specified in step 4.

10. Click the Database Access tab. In the Database list, select the database name specified in step 4.

11. In the Database Roles list, select DB_Owner. Leave the other selected roles checked. 12. Click OK. You are prompted to confirm your password at this point. 13. The database isnow created. Exit SQL Enterprise Manager.

II. Create a new DSN file pointing to the database created above:

1. Start ODBC Data Source Administrator.

2. Select the File DSN tab, and click Add.

3. In the driver list, select SQL Server and click Next.

4. Click Browse and navigate to the %PROGRAMFILES%\Citrix\Independent Management Architecture folder. Enter a filename for the DSN. Click OK then click Next.

5. Confirm the information entered, then click Finish.

6. The Create a new Data Source to SQL Server dialog, enter a description if required.

7. In the SQL Server box, enter the name of the SQL Server on which the database has been created. Click Next.

8. Click With SQL Server authentication using a login ID and password entered by the user then enter the Login ID and password of the database user created above. Click Next

9. Check Change the default database to and select the name of the database created above. Click Next, then click Finish.

10. In the ODBC Microsoft SQL Server Setup dialog, click Test Data Source button to ensure connectivity. Once finished, click OK to finalise DSN creation.

III. On the host server, start Command Prompt and change to the %PROGRAMFILES%\Citrix\Independent Management Architecture folder.

IV. Execute the dsmaint migrate command with the following parameters:

dsmaint migrate /srcdsn:path and name of existing DSN /srcuser:leave blank /srcpwd:leave blank /dstdsn:path and name of new DSN /dstuser:new DSN login name /dstpwd:new DSN password

V. Once the migration procedure has finished (it can take anywhere from a few seconds to a few minutes), execute the dsmaint config command with the following parameters: dsmaint config /user:new DSN login name /pwd:new DSN password /dsn:path and name of new DSN ds

VI. Stop and restart the IMA service. After the IMA service has restarted, all other servers begin accessing the new data store through the host server. t Please note: Restarting the IMA Service may cause the SNMP service to Dr Watson if SNMP is enabled. This is benign and can safely be ignored.

VII. Copy the new DSN file to all other servers in the farm.

VIII. Execute the dsmaint config command on each server with the same parameters as above to establish a direct connection to the new data store.

IX. Stop and restart the IMA service on all remaining indirect servers in the farm.

Friday, 5 December 2008

SCCM : How To Include Files , Folders & Registry Settings in USMT 3.x

When you specify the migration .xml files, USMT migrates the settings and components specified in What Does USMT 3.0 Migrate?. To include additional files and settings, we recommend that you create a custom .xml file and then include this .xml file on both command lines. This way, you can keep your changes separate from the default .xml files and it may be easier to track your modifications.

To migrate a single registry key

The following .xml file migrates a single registry key.

<migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/test">
<component type="Application" context="System">
<displayName>Component to migrate only registry value string</displayName>
<role role="Settings">
<pattern type="Registry">HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Cache [Persistent]</pattern>

To migrate a specific folder

To migrate a folder from a specific drive
Including subfolders

The following .xml file migrates all files and subfolders from C:\EngineeringDrafts to the destination computer.

<migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/test">
<component type="Documents" context="System">
<displayName>Component to migrate all Engineering Drafts Documents including subfolders</displayName>
<role role="Data"> <rules> <include>
<pattern type="File">C:\EngineeringDrafts\* [*]</pattern>
</include> </rules> </role>
Excluding subfolders

The following .xml file migrates all files from C:\EngineeringDrafts, but does not migrate any subfolders within C:\EngineeringDrafts.

<migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/test">
<component type="Documents" context="System">
<displayName>Component to migrate all Engineering Drafts Documents without subfolders</displayName>
<role role="Data"> <rules> <include>
<pattern type="File"> C:\EngineeringDrafts\ [*]</pattern>
</include> </rules> </role>
To migrate a folder from any location

The following .xml file migrates all files and subfolders of the EngineeringDrafts folder from any drive on the computer. If multiple folders exist with the same name all such files will get migrated.

<migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/test">
<component type="Documents" context="System">
<displayName>Component to migrate all Engineering Drafts Documents folder on any drive on the computer </displayName>
<role role="Data">
<script>MigXmlHelper.GenerateDrivePatterns ("\EngineeringDrafts\* [*] ", "Fixed")</script>
<script>MigXmlHelper.GenerateDrivePatterns ("*\EngineeringDrafts\* [*] ", "Fixed")</script>

The following .xml file migrates all files and subfolders of the EngineeringDrafts folder from where ever it exists on the C: drive. If multiple folders exist with the same name all such folders will get migrated

<migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/test">
<component type="Documents" context="System">
<displayName>Component to migrate all Engineering Drafts Documents EngineeringDrafts folder from where ever it exists on the C: drive </displayName>
<role role="Data">
<pattern type="File"> C:\*\EngineeringDrafts\* [*]</pattern>
<pattern type="File"> C:\EngineeringDrafts\* [*]</pattern>

To migrate a file type into a specific folder

The following .xml file migrates .mp3 files located in the fixed drives on the source computer into the 'C:\Music folder on the destination computer.

<migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/test">
<component type="Documents" context="System">
<displayName>All .mp3 files to My Documents</displayName>
<role role="Data">
<script>MigXmlHelper.GenerateDrivePatterns ("* [*.mp3]", "Fixed")</script>
<!-- Migrates all the .mp3 files in the store to the C:\Music folder during LoadState -->
<locationModify script="MigXmlHelper.Move('C:\Music')">
<script>MigXmlHelper.GenerateDrivePatterns ("* [*.mp3]", "Fixed")</script>

To migrate a specific file

The following examples show how to migrate a file from a specific folder, and how to migrate a file from any location.

To migrate a file from a folder

The following .xml file migrates only Sample.doc from C:\EngineeringDrafts to the destination computer.

<migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/test">
<component type="Documents" context="System">
<displayName>Component to migrate all Engineering Drafts Documents</displayName>
<role role="Data"> <rules> <include>
<pattern type="File"> C:\EngineeringDrafts\ [Sample.doc]</pattern>
</include> </rules> </role>
To migrate a file from any location

To migrate Sample.doc from where ever it exists on the C: drive, use <pattern> as follows. If multiple files exist with the same name on the C: drive, then all of these files will be migrated.

<pattern type="File"> C:\* [Sample.doc] </pattern>

To migrate Sample.doc from any drive on the computer, use <script> as follows. If multiple files exist with the same name, all such files will get migrated.

<script>MigXmlHelper.GenerateDrivePatterns("* [sample.doc]", “Fixed”)</script>

SCCM : XML examples for use in USMT 3.0.1

Can be found over here


Thursday, 4 December 2008

Altiris Notification Server (NS) reports for Altiris Deployment Server (DS)

Following links will give you some NS reports for DS



Shows a listing of all DS jobs that are currently (actively) deploying. 
Count of all computers with pending DS jobs. Right-click option will list the jobs pending for the selected computer. 
List of scheduled DS jobs that have been scheduled for more than X amount of days, with 30 as the default. 
List of all scheduled DS jobs, but you have the option of entering full/partial computer name and DS Job name to filter your results. The default is a full list of all scheduled DS jobs for all computers. 
Like report #2, but this is for Completed jobs, rather than pending. 
Like report #4, but this is for Completed Jobs, rather than pending. 



Report to give you jobs that are scheduled in the future for DS 
Report to find all of your WOL proxies 


Altiris Database Structure (Schema) of NS or any other database

Article ID: 1485

These are SQL scripts to show and capture the Database structure of the Notification Server or any other database.

-- SQL Script to capture the database table structure
[table_name] as [Table Name],
[column_name] as [Column Name],
case [data_type]
when 'varchar' then [data_type] + '(' + cast([character_maximum_length] as varchar) + ')'
when 'nvarchar' then [data_type] + '(' + cast([character_maximum_length] as nvarchar) + ')'
else [data_type]
end as [Data Type],
case [is_nullable]
when 'No' then 'No'
else 'Yes'
end as [Nullable],
isnull([column_default], '') as [Default Value],
isnull(cast([numeric_precision] as nvarchar),'') as [Precision],
isnull(cast([numeric_precision_radix] as nvarchar),'') as [Precision Radix],
isnull([collation_name],'') as [Collation Name]
from information_schema.[columns]
where [table_catalog] like '%'
and [table_schema] like 'dbo'
and [table_name] like '%'
and [column_name] like '%'
and [data_type] like '%'
order by [table_name], [ordinal_position]

-- SQL Script to capture the names of the database objects
select distinct
case [xtype]
when 'C' then 'CHECK constraint'
when 'D' then 'DEFAULT constraint'
when 'F' then 'FOREIGN KEY constraint'
when 'L' then 'Log'
when 'FN' then 'Scalar function'
when 'IF' then 'Inlined table-function'
when 'P' then 'Stored procedure'
when 'PK' then 'PRIMARY KEY constraint'
when 'RF' then 'Replication filter stored procedure'
when 'S' then 'SYSTEM table'
when 'TF' then 'Table function'
when 'TR' then 'Trigger'
when 'U' then 'User table'
when 'UQ' then 'UNIQUE constraint'
when 'V' then 'View'
when 'X' then 'Extended stored procedure'
end as [xtype],
[name] as [Name]
from [dbo].[sysobjects]
where [xtype] in ('C', 'D', 'FN','P', 'PK', 'TR', 'U', 'V')
and [name] like '%'
order by [xtype], [name]

-- SQL Script to capture the Names and Definitions of Views
[table_name] as [View Name],
[view_definition] as [View Definition]
from information_schema.[views]
where [table_name] like '%'
order by [table_name]

-- SQL Script to capture the Names and Definitions of functions and procedures
[routine_type] as [Routine Type],
[routine_name] as [Routine Name],
[routine_definition] as [Routine Definition]
from information_schema.[routines]
where [routine_type] in ('FUNCTION','PROCEDURE')
and [routine_name] like '%'
order by [routine_name]

-- SQL Script to capture the Names and Parameters of functions and procedures

[specific_name] as [Routine Name],
[parameter_name] as [Parameter Name],
case [data_type]
when 'varchar' then [data_type] + '(' + cast([character_maximum_length] as varchar) + ')'
when 'nvarchar' then [data_type] + '(' + cast([character_maximum_length] as nvarchar) + ')'
else [data_type]
end as [Data Type]
from information_schema.[parameters]
where [specific_name] like '%'
order by [specific_name], [ordinal_position]

-- SQL Script to capture the GUID and Table names
-- This could help your SQL joins on what table have what guids.
[column_name] as [Guid Name],
[table_name] as [Table Name],
case [is_nullable]
when 'YES' then 'Yes'
else 'No'
end as [Nullable],
isnull([column_default], '') as [Default Value]
from information_schema.[columns]
where [table_schema] = 'dbo'
and [data_type] like 'uniqueidentifier'
order by [column_name], [table_name]

-- To look at the table or view definition

sp_help TableName
sp_help ViewName

sp_columns TableName

-- To look at what indexes are in a table

sp_helpindex TableName

-- To look at the definition of a stored procedure or a view

sp_helptext StoredProcedureName

sp_helptext ViewName

-- To look at the database object (tables, views, stored procedures) dependencies

sp_depends DatabaseObject


  • Run these SQL scripts in Query Analyzer and save the result to a CSV file for study.
  • You will need to select the database (Altiris, Altiris_Incidents, express …) in Query Analyzer you wish to capture the schema.
  • In the where clause of the scripts, I left variables to filter (table_catalog, table_schema, table_name, column_name, data_type ...) and narrow your results.
  • These are SQL scripts will show you any database structure (Schema), but will not show the relationships between the tables (Data Dictionary).
  • The best joins for performance reasons will be on the columns that are indexed. Most table joins will be withuniqueidentifier (GUIDs) like (_ResourceGuid, Guid, ProductGuid, _KeyHash ...) or varchar/nvarchar (strings); so you may wish to filter on the data_type to see these.
  • To look at a text output (Ctrl + T) or a table output (Ctrl + D) use the control key combinations. Then viewing the output from the stored procedure sp_helptext, it is good to change the output to text.
  • The attached files (DatabaseTableRelationByGuid.txt, DatabaseTableRelationByString.txt) are SQL scripts that will show you the possible relations between tables and columns depending on the data that is in you database. These SQL scripts can be slow, due to the use of nested cursors in the script. There are variables in the scripts to filter /narrow you results to a set of tables.

Deploying a HP 6930 with Altiris Deployment Server DS 6.8

A howto was described in following thread


Download the Intel Storage Matrix Softpaq from the HP site and change the included txtoem file.

Change the scsi= line from IaStor=*** to Iaachi=**
You need to know the version of SATA the 6930p needs to reference when booting. On our version we changed it to ICHM9_E/M (paraphrasing). If you have a clean install of XP with all the drivers loaded from scratch, you can find out what file this is.
Once found and changed int he TXTOEM, you need to re-create your PXE boot file, and select the correct NIC and the SATA files. I do this by dumping both the NIC and SATA drivers into one folder and selecting the 'Have Disk' option during NIC selection.
Changing the TXTOEM file is the hardest part of this process, but not impossible.
Keep in mind that while you may be able to boot the machine to WinPE, deploying an image with this drier requires re-sysprepping your base image to account for these new mass storage drivers. If not, the imaged computer WILL blue screen

Wednesday, 3 December 2008

Altiris : Remotely execute an Inventory Task on a client via Deployment Server (DS)

Got this from a thread on http://www.altirigos.com/

Create a VB script according to this specification

set objAltirisAgent = Createobject("Altiris.AeXNSClient")set objSWDAgent = objAltirisAgent.ClientPolicyMgr.ClientAgent("Altiris.SWD")
objSWDAgent.RunAdvertisement "{Guid of the inventory task to run}", 1
objSWDAgent.RunAdvertisement "{Guid of the inventory task to run}", 1



Altiris : Unable to add drivers to WinPE using the Have Disk button in DS 6.9 SP1


Launch BDC WinPE wizard and add a driver using the "Have Disk" button. After adding the driver browse out to the CUSTOM folder. You'll see that a explanatory text file was created, but no driver files were copied.


Run the attached Hotfix Installer (DS_BootWiz_Hotfix_6_9_357.exe) on your Deployment Server to resolve this issue.


Tuesday, 2 December 2008

Altiris AClient vs DAgent on Xp and Deployment Server (DS) 6.9 SP1

Dagent which comes with DS 6.9 SP1 will not replace the AClient if this one is already installed on a workstation. When you upgrade to DS 6.9 SP1 , the already running AClient is upgraded to the latest version (6.9.355).

DAgent has limited support in remote control mode (as described in the release notes) and some disconnects to the DS server are occuring when using the DAgent on an XP machine

Altiris : Shared Guid Diagnostics Guide (aka Duplicate Guid Kit)

Article ID: 3848


A Shared Altiris Agent Guid is a configuration problem that causes mismatched inventory data, and prevents accurate management and event-message storage of managed computers by the Altiris Notification Server. The Altiris Agent Guid is the primary mechanism by which the Altiris Notification Server uniquely identifies each resource record in the NS database. In this situation, we are concerned with computer resource records. There are several potential causes of shared guids. They all originate from circumvention of the normal agent deployment process, or external changes to the agent's configuration. The end result is that two or more managed computers each claim to be the sole owner of the Agent Guid (which is supposed to be globally unique).

Known causes

OS Imaging: By default, the Notification Server will generate a new Guid upon the first request from a brand new Altiris Agent. The Altiris Agent then stores its assigned Guid in the registry for Windows, and on the file-system for the Linux, Unix and Macintosh platforms. Shared Guids can be caused by imaging a workstation that already has an Altiris Agent installed. Each restored copy of the workstation will have the same assigned Guid. This issue exists in all imaging solutions, with the exception of Deployment Server (DS) version 6.5 or better. The best solution is to schedule the Altiris Agent to install immediately after restoring an image (This can be done as a DS job). An alternate solution is to always remember to delete the guid from the workstation prior to imaging (error prone).

Software Packaging: This cause is less likely to occur, but simple software repackaging tools will include the Altiris Agent's registry or file location of the guid as part of the software package. Activity by the Altiris Agent can fool the packaging tool into thinking that the Guid belongs to the package. Deploying the bad software package overwrites the good guid with the one from the capture station. To avoid this problem, don't install the Altiris Agent on the workstation used for snapshoting the original software installation job.


The purpose of this document is to demonstrate how to use the Notification Server’s shared GUID diagnostics kit to successfully identify and remove computers within the Notification Server database. The attached MS Word document contains screenshots for additional clarity (it is now considered out-of-date, and is merely provided for historical reference).


You can install the diagnostics kit by following the steps below. This utility contains several collections, a report, a package to remove the shared guids, and platform specific tasks. These items are all created in a Shared Guid Diagnostics v6.04 folder that is created by the import.

Note: Altiris NS Agent version 1508 or later is required for this to work.

  1. Download the xml file attached to this article and save it to a location on the Notification Server
  2. Find a location to install this utility. For this example we will create a folder called “Diagnostics” within the Tasks folder.
  3. Highlight the folder that you created. Right-click and choose Import.
  4. You will be prompted to choose the file to import. Choose the Shared Guid Diagnostics v6.05.xml file.
  5. Once the file has been imported into the Notification Server database, you should see the following structure:
  6. Enable each applicable Reset Guid Task. It's only neccessary to enable the task for platforms that exist in your environment.

Possible Duplicate Guids

  • These collections will query the Notification Server database for all computers that have reported a change in their GUID in the past seven days. Computers in this collection are used by the associated task to reset the Guid on the client computers.
    Note: After fixing shared GUIDs in the database, there is a possibility that some computers will still show up here. This collection is checking to see if the computer record has been changed in the last seven days, not if it has been fixed. To retrieve an accurate report, use the GUIDs Shared between 2 or more computers report or view the Machines that have run the Reset Guid Task collection.

Machines that have run the Reset Guid Task.

  • This collection will display any computers that have run a reset guid task, giving you a report of the machines that have completed the fix. Keep in mind that this report can not be 100% accurate due to the problem that is being addressed by the reset guid tasks.

GUIDs Shared between 2 or more computers.

  • Analyzes computers that have been sharing the same GUID, this is recognized when frequent name changes are occuring on a specific NS computer record. Once the duplicate GUID has been cleaned up, you will see the results in this report. This report doesn't distinguish by platform, and will also include un-managed computer records. By design, collections can not include unmanaged computers.

Reset Guid Tasks

  • These packages are responsible for running the appropriate task on the computers that are sharing the guid. On the Windows platform, it will use a built-in utility to strip out the Altiris Agent's guid from the registry. There are multiple places that the guid can be stored, depending upon if the DS Aclient is also present, and or older versions of the Altiris Agent have ever been used.
    • For the Windows platform, the following command is used: AeXAgentUtil.exe /resetguid
    • For Unix, Linux, and Macintosh computers, the file containing the guid is deleted, and the Altiris Agent is restarted as a background process. The agent restart is neccessary to flush the GUID from memory.
  • A new Guid is created by the Notification Server after the Altiris Agent sends the computer name and domain to the Notification Server. For each shared guid, one of the computers will retain ownership of the computer resource record, the remaining computers will be assigned new guids (and thus new NS computer resource records).

By default, when this package in imported, the owner of the folder and items will be null. The administrative role will have access to this utility, but if permissions are to be set, you should set the ownership by doing the following:

  1. Right-click on the main folder
  2. Choose Properties
  3. Choose the Security Tab
  4. Choose the Take Ownership button.

To completely remove the Duplicate Diagnostic utility from your system, you should follow the steps below. Delete the following objects through the NS console (right-click > Delete).
1. Reset Guid tasks (3).
2. Possible Shared Guid collections (3)
3. Machines that have run the Reset Guid task collection
4. Guids shared between 2 or more computers report
5. The Reset Guid Agent Package. (You must first delete each "program" by clicking the delete button on the Programs tab of the package).

Altiris : Adding Dell Latitude E6400 NIC driver to WinPe 2.1

Following drivers can be added to the WinPe 2.1 boot image, via boot disk creator, for proper operation

HP 6930p Nic

How would you call this .... ? interoperatibility ? It works !

Monday, 1 December 2008

How to Add Google Analytics to Your Blogger Blog

Grab Your Google Analytics Code Block

  1. Login to Google Analytics at http://google.com/analytics/. The main Settings page loads.
  2. Click on Add Website Profile. A form displays.
  3. Select Add a Profile for a New Domain.
  4. Enter the URL of your site or blog.
  5. Select your country and time zone. Click Finish.
  6. Analytics provides you with a code block - a swatch of HTML - to add to your site's pages.
  7. Highlight the code block and then copy it by selecting Edit > Copy or Ctrl-C or Command-C.

Add the Google Analytics Code Block to Your Blogger Blog

  1. Login to http://www.blogger.com/. The Dashboard loads.
  2. Under the blog you want to add Analytics tracking to, click on Layout or Template.
  3. Click on Edit HTML. An editing screen for your blog template's HTML displays. Don't freak out. Just scroll to the bottom.
  4. Look for the end of the template. It'll look like:

</div> </div>
<!-- end outer-wrapper -->
(Google Analytics Code Block is going to go here!!!)

  1. Put your cursor right before that </body> tag.
  2. Paste the Google Analytics Code Block by selecting Edit > Paste, Ctrl -V or Command-V.
  3. Click Save Changes.

You have now added the Google Analytics Code Block to Your Blogger Blog.

Check Your Work

  1. To ensure that you have successfully added the Google Analytics Code Block to your Blogger blog, go back to http://google.com/analytics/.
  2. Next to your blog's URL it will say either Receiving Data (you were successful) or Tracking Not Installed (something is amiss).
  3. If it said Tracking Not Installed, click on Check Status. Google then checks your blog for the Analytics Code Block and reports back if it find it or not.
  4. If not, try re-pasting the Code Block in.

Credits for this post go to Andy Wibbels http://andywibbels.com/

Altiris : TFTP is slow on download of boot disks or PE


TFTP takes 25 minutes to download, when it should be taking 2–3 minutes max.


Deployment Solution 6.8, 6.9


TFTP Logging under the PXE Configuration Utility is set to All.


For normal use, TFTP logs should be set to Off or On with Errors. If it is not, then TFTP will log all traffic including packet response times and acknowledgements. This will cause slowdowns on TFTP boot disk downloads and WinPE ISO downloads.

To check this, go to the PXE Configuration Utility under Tools > PXE Configuration. Click on the Data Logs tab and either unselect the PXE MTFTP Logs or move the level to errors. Click Save or OK and check your TFTP traffic.

Compressing the WinPe PXE boot image

The next way to speed up the TFTP download time of your PXE image is to reduce its size. This can be achieved by compressing it -a tip which came from Mike Gibson, an Altiris Consultant, at the UK Altiris Forum meeting last year. The KB article however suffers from a lack in background information which makes it very difficult to troubleshoot in the event that your image compression doesn't work. So, consider that follows as KB22971 on steriods... and my hope is that this extra information will provide you a better starting point that I had. ;-)

The procedure for compressing the ISO image in broad terms is as follows,

  1. Install the Windows Embedded development Tools. This will give us the capability of using SDI technology (System Deployment Image) to convert our WinPE ISO image to the SDI format. This format is a portable XP Embedded file format, and it natively supports NTFS compression. It is this compression feature which we will make use of to bring our WinPE download size down.
  2. Convert the ISO image to an SDI file using the script attached to this article called called MakeSDI.bat. This is a modified version of the one downloadable directly from the Altiris KB.

    Substitute the existing WinPE boot option ISO image with the SDI file on the PXE server, adjusting the boot files accordingly.

  3. Give the PXE server a kick to resync

Sounds easy huh? Hmm... Lets give it a go...

Install the Windows XP SP1 Embedded Tools from Microsoft

  1. Download the web installer here.
  2. Run the Web Install program (XPEDDI.exe) and deselect all the products in theGUI with the exception of the topmost item, the Windows XP Embedded SP1 tools, and click 'Download Now'.

    Click to view.

  3. Once the tools are downloaded, click 'OK' to exit (you may receive a warning that disk 2 of setup cannot be found. I clicked 'OK' here, and everything seemed to work fine!)
  4. On the Windows Embedded setup screen, select Tools Setup to start installing the XP Embedded Studio tools. This suite of tools include the SDI utilities needed to create our compressed WinPE virtual disk image.

    Click to view.

  5. Click through the InstallShield wizard, leaving the defaults as is. The product key you'll find located in the text file C:\Program Files\Windows Embedded\Installer\DISK1\productkey.txt.

Create your WinPE source folder

Copy the contents of your WinPE ISO image to c:\WinPESrc. To remind yourself where the ISO is, open up the PXE Configuration utility and take a look at the WinPE boot options properties. The location of the ISO image is declared in the 'Final Location on PXE Server' text box, and should look similar to..\PXE\Images\MenuOption131.

The WinPE files can be grabbed from this ISO image in several ways,

  • Burn the ISO image to a CD, and then copy the contents to the folder
  • Use a Virtual CD-ROM application like Deamon Tools or Microsoft's XPVirtual CDROM Control Panel Applet to mount the ISO image.
  • Use a vitualisation product like VMWare Player or Workstation to mount the ISO image as a virtual CDROM Drive (yes, its overkill but if you already have VMWare installed and use if for development then this might actually be the fastest way!)
  • Use a disk imaging suite which supports ISO images like WinImage to explore and copy the contents off the ISO image.

Download and Run MakeSDI.bat

Download MakeSDI.bat from this article. Don't use the Altiris KB article download as it has a bug in the defrag commands and mine allows for a slightly bigger SDI file of 102MB rather than 94MB (I found the 94MB default to be a touch too small for my WinPE image).

The purpose of the MakeSDI batch file is to copy our WinPE source files onto a virtual disk represented by our SDI file. The syntax of MakeSDI.bat is as follows,


On my system, the X:\ is unused so I'm going to run this as

MakeSDI.bat C:\WinPESrc C:\WinPE.SDI X:

This script is does not (sadly) completely automate the process of creating your SDI file. There are three stages,

  1. Create the target SDI file, WinPE.SDI

    When the script runs, it will first use the SDI tools to create your SDI image fileC:\WinPE.SDI. This process creates a virtual disk, and sets its size to 103MB.

  2. Load the SDI Image as a virtual disk

    After the SDI file is created, the script pauses. In order to copy files to the SDI virtual disk image, we have to mount the image using the SDI Loader application. This is a manual process, and after pressing any key, the application loads. Click 'Add Disk' to browse to C:\WinPE.SDI. Once selected, click 'Done' to finish.

    Click to view.

  3. Clean, partition and mount the SDI Image

    After loading the SDI image as a virtual disk, we need to execute the following commands in DiskPart when it loads,

    1. list disk

      In order to point DiskPart to the correct disk for our disk operations, we must select the correct disk to operate on. This command reveals the currently attached disks. Our disk is the one listed as being 102MB, and should have the highest index (as it was the most recent disk to be attached to the system).

    2. select disk #

      Where # is the disk index discovered in the previous step. In most cases, the SDI disk will be disk 1, with disk 0 being your actual system harddisk.

    3. clean

      After selecting our SDI disk, we should ensure its completely blank. The clean command ensures the selected disk's partition table is wiped and ready for our next operation.

    4. create partition primary

      This command is quite remarkable in its clarity - this will create a primary partition on the disk. By default it will occupy the entire virtual space (minus a small overhead for the MBR, hence why I create the disk image 1MB more than the partition I want to write to it).

    5. assign letter=X

      This command assigns our newly made partition the drive letter X. At this point you should be able to view it in My Computer as an unformatted RAW filesystem.

  4. Format and File Copy

    Once you've completed the DiskPart, the X:\ drive is formatted with the NTFS filesystem (compression enabled) and the WinPE files are copied across. Viewing the X:\ drive in explorer should show this drive letter now as blue -reflecting the fact its been formatted as a compressed NTFS drive.

  5. Detach Virtual Disk

    After the files are copied across, the Storage Device Image Loader will be called again, this time to allow you to detach the virtual disk. Select your SDI file in the window, and click 'Remove Disk'.

    Notice this file is 102MB - nearly 50MB smaller than the original ISO image.

Replacing the WinPE.iso PXE Image with WinPE.SDI

Now that your virtual disk has been detached, your SDI file is safe to copy over to the PXE server to be used in your WinPE boot option. This process is actually rather tricky as syncing the PXE server with your new image file isn't directly supported by the PXE Configuration Utility interface. This means some manipulation behind the scenes is required.

In order for the following manual changes to make sense, it's wise to spend another minute or two re-iterating what happens when images are built and edited.

  • First, the PXE Server stores the configuration for each PXE boot menu in aMaster folder called ..\PXE\MasterImages\MenuOption###, where ### is a MenuOption number.

  • When images are edited in the PXE Configurator, an equivalent folder with the.tmp extension is created as a temporary working area for the new master.

  • When you've finished your edits and the option is saved in the interface, the temporary MenuOption folder replaces the live version. That is to say, theMenuOption### folder in MasterImages is deleted, and theMenuOption###.tmp folder is renamed to MenuOption###. Once this is complete, this folder is synced down to the PXE Server's live distribution folder under ..\PXE\Images.

With the above in mind, the steps load up our new PXE MenuOption with our SDI file are as follows,

  1. Delete the WinPE ISO Image from the MasterImage\MenuOption### folder

    As we'll not be booting off the WinPE.iso anymore, lets remove it from the Master folder. This will prevent the PXE server sync process being delayed by the copying of a now unused 150MB ISO image each time the Image folder gets synced with the MasterImage folder.

    On my server, the WinPE ISO image was stored under..\PXE\MasterImage\MenuOption131 (as revealed by looking at the properties of the PXE Boot option in the PXE Configuration Utility). So, the ISO I need to delete is in here, within the x86PC subfolder. Double check your particular MenuOption index, and delete the corresponding WinPE.ISO in the MasterImage folder now.

  2. Copy WinPE.SDI to the MasterImage\MenuOption folder

    In the folder you've just deleted the ISO image from, copy over into it the WinPE.SDI file. This is the file we are going to be downloading by TFTP instead of that previous bulky occupant, the ISO image.

  3. Modify Winnt.sif

    Winnt.sif currently expects to boot the WinPE ISO image. We need to modify this now so that it will accept the SDI image instead.

    The default Winnt.sif will look like (remember, in what follows ### is yourMenuOption number),

    BootDevice = "ramdisk(0)"
    BootPath = "\i386\system32\"
    OsLoadOptions = "/noguiboot /fastdetect /minint /rdexportascd /rdpath=MenuOption###\X86PC\winpe.iso /PXE_SERVER:**PXE_NAME** /PXE_IP:**PXE_IP** /PXE_PATH:MenuOption###\X86PC"

    and to make this load the SDI file we need to ammend the OsLoadOptions line as follows,

    OsLoadOptions = "/noguiboot /fastdetect /minint /rdimageoffset=36352 /rdpath=MenuOption###\X86PC\winpe.sdi /PXE_SERVER:**PXE_NAME** /PXE_IP:**PXE_IP** /PXE_PATH:MenuOption###\X86PC"

  4. Resync the PXE Server

    This is where it gets tricky, as the syncing the master folder requires us to do a little fudging.

    1. Open up the PXE Configuration Utility

    2. Select the WinPE option, and click 'Edit'.

    3. In the Edit Shared Menu Option window, select the Image Creation Method of User Supplied, and click 'Manual Boot Image'

    4. In the PXE Boot Files box that pops up, browse to any small folder on your C:\ Drive which has some .exe files (I typically choose my DOS files folder) and click OK. This step gears puts the PXE configurator into the stage where it creates the .tmp Master folder. Don't worry about the fact you've just put some random small files in here -the in the next step we will delete them!

    5. Delete the ..\PXE\MasterImages\MenuOption###.tmp folder which was created by the last step. We'll be fooling the PXE Configuration Utility into using our own .tmp folder in the next step.

    6. Rename the ..\PXE\MasterImages\MenuOption### folder to..\PXE\MasterImages\MenuOption###.tmp folder. Remember, the .tmpfolder is a staging area for the PXE Configurator, and this now contains our SDI WinPE build

    7. Close the Edit Shared Menu Option window by clicking 'OK'. Our .tmpmaster folder is now moved to the last staging point in the PXE Server as a .wrk folder

    8. In the PXE Configuration Utility, click 'OK' and when prompted save your work. This process moves the .wrkfolder to the master folder, and resyncs with the files in the ..\PXE\Images\MenuOption### folder

And that's it - your PXE server should be loaded up with a nice new trip WinPE Image. Try downloading now, and you should see a further drop in the WinPE TFTP download time, of about one third.

Making your TFTP downloads, necessary for WinPE, faster

To increase the TFTP server block size do the following,

  1. Open up the PXE configuration utility
  2. Select the Multicast tab
  3. In the Packet Size text box, change the value from 768 to 1456

    Click to view.

  4. Click 'Save' to push these settings to the TFTP server
  5. Click 'OK' to exit the PXE configuration Utility

Try imaging with PXE now -your TFTP transfer time of the PXE image should now betwice as fast! Not bad for a minutes work at the console.

How To Add VMware Flexible NIC Driver For WinPE 2.1 x86/x64 Automation

By default, WinPE 2.1 x86/x64 supports the VMware NIC model e1000. When
possible, use this NIC model with your virtual machines. However, a
virtual machine created for Windows 2003 x86 Standard Edition can only
use the VMware Flexible NIC which is not supported by default.
To add VMware Flexible NIC support into the WinPE 2.1 x86/x64 automation
1.       On the Deployment Server, copy the VMware Tool ISO file from a
VMware ESX Server at /vmimages/tools-isoimages/windows.iso or create a
physical CD-ROM.
2.       Mount or extract the VMware Tool for ESX Server ISO/CD-ROM.
3.       Run the PXE Configuration utility.
4.       Select WinPE Managed boot menu option and click Edit.
5.       Click Edit Boot Image. The Altiris Boot Disk Creator will run.
6.       At Step 9, click Edit.
7.       At Step 1, click Next.
8.       At Step 2, click Have Disk.
9.       Click Browse and browse to the VMware Tool for ESX Server
ISO/CD-ROM contents and its \Program Files\VMware\VMware
Tools\Drivers\vmxnet\win2k\32bit directory.
10.      Select the vmware-nic.inf file and click Open. If prompted that
driver is an unsupported class type, click Yes and click Ok.
11.      Repeat step 7 through 9 to select the x64 driver, vmxnet.inf,
from the VMware Tool for ESX Server ISO/CD-ROM contents and its \Program
Files\VMware\VMware Tools\Drivers\vmxnet\win2k\64bit directory.
12.      Continue with the Boot Disk Creator wizard to generate the
WinPE images.
13.      After the wizard completes, click Save.
12.      After the save completes, click OK. It will take several
minutes for the PXE server to replicate the PXE images.

Using WinPE 2.1 with VMWare virtual machines

You must use Intel E1000 network card emulation instead of AMD pcnet network card emulation. See http://juice.altiris.com/tip/2919/tweaking-vmware-work-winpe-2x-and-microsoft-vista for instructions.
Excerpts from the link:

The following works for VMware WorkStation 5.5 and 6.0 and VMware Server 1.0+. By make the following alterations, WinPE 2.x will work seamlessly with network drivers.

  1. Make sure VMware is not running. Stop any virtual machines running and close VMware.
  2. Browse to the Virtual machine files and open the .vmx file with your favorite text editor.
  3. Add the following to the <Path to VM> .vmx file:
    ethernet0.virtualDev = "e1000"

    This is right after the ethernet0.present = "TRUE".

  4. Save the changes.
  5. Start your virtual machine.

Virtual machines with installed operating systems such as Microsoft Windows Vista or Microsoft Windows XP might have an issue with the drivers after this change. Change the network drivers and point to c:\windows\system32 for the drivers. Or download the latest e1000(Intel) driver.

Client Agent Version Report Discrepancy

Article ID: 31475


Client Agent Version Report displays different client counts on the Level 0 and Level 1 sections of the report


Level 0 SQL query uses vItem view and Level 1 SQL query uses vComputer view.  vComputer filters out retired assets.


Change the Level 0 SQL query to query the vComputer view.  Replace all instances of vItem in the level 0 query with vComputer.