21 February 2006

Deployment Solution Groups empty

Deployment Solution Groups that are scraped into NS do not show correctly in the Altiris Console. They may exhibit one or more of the following symptoms: No instance of a server appears or the Deployment Server Group does not update its Groups and/or Computers.

The reason is that the Deployment Server’s database tracks any changes made to it since the last synchronization occurred. If the Notification Server never receives the data that was sent during the last synchronization or if a backup copy of the Notification Server database was restored that doesn’t have that data or if for any other reason the Notification Server does not have the data that was sent in prior synchronizations, the Deployment Server Agent will not resend that data to the Notification Server, it will only send changes that were made since the last time synchronized data was sent.

There are two steps to resolving this issue.

Step 1 is to run one SQL query against the Notification Server (Altiris) database to wipe out the corrupt data from that database.

Step 2 is to run one SQL query against the Deployment Server (eXpress) database(s) to force the Deployment Server Agent to send ALL data from the Deployment Server database to the Notification Server as if it were new data.

There are two options for Step 1. The Step 1 Option A query will remove data from the Notification Server (Altiris) database concerning the Deployment Server that was specified in the query. To wipe out data for more than one Deployment Server, run the query once for each Deployment Server. It is then necessary to run the Step 2 query against the (eXpress) database of each Deployment Server where the Step 1 Option A query was run.

The Step 1 Option B query will remove data from the Notification Server (Altiris) database concerning ALL the Deployment Servers. It will then be necessary to run the Step 2 query against the (eXpress) database of ALL the Deployment Servers.


Step 1 Option A: run this script against the Altiris database to selectively remove the Deployment Server(s) from the Altiris database. Before running this script, it is required to replace <ServerName> with the name of the Deployment Server to be removed from the Altiris database.

*****Begin Query*****
/*WARNING: This script is intended to wipe out any data in the Altiris
database pertaining to a specific Deployment Server. Replace <ServerName>
with the name of the Deployment Server you want your Notification Server
to "forget", then run the script against the Altiris database.*/
DECLARE
@servername varchar(255)
SELECT @servername = '<ServerName>'
DELETE FROM Inv_AeX_AC_Client_Agent
WHERE [Agent Name] = 'Deployment Solution Agent'
AND _ResourceGuid IN (SELECT ResourceGuid FROM CollectionIncludeResource
WHERE CollectionGuid IN (SELECT [NS Guid] FROM DSObjectMap
WHERE Server = @servername))
DELETE FROM Evt_AeX_DS_Assigned_Jobs
WHERE DBServer = @servername
DELETE FROM Inv_AeX_DS_Database
WHERE [Deployment Server] = @servername
DELETE FROM Inv_AeX_DS_Machine_Inventory
WHERE _id IN (SELECT _id FROM Inv_AeX_DS_Machine
WHERE [Deployment Server] = @servername)
DELETE FROM Inv_AeX_DS_Machine
WHERE [Deployment Server] = @servername
DELETE FROM DSComputerFolder
WHERE DatabaseID IN (SELECT DatabaseID FROM DSDatabase
WHERE DBServer = @servername)
DELETE FROM DSJobFolder
WHERE DatabaseID IN (SELECT DatabaseID FROM DSDatabase
WHERE DBServer = @servername)
DELETE FROM DSJobConditions
WHERE JobID IN (SELECT JobID FROM DSJobs
WHERE DatabaseID IN (SELECT DatabaseID FROM DSDatabase
WHERE DBServer = @servername))
DELETE FROM DSJobs
WHERE DatabaseID IN (SELECT DatabaseID FROM DSDatabase
WHERE DBServer = @servername)
DELETE FROM DSDatabase
WHERE DBServer = @servername
DELETE FROM Item
WHERE Guid IN (SELECT [NS Guid] FROM DSObjectMap
WHERE Server = @servername)
DELETE FROM Item
WHERE ClassGuid = 'F1E8956A-A158-487F-8185-4C3B492734E7'
AND ProductGuid = '74093212-3CBB-4E0E-AB79-6283D44DB5A1'
AND Name LIKE 'DS Server ' + @servername + '%'
DELETE FROM DSObjectMap
WHERE Server = @servername
DELETE FROM CollectionIncludeResource
WHERE CollectionGuid NOT IN (SELECT Guid FROM Item)
DELETE FROM ItemReference
WHERE ParentItemGuid NOT IN (SELECT Guid FROM Item)
AND ParentItemGuid != '00000000-0000-0000-0000-000000000000'
DELETE FROM ItemReference
WHERE ChildItemGuid NOT IN (SELECT Guid FROM Item)
*****End Query*****


