Skip to content

Commit 077ce0b

Browse files
authored
Create CI Deduplication Tasks Generation.js
This script finds duplicate hardware CIs by their serial number and creates remediation tasks.
1 parent 55f3cb9 commit 077ce0b

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/**
2+
* This script re-checks all duplicate hardware CIs by serial number and creates
3+
* a de-duplication task for any group that does not already have an open task.
4+
* It leverages the global.CMDBDuplicateTaskUtils Script Include.
5+
*/
6+
7+
(function() {
8+
9+
var ciTable = 'cmdb_ci_hardware'; //Change to any CI table of your choosing
10+
11+
var groupsFound = 0;
12+
var tasksCreated = 0;
13+
var groupsSkipped = 0;
14+
15+
16+
var taskUtil = new global.CMDBDuplicateTaskUtils();
17+
18+
// Find all serial numbers that have duplicates using GlideAggregate.
19+
var ga = new GlideAggregate(ciTable);
20+
ga.addNotNullQuery('serial_number');
21+
ga.addQuery('serial_number', '!=', '');
22+
ga.addAggregate('COUNT', 'serial_number');
23+
ga.groupBy('serial_number');
24+
ga.addHaving('COUNT', '>', 1);
25+
ga.query();
26+
27+
gs.info('Starting check for duplicate CIs by serial number...');
28+
29+
while (ga.next()) {
30+
groupsFound++;
31+
var serialNumber = ga.getValue('serial_number');
32+
var sysIdArray = [];
33+
var taskExists = false;
34+
35+
// For each duplicate serial number, get all associated CI sys_ids.
36+
var ciGr = new GlideRecord('cmdb_ci_hardware');
37+
ciGr.addQuery('serial_number', serialNumber);
38+
ciGr.query();
39+
while (ciGr.next()) {
40+
sysIdArray.push(ciGr.getUniqueValue());
41+
}
42+
43+
// Check if ANY of the CIs in the group are already in an open task.
44+
for (var i = 0; i < sysIdArray.length; i++) {
45+
if (!taskUtil.hasNoOpenDuplicateTasks(sysIdArray[i])) {
46+
taskExists = true;
47+
break; // Found an open task, no need to check the others.
48+
}
49+
}
50+
51+
// If no open task exists for this group, create one.
52+
if (taskExists) {
53+
groupsSkipped++;
54+
gs.info('--> Skipping Serial Number "' + serialNumber + '". It is already part of an open task.');
55+
} else {
56+
var sysIdString = sysIdArray.join(',');
57+
var newTaskId = taskUtil.createDuplicateTask(sysIdString);
58+
if (newTaskId) {
59+
tasksCreated++;
60+
gs.info('==> Successfully created task ' + newTaskId + ' for Serial Number "' + serialNumber + '".');
61+
} else {
62+
gs.error('==> FAILED to create task for Serial Number "' + serialNumber + '".');
63+
}
64+
}
65+
}
66+
67+
// --- Final Summary ---
68+
gs.info('--- Re-check Complete ---');
69+
gs.info('Total Duplicate Groups Found: ' + groupsFound);
70+
gs.info('New Remediation Tasks Created: ' + tasksCreated);
71+
gs.info('Groups Skipped (Already in an open task): ' + groupsSkipped);
72+
gs.info('--------------------------');
73+
74+
})();

0 commit comments

Comments
 (0)