Use list commands in the CLI, playbooks, and scripts
Use the following list commands in the CLI, scripts, and playbook tasks:
Command | Description | Arguments |
|---|---|---|
getList | Retrieves the contents of the specified list. | listName: The name of the list for which to retrieve the contents. |
createList | Creates a list with the supplied data and overwrites any existing list data. |
|
addToList | Appends the supplied items to the specified list. If you add multiple items, make sure you use the same list separator that the list currently uses, for example, a comma or a semicolon. |
|
setList | Adds the supplied data to the specified list and overwrites existing list data. |
|
removeFromList | Removes a single item from the specified list. |
|
In this example, a manageOOOusers script uses the getList, createList, and setList commands.
register_module_line('ManageOOOusers', 'start', __line__())
def _get_current_user():
current_username = demisto.executeCommand("getUsers", {"current": True})
if isError(current_username):
demisto.debug(f"failed to get current username - {get_error(current_username)}")
return
else:
return current_username[0]["Contents"][0]['username']
def main():
# get current time
now = datetime.now()
# args
list_name = demisto.getArg("listname")
username = demisto.getArg("username")
option = demisto.getArg("option")
days_off = now + timedelta(days=int(demisto.getArg("daysoff")))
off_until = days_off.strftime("%Y-%m-%d")
# update list name to start with 'OOO', so we can't overwrite other lists with this
if not list_name.startswith("OOO"):
list_name = f"OOO {list_name}"
current_user = _get_current_user()
if not current_user and not username:
return_error('Failed to get current user. Please set the username argument in the script.')
if not username:
# Current user was found, running script on it.
username = current_user
else:
# check if provided username is a valid user
users = demisto.executeCommand("getUsers", {})
if isError(users):
return_error(f'Failed to get users: {str(get_error(users))}')
users = users[0]['Contents']
users = [x['username'] for x in users]
if username not in users:
return_error(message=f"{username} is not a valid user")
# get the out of office list, check if the list exists, if not create it:
ooo_list = demisto.executeCommand("getList", {"listName": list_name})[0]["Contents"]
if isError(ooo_list):
return_error(f'Failed to get users out of office: {str(get_error(ooo_list))}')
if "Item not found" in ooo_list:
demisto.results(demisto.executeCommand("createList", {"listName": list_name, "listData": []}))
ooo_list = demisto.executeCommand("getList", {"listName": list_name})[0]["Contents"]
# check status of the list, and add/remove the user from it.
if not ooo_list:
list_data = []
else:
list_data = json.loads(ooo_list)
if option == "add":
# check if user is already in the list, and remove, to allow updating
list_data = [i for i in list_data if not (i['user'] == username)]
list_data.append({"user": username,
"offuntil": off_until,
"addedby": current_user if current_user else 'DBot'})
else:
# remove the user from the list.
list_data = [i for i in list_data if not (i['user'] == username)]
set_list_res = demisto.executeCommand("setList", {"listName": list_name, "listData": json.dumps(list_data)})
if isError(set_list_res):
return_error(f'Failed to update the list {list_name}: {str(get_error(set_list_res))}')
# welcome back, or see ya later!
if option == "add":
demisto.results(f"Vacation mode engaged until {off_until}, enjoy the time off {username}")
else:
demisto.results(f"Welcome back {username}, it's like you never left!")
if __name__ in ('__builtin__', 'builtins', '__main__'):
main()
register_module_line('ManageOOOusers', 'end', __line__())