Step 1 Option B, run this script against the Altiris database to remove ALL Deployment Server(s) from the Altiris database. Before you run the script, you must replace <ServerName> with the name of the Deployment Server you want to be removed from the Altiris database.


*****Begin Query*****
/*WARNING: This script is intended to wipe out ALL data in the
Altiris database pertaining to ANY Deployment Server.
Simply run the script against the Altiris database.*/
DELETE FROM Inv_AeX_AC_Client_Agent
WHERE [Agent Name] = 'Deployment Solution Agent'
DELETE FROM Evt_AeX_DS_Assigned_Jobs
DELETE FROM Inv_AeX_DS_Database
DELETE FROM Inv_AeX_DS_Machine_Inventory
DELETE FROM Inv_AeX_DS_Machine
DELETE FROM DSComputerFolder
DELETE FROM DSJobFolder
DELETE FROM DSJobConditions
DELETE FROM DSJobs
DELETE FROM DSDatabase
DELETE FROM Item
WHERE ClassGuid = 'B8B666E1-FED3-4482-8D5A-0895658317B2'
AND ProductGuid = '74093212-3CBB-4E0E-AB79-6283D44DB5A1'
DELETE FROM Item
WHERE ClassGuid = 'F1E8956A-A158-487F-8185-4C3B492734E7'
AND ProductGuid = '74093212-3CBB-4E0E-AB79-6283D44DB5A1'
AND Name LIKE 'DS Server %'
DELETE FROM DSObjectMap
DELETE FROM CollectionIncludeResource
WHERE CollectionGuid NOT IN (SELECT Guid FROM Item)
DELETE FROM ItemReference
WHERE ParentItemGuid NOT IN (SELECT Guid FROM Item)
AND ParentItemGuid != '00000000-0000-0000-0000-000000000000'
DELETE FROM ItemReference
WHERE ChildItemGuid NOT IN (SELECT Guid FROM Item)
*****End Query*****


Step 2, run this script against the eXpress database(s) and then allow the Deployment Server resynchronization to occur at least twice.

*****Begin Query*****
/*Update the changeitem information to tell
Notification Server to delete all information
about this Deployment Server during the
next synchronization*/
UPDATE changeitems
SET _nslastsent = NULL
UPDATE changeitems
SET [change type] = 'deleted'
UPDATE changeitems
SET ns_guid = NULL
UPDATE changeitems
SET [change date] = getdate()
UPDATE event_schedule
SET _nslastsent = NULL
UPDATE history
SET _nslastsent = NULL
INSERT changeitems
SELECT c.computer_id, 'computer', 'deleted', getdate(), c.computer_name, c.domain_name, c.ns_guid, null
FROM computer c
WHERE c.computer_id NOT IN (select id FROM changeitems)
GO

/*Create a trigger that will run once after the
first synchronization completes and recreates the
changeitem table to ensure that only accurate
data is sent to the Notification Server on the
second synchronization*/
CREATE TRIGGER temp_reload_changeitems ON [dbo].[changeitems]
FOR INSERT, UPDATE, DELETE
AS
BEGIN
/*Only run this query if the Deployment Server Agent synchronization has completed and the trigger isn't already running*/
IF NOT EXISTS (SELECT id FROM changeitems WHERE _nslastsent IS NULL) AND EXISTS (SELECT id FROM changeitems)
BEGIN
/*Wipe out the changeitems table so it can be recreated*/
DELETE FROM changeitems
/*Insert Computer Group information*/
INSERT changeitems
SELECT g.group_id, 'computer_group', 'inserted', GETDATE(), NULL, NULL, NULL, NULL
FROM computer_group g
/*Insert Event Folder information*/
INSERT changeitems
SELECT f.folder_id, 'event_folder', 'inserted', GETDATE(), NULL, NULL, NULL, NULL
FROM event_folder f
/*Insert Event information*/
INSERT changeitems
SELECT e.event_id, 'event', 'inserted', GETDATE(), NULL, NULL, NULL, NULL
FROM event e
UPDATE computer
SET _nslastsent = NULL
UPDATE computer
SET ns_guid = NULL
UPDATE event_schedule
SET _nslastsent = NULL
UPDATE history
SET _nslastsent = NULL
/*Self destruct this trigger so it is only run once*/
DROP TRIGGER temp_reload_changeitems
END
END
GO

Howto Fix : Unable to get the config xml for the specified item

Question:
What is the cause of the a.log error "Unable to get the config xml for the specified item <guid>," and how can it be resolved?
Answer:
This error is generally caused when a NS tree object is orphaned in the database.

