Need to run background script to find duplicate CI names using a unique name on another column

Looper23
Tera Contributor

I want to run a background script so I can find duplicate CI's using the name column but have unique value in another column (discovery_source). In this case I should return two results; Notifier and Scan. Can anyone help? 

find_real_file.png

13 REPLIES 13

palanikumar
Mega Sage

You can use GlideAggregate in this case

var ga = new GlideAggregate('cmdb_ci');
ga.addQuery('active', '=','true');
// add proper filter condition so that the query does not take more time
ga.addAggregate('COUNT', 'name');
ga.query();  
while (ga.next()) {
   var name = ga.category;
   var count = ga.getAggregate('COUNT', 'name');
   gs.info("Name :  " + name + " count : " + count);
}
Thank you,
Palani

Mohith Devatte
Tera Sage
Tera Sage

Hello @Looper23 ,

you can try this script 

var duparr=[];
var gr = new GlideRecord('cmdb_ci');
gr.addQuery('<field_name>','<value>') // put your query if you want to filter unwanted records which will save the execution time
gr.query();
while(gr.next())
{
var dup= new GlideRecord('cmdb_ci');
dup.addQuery('name',gr.name);
dup.addQuery('sys_id','!=',gr.sys_id);
dup.query();
while(dup.next())
{
var obj ={};
obj.name = dup.name.toString();
obj.source = dup.discovery_source.getDisplayvalue();
duparr.push(obj);
}
}
var parsed = JSON.parse(duparr);
for(var i=0; i<parsed.length; i++)
{
gs.print("Name :"+parsed[i].name+" "+"Discovery Source :"+parsed[i].source);
}

PLEASE MARK MY ANSWER CORRECT IF IT HELPS YOU

Hi, i'm running your script and added the EncodedQuery but getting following error

 

Error

Evaluator: org.mozilla.javascript.EcmaError: Unexpected token: o
   Caused by error in script at line 155
Evaluator: org.mozilla.javascript.EcmaError: Unexpected token: o
   Caused by error in script at line 17

     14:         duparr.push(obj);
     15:     }
     16: }
==>  17: var parsed = JSON.parse(duparr);
     18: for (var i = 0; i < parsed.length; i++) {
     19:     gs.print("Name :" + parsed[i].name + " " + "Discovery Source :" + parsed[i].source);
     20: }

 

Script

var duparr = [];
var gr = new GlideRecord('cmdb_ci');
gr.addEncodedQuery('discovery_source=ServiceNow^ORdiscovery_source=OpenView^ORdiscovery_source=ServiceWatch')
gr.query();
while (gr.next()) {
    var dup = new GlideRecord('cmdb_ci');
    dup.addQuery('name', gr.name);
    dup.addQuery('sys_id', '!=', gr.sys_id);
    dup.query();
    while (dup.next()) {
        var obj = {};
        obj.name = dup.name.toString();
        obj.source = dup.discovery_source.getDisplayvalue();
        duparr.push(obj);
    }
}
var parsed = JSON.parse(duparr);
for (var i = 0; i < parsed.length; i++) {
    gs.print("Name :" + parsed[i].name + " " + "Discovery Source :" + parsed[i].source);
}

@Looper23 try this script please 

var duparr = [];
var gr = new GlideRecord('cmdb_ci');
gr.addEncodedQuery('discovery_source=ServiceNow^ORdiscovery_source=OpenView^ORdiscovery_source=ServiceWatch')
gr.query();
while (gr.next()) {
    var dup = new GlideRecord('cmdb_ci');
    dup.addQuery('name', gr.name);
    dup.addQuery('sys_id', '!=', gr.sys_id);
    dup.query();
    while (dup.next()) {
        var obj = {};
        obj.name = dup.name.toString();
        obj.source = dup.discovery_source.getDisplayvalue();
        duparr.push(obj);
    }
}
var str = JSON.stringify(duparr);
var parsed = JSON.parse(str);
for (var i = 0; i < parsed.length; i++) {
    gs.print("Name :" + parsed[i].name + " " + "Discovery Source :" + parsed[i].source);
}