Skip to content

Commit fa1fccd

Browse files
authored
new background scripts to clone user groups. (#2089)
* Create cloneUserGroups.js Added new Background script to copy groups from one user to another user * Create readme.md adding readme file for new background script.
1 parent 3efc2b1 commit fa1fccd

File tree

2 files changed

+54
-0
lines changed

2 files changed

+54
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// Replace with the sys_ids of the users
2+
var sourceUserSysId = 'SOURCE_USER_SYS_ID'; // Copy groups from this user
3+
var targetUserSysId = 'TARGET_USER_SYS_ID'; // Copy groups to this user
4+
5+
// Validate both users exist
6+
var sourceUser = new GlideRecord('sys_user');
7+
if (!sourceUser.get(sourceUserSysId)) {
8+
gs.error('Source user not found: ' + sourceUserSysId);
9+
return;
10+
}
11+
12+
var targetUser = new GlideRecord('sys_user');
13+
if (!targetUser.get(targetUserSysId)) {
14+
gs.error('Target user not found: ' + targetUserSysId);
15+
return;
16+
}
17+
18+
gs.info('Cloning group memberships from ' + sourceUser.name + ' to ' + targetUser.name);
19+
20+
var addedCount = 0;
21+
var skippedCount = 0;
22+
23+
var srcGroups = new GlideRecord('sys_user_grmember');
24+
srcGroups.addQuery('user', sourceUserSysId);
25+
srcGroups.query();
26+
27+
while (srcGroups.next()) {
28+
var groupId = srcGroups.group.toString();
29+
30+
// Check if target user is already in the group
31+
var existing = new GlideRecord('sys_user_grmember');
32+
existing.addQuery('user', targetUserSysId);
33+
existing.addQuery('group', groupId);
34+
existing.query();
35+
36+
if (existing.next()) {
37+
skippedCount++;
38+
gs.info('Skipped: ' + targetUser.name + ' is already a member of group ' + srcGroups.group.name);
39+
continue;
40+
}
41+
42+
// Add target user to the group
43+
var newMember = new GlideRecord('sys_user_grmember');
44+
newMember.initialize();
45+
newMember.user = targetUserSysId;
46+
newMember.group = groupId;
47+
newMember.insert();
48+
49+
gs.info('Added ' + targetUser.name + ' to group ' + srcGroups.group.name);
50+
addedCount++;
51+
}
52+
53+
gs.info('Group cloning complete. ' + addedCount + ' groups added, ' + skippedCount + ' skipped.');
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This ServiceNow Background Script copies all group memberships from one user to another. It checks for duplicates and logs all actions.

0 commit comments

Comments
 (0)