The steps to clean up the "unable to get the config xml for the specified item <guid>" message from your logs are as follows:

     1. Run the following script: nscript.exe deleteanitem.cs <GUID>. The deleteanitem.cs file is attached to the end of this article. This script deletes the orphaned object. Always validate the GUID before removing it. This can be done by the following steps:
          a. Open SQL Query Analyzer.
          b. Make sure that you select the correct database, i.e. Altiris.
          c. Type the following:  select * from vitem where guid like '<GUID>'

If it does not show, then go ahead and complete step 1.

Note: The nscript.exe file is found in ...\program files\altiris\notification server\bin.

     2. If the script in step 1 does not remove the NS tree object, then there is likely an association that needs to be removed. This can be done with the following script:
     delete from ItemReference where hint = 'policyappliestocollection' and ParentItemGuid = <GUID>

20 February 2006

How to do a clean reinstall of PXE 6.5

Question


How do I reinstall my PXE Manager and PXE server cleanly so that nothing is carried over from the previous installation?



--------------------------------------------------------------------------------

Answer


Sometimes, due to certain environment issues, a PXE server can install incorrectly and become corrupted because of some other environment change. This can create the need to do a clean reinstall of PXE. The following steps explain a detailed process of uninstalling and reinstalling PXE without keeping anything from the previous installation.

If you reinstall PXE using this method you will lose all PXE boot menu configurations and options. These will need to be recreated after installing PXE in this way. All jobs created in the Deployment Server console and images captured from client machines will be unaffected.

If you want to keep your PXE menu options from your previous installation you will need to back up your PXE boot menu. The following linked article explains how to migrate a PXE boot menu from one server to another. These steps can also be used to backup and restore the PXE boot menu after reinstallation.

Browse to the following path on your Deployment Server:
C:\Program Files\Altiris\eXpress\Deployment Server\PXE\MMAccessKey.ini
Copy this file into another directory outside of the PXE folder and keep it as a backup. This exact file will be needed after the uninstall of PXE. If this file is lost you will need to reinstall the entire Deployment Server to recreate the file.
Go to Add or Remove Programs in the Windows console panel and uninstall the following two components:
Altiris PXE Manager
Altiris PXE Server
Delete the following folder and all files in that folder:
C:\Program Files\Altiris\eXpress\Deployment Server\PXE
Do a search on your Deployment Server (search the entire computer, all drives) for "PXE*.*". Delete any files and folders that appear to contain an installation of a PXE Server. Be carefull not to delete any of the PXE installation files normally contained in the DSSetup directory. Mainly you want to make sure that no previous PXE installations from a different version exist, or are installed to a different drive or another folder on your system. Also do a search on your entire computer for "CDSA*" and delete any occurrences of that term.
Recreate the PXE folder under the Deployment Server folder (the same folder that was deleted in step 3). This folder should not contain any files at this point.
Copy the MMAccessKey.ini file back into the PXE folder created in step 5.
Reinstall the PXE Manager by running PXEMgr.exe from the DSSetup folder. Go through the wizard entering all of the information that it requests. When the wizard asks for a username, make sure if you are using a local machine account that you put the machine name in the username (that is, if the DS computer name was "AltirisDS" and the username was "Administrator" you would enter "AltirisDS\Administrator"). If you do not have the DSSetup folder (because it was deleted after installing Deployment Server), you will need to recreate that folder by running the Deployment Server installer file and selecting "Extract Only".
Reinstall the PXE Server by running PXE.exe from the DSSetup folder. Go through the installation wizard of that component entering in all requested information.
Verify that all PXE services are running. If they are not running, try to start them and note any error message that it gives, or the event log entries that show the error. If all services are running correctly open the PXE Configuration Utility to verify that PXE is working correctly.

Automaticlly Merge Duplicates

How do I automatically merge all duplicate computers found in the Merge Computers report-utility?

Author: 1116

