From 82fe3b38c1087900f59cff328d1281e4445d71bd Mon Sep 17 00:00:00 2001 From: anjimuvva <42597425+anjimuvva@users.noreply.github.com> Date: Wed, 29 Oct 2025 12:45:17 +0800 Subject: [PATCH 1/5] Create identify_inactive_users_with_open_tickets.js --- .../identify_inactive_users_with_open_tickets.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Server-Side Components/Background Scripts/Identify Inactive users with tickets/identify_inactive_users_with_open_tickets.js diff --git a/Server-Side Components/Background Scripts/Identify Inactive users with tickets/identify_inactive_users_with_open_tickets.js b/Server-Side Components/Background Scripts/Identify Inactive users with tickets/identify_inactive_users_with_open_tickets.js new file mode 100644 index 0000000000..aa83326a2e --- /dev/null +++ b/Server-Side Components/Background Scripts/Identify Inactive users with tickets/identify_inactive_users_with_open_tickets.js @@ -0,0 +1,12 @@ +var user = new GlideRecord('sys_user'); +user.addQuery('active', false); +user.query(); +while (user.next()) { + var inc = new GlideRecord('incident'); + inc.addQuery('assigned_to', user.sys_id); + inc.addQuery('state', '!=', 7); // not Closed + inc.query(); + while (inc.next()) { + gs.info('Inactive user with open ticket: ' + user.name + ' β†’ ' + inc.number); + } +} From 101697bf902df131d0903b1994dff554498e3461 Mon Sep 17 00:00:00 2001 From: anjimuvva <42597425+anjimuvva@users.noreply.github.com> Date: Wed, 29 Oct 2025 12:45:58 +0800 Subject: [PATCH 2/5] Create README.md --- .../Identify Inactive users with tickets/README.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 Server-Side Components/Background Scripts/Identify Inactive users with tickets/README.md diff --git a/Server-Side Components/Background Scripts/Identify Inactive users with tickets/README.md b/Server-Side Components/Background Scripts/Identify Inactive users with tickets/README.md new file mode 100644 index 0000000000..ddff5edf85 --- /dev/null +++ b/Server-Side Components/Background Scripts/Identify Inactive users with tickets/README.md @@ -0,0 +1,4 @@ +# ServiceNow Background Script – Identify Inactive Users with Open Incidents + +This background script helps admin to identify **inactive users** who still have **open incidents** assigned to them. +It’s particularly useful during **user cleanup, offboarding audits, or reassignment activities** to ensure no tickets remain unaddressed. From 00c871a1d2a367567b332ab7a7c7c8285f808163 Mon Sep 17 00:00:00 2001 From: anjimuvva <42597425+anjimuvva@users.noreply.github.com> Date: Thu, 30 Oct 2025 09:53:01 +0800 Subject: [PATCH 3/5] Create get_inactive_assignment_groups.js --- .../get_inactive_assignment_groups.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Server-Side Components/Background Scripts/Get Inactive Assignment Groups/get_inactive_assignment_groups.js diff --git a/Server-Side Components/Background Scripts/Get Inactive Assignment Groups/get_inactive_assignment_groups.js b/Server-Side Components/Background Scripts/Get Inactive Assignment Groups/get_inactive_assignment_groups.js new file mode 100644 index 0000000000..33e00c7b6e --- /dev/null +++ b/Server-Side Components/Background Scripts/Get Inactive Assignment Groups/get_inactive_assignment_groups.js @@ -0,0 +1,11 @@ +var grp = new GlideRecord('sys_user_group'); +grp.query(); +while (grp.next()) { + var member = new GlideRecord('sys_user_grmember'); + member.addQuery('group', grp.sys_id); + member.addQuery('user.active', true); + member.query(); + if (!member.hasNext()) { + gs.info('Inactive group (no active members): ' + grp.name); + } +} From fe08974483fc69ee2a108ea20f994db7f71f8c88 Mon Sep 17 00:00:00 2001 From: anjimuvva <42597425+anjimuvva@users.noreply.github.com> Date: Thu, 30 Oct 2025 09:54:37 +0800 Subject: [PATCH 4/5] Create README.md --- .../Get Inactive Assignment Groups/README.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Server-Side Components/Background Scripts/Get Inactive Assignment Groups/README.md diff --git a/Server-Side Components/Background Scripts/Get Inactive Assignment Groups/README.md b/Server-Side Components/Background Scripts/Get Inactive Assignment Groups/README.md new file mode 100644 index 0000000000..6354dd4426 --- /dev/null +++ b/Server-Side Components/Background Scripts/Get Inactive Assignment Groups/README.md @@ -0,0 +1,5 @@ +# ServiceNow Background Script – Identify Inactive Assignment Groups + +## Overview +This background script identifies **assignment groups that have no active members**. +Such groups can cause issues with **incident routing**, **task assignment**, or **notification delivery**, since tickets assigned to these groups may never reach an active user. From 31ef644969d620bbc476dd45c7f36cf030a9a973 Mon Sep 17 00:00:00 2001 From: anjimuvva <42597425+anjimuvva@users.noreply.github.com> Date: Thu, 30 Oct 2025 18:49:41 +0800 Subject: [PATCH 5/5] Update get_inactive_assignment_groups.js --- .../get_inactive_assignment_groups.js | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/Server-Side Components/Background Scripts/Get Inactive Assignment Groups/get_inactive_assignment_groups.js b/Server-Side Components/Background Scripts/Get Inactive Assignment Groups/get_inactive_assignment_groups.js index 33e00c7b6e..03f67e028e 100644 --- a/Server-Side Components/Background Scripts/Get Inactive Assignment Groups/get_inactive_assignment_groups.js +++ b/Server-Side Components/Background Scripts/Get Inactive Assignment Groups/get_inactive_assignment_groups.js @@ -1,11 +1,21 @@ +var activeGroups = {}; +var member = new GlideAggregate('sys_user_grmember'); +member.addQuery('user.active', true); +member.groupBy('group'); +member.query(); +while (member.next()) { + activeGroups[member.group.toString()] = true; +} + +var inactiveCount = 0; var grp = new GlideRecord('sys_user_group'); +grp.addQuery('active', true); // optional filter grp.query(); while (grp.next()) { - var member = new GlideRecord('sys_user_grmember'); - member.addQuery('group', grp.sys_id); - member.addQuery('user.active', true); - member.query(); - if (!member.hasNext()) { + if (!activeGroups[grp.sys_id.toString()]) { gs.info('Inactive group (no active members): ' + grp.name); + inactiveCount++; } } + +gs.info('Total inactive groups found: ' + inactiveCount);