After the customer migrated his database to a new SMP Server, the following warning started to happen while trying to replicate "Preboot Configurations" setting (under SMP Console>Settings>Deployment):
Unable to export the specified object during replication (Task: Replicate, Type: Item, Guid: {cceb6e9c-8a7f-4deb-a94f-57dae7c46622}, Exception: System.NullReferenceException: Object reference not set to an instance of an object.
Unable to export the specified object during replication (Task: Replicate, Type: Item, Guid: {cceb6e9c-8a7f-4deb-a94f-57dae7c46622}, Exception: System.NullReferenceException: Object reference not set to an instance of an object.
at Altiris.Deployment.PrebootConfigPolicy.OnToXml(XmlTextWriter xmlBuilder)
at Altiris.NS.ItemManagement.Item.Export()
at Altiris.NS.Replication.Providers.Item.SourceReplicationImportExportProvider.ExportObject(String type, Guid guid)
at Altiris.NS.Replication.Providers.Item.SourceReplicationImportExportProvider.ReplicateObjects(ReplicationJob jobItem, String jobId, String operationId, String type, ReplicationManifest2 manifest, ReplicationServersInfo serverInfo, Boolean dataSent)).
-----------------------------------------------------------------------------------------------------
Date: 9/3/2019 4:12:58 PM, Tick Count: 19945921 (05:32:25.9210000), Size: 986 B
Process: AeXSvc (7032), Thread ID: 453, Module: AeXSVC.exe
Priority: 2, Source: SourceReplicationImportExportProvider.ReplicateObjects
ITMS 8.1 RU7 and later
Since it was a migration to a new server, some references for the "Preboot Configurations" are meant to be unique to the server where those were created. One of those references was not present on the new server (in this case the "PEInstall" configuration).
Suggestion 1:
Check the following:
Note: in some extreme cases, repairing DS installation may recreate those missing references.
Suggestion 2:
The following script will identify any deleted preboot configurations and remove them from the following places:
-- Feed Preboot Configurations State column into a temp table.
select cast(state as xml) as State
into #temp
from item
where guid = 'CCEB6E9C-8A7F-4DEB-A94F-57DAE7C46622'
declare @configurationGuid uniqueidentifier
declare PrebootPurge CURSOR FOR
-- Begin parsing of Preboot Configurations state column for all registered Preboot Configuration Guids
select aic.ItemGuid
from
(
select preboot.value('(.)[1]','uniqueidentifier' ) as ConfigurationGuid
from #temp t
cross apply t.State.nodes('item/PrebootConfigurationPolicy/PrebootConfigurationGuids/*') tn(preboot)
) a
join Automation_Image_Configuration aic on aic.ItemGuid = a.ConfigurationGuid and aic.ActionType in (-1,0)
-- End parsing of Preboot Configurations state column for all registered Preboot Configuration Guids
OPEN PrebootPurge
FETCH NEXT FROM PrebootPurge INTO @configurationGuid
WHILE @@FETCH_STATUS = 0
BEGIN
-- Insert deleted preboot configurations into ItemToDelete
insert into ItemToDelete
select i.Guid, getdate()
from Item i
left join ItemToDelete d on d.Guid = i.Guid
where i.Guid = @configurationGuid
and d.Guid is null
-- Remove deleted preboot configurations from table Automation_Image_Configuration
delete from Automation_Image_Configuration where ItemGuid = @configurationGuid
-- Remove deleted preboot configurations from the State column of the main "Preboot Configurations" object
UPDATE Item
SET [State] = replace(cast([State] as nvarchar(max)),
'<ItemGuid>'+cast(@configurationGuid as nvarchar(36))+'</ItemGuid>',
''),
ModifiedDate = getdate()
WHERE Guid = 'CCEB6E9C-8A7F-4DEB-A94F-57DAE7C46622' -- Preboot Configurations
-- ***************
FETCH NEXT FROM PrebootPurge INTO @configurationGuid
END
CLOSE PrebootPurge
DEALLOCATE PrebootPurge
DROP TABLE #temp