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

This one seems to be returning everything from the Encoded Query

 

find_real_file.png

So it should only be returning the result if same CI showed up twice for two different discovery sources. 

@Looper23 can you post your script here lets see?

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);
}

@Looper23 so if same CI name but different discovery source try this

i added one more query 

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.addQuery('discovery_source','!=', gr.discovery_source);
    dup.query();
    while (dup.next()) {
        var obj = {};
        obj.name = dup.name.toString();
        obj.source = dup.discovery_source.getDisplayValue();
        duparr.push(obj);
    }
}
var parsed = JSON.stringify(duparr);
var str = JSON.parse(parsed)
for (var i = 0; i <str.length; i++) {
    gs.print("Name :" +str[i].name + " " + "Discovery Source :" +str[i].source);
}