Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

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