- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-20-2018 12:24 AM
Hi all,
I am pretty sure that I am close, however, the script is not running for all users in the array.
This is what I have so far:
var admins = ["user1","user2"]; //array
for(var i = 0; i < admins.length; i++) //for loop
{
var gr = new GlideRecord('sys_user_grmember');
gr.initialize();
gr.user = admins[i];
gr.group.setDisplayValue('Admin')
gr.setWorkflow(false);
gs.print(gr.insert());
}
So the script adds user1 to the group, and then also adds a blank entry in the user list of the group
anyone know what I'm missing?
Thanks, Brendan
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-24-2018 12:52 AM
Morning Brendan,
Try out the code below, i've just given it a little test and it seems to work as required. Obviously you'll need to change the user names and the group to whatever is on your instance.
var admins = ["abel.tuter","abraham.lincoln"];
for(var i = 0; i < admins.length; i++) {
//check user is not already in group
var gr = new GlideRecord('sys_user_grmember');
gr.addEncodedQuery('user.user_name=' + admins[i] + '^group.name=Service Desk');
gr.query();
gs.debug(admins[i] + ": " + gr.hasNext());
if (!gr.hasNext()){
//use user_name to get the user record
var usrGr = new GlideRecord('sys_user');
if(usrGr.get('user_name', admins[i])) {
//add the new record to the group
gr.initialize();
gr.user = usrGr.getValue('sys_id');
gr.group.setDisplayValue('Service Desk');
gr.setWorkflow(false);
gs.debug(gr.insert());
}
else{
// User not found by user_name
gs.error('Cannot find user: ' + admins[i]);
}
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-20-2018 12:51 AM
Hi Brendan,
The user field is a reference field, your array appears to be a string value of 'user 1' so you'll either need to use setDisplayValue() or populate the array with sys_id's
Cheers
Dave
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-20-2018 05:55 PM
Hi guys, thanks for your help so far.
I have been able to make it work using the users sys_id's, however, I would like to query the user_name instead for ease of use.
This is what I have so far.
var user1 = "sys_id_84f3f560083a198701310c784";
var user2 = "sys_id_84f3f560083a198701310c7a8";
var admins = user1 + " " + user2;
var admins = admins.split(" ");
gs.print("1st test: " + admins);
for(var i = 0; i < admins.length; i++) //for loop
{
gs.print("2nd test: " + i + admins[i])
var gr = new GlideRecord('sys_user_grmember');
gr.initialize();
gr.user = admins[i];
gr.group.setDisplayValue('Admin')
gr.setWorkflow(false);
gs.print(gr.insert());
}
Where would the best place to add the a query to the sys_user table?
var users = new GlideRecord('sys_user');
users.AddQuery('user_name', 'IN', admins[i]);
users.query();
Thanks, Brendan
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-20-2018 06:13 PM
ive got the following, however, it is only querying the first entry of the array.
var admins = "user1 user2";
var admins = admins.split(" ");
gs.print("1st test: " + admins);
for(var i = 0; i < admins.length; i++) //for loop
{
gs.print("admin " + i + " username is: " + admins[i]); // this is returning two log entries
var users = new GlideRecord('sys_user');
users.addQuery('user_name', 'IN', admins[i]);
users.query();
while(users.next()) {
gs.print('2nd test - name is: '+ users.name); //this only logs 1 entry with user1's name
}
}
I feel I'm close, not sure why the for loop is not querying both users...
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-20-2018 06:28 PM
Hi Brendan,
Can you try the below and let me know
var admins = "user1 user2";//NOTE: Makes sure none of the usernames have a space in them
admins = admins.replace(" ",",");
var users = new GlideRecord('sys_user');
users.addQuery('user_name', 'IN', admins);
users.query();
while(users.next()) {
gs.print('UserName is: '+ users.name);
}

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-20-2018 06:51 PM
The key to note is that sys_user_grmember has two reference fields. If "user1" and "user2" are names and not sys_ids, then you'll need to use setDisplayValue() like you did for the name of the group.
var admins = ["user1","user2"];
for(var i = 0; i < admins.length; i++) {
var gr = new GlideRecord('sys_user_grmember');
gr.initialize();
gr.user.setDisplayValue(admins[i]);
gr.group.setDisplayValue('Admin')
gr.setWorkflow(false);
gs.print(gr.insert());
}