Question:
How do I automatically merge all duplicate computers found in the Merge Computers report-utility (located under the Configuration Tab > Server Settings > Notification Server Settings > Merge Computers > Merge computers with duplicate names)?
Answer:
The following script will automatically merge all resouces found in the above mentioned report: DECLARE @MergeName nvarchar(400)DECLARE @MergeDomain nvarchar(400)DECLARE @FromGuid uniqueidentifierDECLARE @ToGuid uniqueidentifier DECLARE @PrimaryResource UNIQUEIDENTIFIER PRINT 'The following script will automatically merge resources as per the ''Merge computers with duplicate names'' report.'PRINT 'The merge automatically chooses the resource that has the most recent update.' DECLARE merge_cursor CURSOR FOR SELECT Ident.[Name], Ident.[Domain] FROM Inv_AeX_AC_Identification Ident INNER JOIN ( SELECT Ident1.[_ResourceGuid], Ident1.[Name], Ident1.[Domain] FROM Inv_AeX_AC_Identification Ident1 INNER JOIN Inv_AeX_AC_Identification Ident2 ON Ident2.[Name] = Ident1.[Name] AND Ident2.[Domain] = Ident1.[Domain] AND Ident2.[_id] != Ident1.[_id] INNER JOIN vComputerResource Ident3 ON Ident1.[_ResourceGuid] = Ident3.[Guid] GROUP BY Ident1.[_ResourceGuid], Ident1.[Name], Ident1.[Domain] ) udr ON Ident.[_ResourceGuid] = udr.[_ResourceGuid] GROUP BY Ident.[Name], Ident.[Domain] OPEN merge_cursor FETCH NEXT FROM merge_cursorINTO @MergeName, @MergeDomain WHILE @@FETCH_STATUS = 0BEGIN PRINT 'Merging ' + @MergeName + '.' + @MergeDomain CREATE TABLE #DUPLICATE_NAME (Resource UNIQUEIDENTIFIER, [Primary] BIT, [Name] NVARCHAR(64), [Domain] NVARCHAR(64), LastUpdated DATETIME, [OS Name] NVARCHAR(64)) INSERT INTO #DUPLICATE_NAME SELECT ident1.[_ResourceGuid] AS [Resource], CAST (0 AS BIT) AS [Primary], ident1.[Name], ident1.[Domain], md.[ModifiedDate] AS [LastUpdated], ident1.[OS Name] FROM Inv_AeX_AC_Identification ident1 JOIN ( SELECT ident2.[Name], ident2.[Domain] FROM Inv_AeX_AC_Identification ident2 GROUP BY ident2.[Name], ident2.[Domain] HAVING COUNT (ident2.[Name]) > 1 AND ident2.[Name] = @MergeName AND ident2.[Domain] = @MergeDomain ) dr ON ident1.[Name] = dr.[Name] and ident1.[Domain] = dr.[Domain] LEFT OUTER JOIN ( SELECT DISTINCT rus.[ResourceGuid], rus.[ModifiedDate] FROM ResourceUpdateSummary rus JOIN ( SELECT rus2.[ResourceGuid], MAX( rus2.[ModifiedDate] ) AS ModifiedDate FROM ResourceUpdateSummary rus2 GROUP BY rus2.[ResourceGuid] ) td ON td.ResourceGuid = rus.ResourceGuid AND td.ModifiedDate = rus.ModifiedDate ) md ON ident1.[_ResourceGuid] = md.[ResourceGuid] SELECT TOP 1 @PrimaryResource = Resource FROM #DUPLICATE_NAME ORDER BY [LastUpdated] DESC UPDATE #DUPLICATE_NAME SET [Primary]=1 WHERE Resource = @PrimaryResource /*SELECT * FROM #DUPLICATE_NAME ORDER BY [LastUpdated] DESC*/
SELECT TOP 1 @ToGuid = Resource FROM #DUPLICATE_NAME where Name = @MergeName and Domain = @MergeDomain and [Primary] = '1' SELECT TOP 1 @FromGuid = Resource FROM #DUPLICATE_NAME where Name = @MergeName and Domain = @MergeDomain and [Primary] = '0' DROP TABLE #DUPLICATE_NAME exec spResourceMerge @FromGuid,@ToGuid FETCH NEXT FROM merge_cursor INTO @MergeName, @MergeDomain END

15 February 2006

Enable Bulletins

Enable A lot of Bulletins

Body: 1. Introduction
This script will enable patch bulletins depending on the command line parameters entered, and create a software update task for each. Length of time to enable a bulletin will depend on how many files need to be downloaded within each bulletin.
2. General Instructions
a. Place the following files is in C:\Program Files\Altiris\Notification Server\bin.
i. Nscript.exe (in there by default)
ii. Nscript.exe.config (in there by default)
iii. Nscript.nrf
iv. EnableBulletins.cs
v. .txt file with a list of bulletins to be enabled (if applicable)
3. To Enable Specific bulletins **See Note 1
a. Create a .txt file (like SampleBulletinList.txt) and create a list of bulletins to be enabled.
b. From a command prompt run "NScript.exe EnableBulletins.cs YourTextFile.txt" ** See Note 2
4. To Enable All Bulletins with a Specific Security Rating
a. From a command prompt run "NScript.exe EnableBulletins.cs critical" ** See Note 3
5. To Enable All Bulletins
a. From a command prompt run "NScript.exe EnableBulletins.cs"


The script file can be obtained by a simple mail