Skip to content

Latest commit

 

History

History

fn_azure_automation_utilities

Azure Automation Utilities

Table of Contents


Release Notes

Version Date Notes
1.0.0 11/2023 Initial Release

Overview

IBM SOAR App for Azure Automation

screenshot: main

This app allows interaction with the following Azure Automation resources:

  • Automation Accounts
  • Activities
  • Jobs
  • Runbooks
  • Nodes
  • Credentials
  • Schedules
  • Modules
  • Agent Registration
  • Statistics

Key Features

  • Automation Accounts
  • Activities
  • Jobs
  • Runbooks
  • Nodes
  • Credentials
  • Schedules
  • Modules
  • Agent Registration
  • Statistics

Requirements

This app supports the IBM Security QRadar SOAR Platform and the IBM Security QRadar SOAR for IBM Cloud Pak for Security.

SOAR platform

The SOAR platform supports two app deployment mechanisms, Edge Gateway (also known as App Host) and integration server.

If deploying to a SOAR platform with an App Host, the requirements are:

  • SOAR platform >= 48.0.0.
  • The app is in a container-based format (available from the AppExchange as a zip file).

If deploying to a SOAR platform with an integration server, the requirements are:

  • SOAR platform >= 48.0.0.
  • The app is in the older integration format (available from the AppExchange as a zip file which contains a tar.gz file).
  • Integration server is running resilient-circuits>=48.0.0.
  • If using an API key account, make sure the account provides the following minimum permissions:
    Name Permissions
    Org Data Read
    Function Read
    Layout Edit, Read

The following SOAR platform guides provide additional information:

  • Edge Gateway Deployment Guide or App Host Deployment Guide: provides installation, configuration, and troubleshooting information, including proxy server settings.
  • Integration Server Guide: provides installation, configuration, and troubleshooting information, including proxy server settings.
  • System Administrator Guide: provides the procedure to install, configure and deploy apps.

The above guides are available on the IBM Documentation website at ibm.biz/soar-docs. On this web page, select your SOAR platform version. On the follow-on page, you can find the Edge Gateway Deployment Guide, App Host Deployment Guide, or Integration Server Guide by expanding Apps in the Table of Contents pane. The System Administrator Guide is available by expanding System Administrator.

Cloud Pak for Security

If you are deploying to IBM Cloud Pak for Security, the requirements are:

  • IBM Cloud Pak for Security >= 1.10.15.
  • Cloud Pak is configured with an Edge Gateway.
  • The app is in a container-based format (available from the AppExchange as a zip file).

The following Cloud Pak guides provide additional information:

  • Edge Gateway Deployment Guide or App Host Deployment Guide: provides installation, configuration, and troubleshooting information, including proxy server settings. From the Table of Contents, select Case Management and Orchestration & Automation > Orchestration and Automation Apps.
  • System Administrator Guide: provides information to install, configure, and deploy apps. From the IBM Cloud Pak for Security IBM Documentation table of contents, select Case Management and Orchestration & Automation > System administrator.

These guides are available on the IBM Documentation website at ibm.biz/cp4s-docs. From this web page, select your IBM Cloud Pak for Security version. From the version-specific IBM Documentation page, select Case Management and Orchestration & Automation.

Proxy Server

The app does support a proxy server.

Python Environment

Python 3.6 and Python 3.9 are supported. Additional package dependencies may exist for each of these packages:

  • resilient-circuits>=48.0.0

Installation

Install

  • To install or uninstall an App or Integration on the SOAR platform, see the documentation at ibm.biz/soar-docs.
  • To install or uninstall an App on IBM Cloud Pak for Security, see the documentation at ibm.biz/cp4s-docs and follow the instructions above to navigate to Orchestration and Automation.

App Configuration

The following table provides the settings you need to configure the app. These settings are made in the app.config file. See the documentation discussed in the Requirements section for the procedure.

Config Required Example Description
auth_url Yes https://login.microsoftonline.com/(tenant_id)/oauth2/v2.0/authorize The auth_url setting is used to get a new refresh token.
client_id Yes aaaaaaaa-bbbb-cccc-dddd-609dc6e4d76f Azure AD Application client ID
client_secret Yes 11111~D_gt~dB222226gq11111-v3333333LAaLt Azure AD Application client secret
refresh_token Yes `` The refresh token used to obtain a new access token (for refresh token grant)
scope Yes https://management.azure.com/user_impersonation openid profile offline_access Scopes are a way to limit the amount of access that is granted to an access token.
subscription_id Yes 11111111-aaaa-2222-cccc-89e99b336784 Azure subscription ID
tenant_id Yes 11111111-aaaa-2222-cccc-89e99b336784 Azure AD Application tenant ID
token_url Yes https://login.microsoftonline.com/(tenant_id)/oauth2/v2.0/token The token_url setting is used to get a new access token.
https_proxy No https://proxy:443 Proxy url and port

Custom Layouts

  • Import the Data Tables and Custom Fields like the screenshot below:

    screenshot: custom_layouts


Function - Azure Create Account

Create or update an automation account on Azure

screenshot: fn-azure-create-account

Inputs:

Name Type Required Example Tooltip
account_name text No - Azure Automation Account Name
account_update boolean No - True if you are updating an account
input_parameters text No - string with dictionary format
resource_group_name text No - Existing Azure automation resource group name

Outputs:

NOTE: This example might be in JSON format, but results is a Python Dictionary on the SOAR platform.

results = {
  "content": {
    "etag": null,
    "id": "/subscriptions/abcdefgh-1234-abcd-1234-a1b2c3d4e5f6/resourceGroups/demoassets/providers/Microsoft.Automation/automationAccounts/autotester24",
    "location": "Canada East",
    "name": "autotester24",
    "properties": {
      "RegistrationUrl": "https://55555555-3333-4444-bb0f-030397ea7fc1.agentsvc.yq.azure-automation.net/accounts/55555555-3333-4444-bb0f-030397ea7fc1",
      "RuntimeConfiguration": {
        "powershell": {
          "builtinModules": {
            "Az": "8.0.0"
          }
        },
        "powershell7": {
          "builtinModules": {
            "Az": "8.0.0"
          }
        }
      },
      "automationHybridServiceUrl": "https://55555555-3333-4444-bb0f-030397ea7fc1.jrds.yq.azure-automation.net/automationAccounts/55555555-3333-4444-bb0f-030397ea7fc1",
      "creationTime": "2023-08-22T12:44:27.9+00:00",
      "disableLocalAuth": false,
      "encryption": {
        "identity": {
          "userAssignedIdentity": null
        },
        "keySource": "Microsoft.Automation"
      },
      "lastModifiedBy": null,
      "lastModifiedTime": "2023-08-22T12:44:27.9+00:00",
      "publicNetworkAccess": true,
      "sku": {
        "capacity": null,
        "family": null,
        "name": "Basic"
      },
      "state": "Ok"
    },
    "systemData": {
      "createdAt": "2023-08-22T12:44:27.9+00:00",
      "lastModifiedAt": "2023-08-22T12:44:27.9+00:00"
    },
    "tags": {},
    "type": "Microsoft.Automation/AutomationAccounts"
  },
  "inputs": {
    "account_name": "autotester24",
    "input_parameters": "{\u0027name\u0027: \u0027autotester24\u0027, \u0027location\u0027: \u0027Canada East\u0027, \u0027tags\u0027: None, \u0027properties\u0027: {\u0027publicNetworkAccess\u0027: True, \u0027disableLocalAuth\u0027: False, \u0027sku\u0027: {\u0027name\u0027: \u0027Basic\u0027}}}",
    "resource_group_name": "demoassets"
  },
  "metrics": {
    "execution_time_ms": 4988,
    "host": "local",
    "package": "fn-azure-automation-utilities",
    "package_version": "1.0.0",
    "timestamp": "2023-08-22 08:44:29",
    "version": "1.0"
  },
  "raw": null,
  "reason": null,
  "success": true,
  "version": 2.0
}

Example Function Input Script:

inputs.account_name = playbook.inputs.azure_automation_account_name
inputs.resource_group_name = playbook.inputs.azure_automation_resource_group

public_network_access = getattr(playbook.inputs, "azure_automation_account_public_network_access", True)
disable_local_auth = getattr(playbook.inputs, "azure_automation_account_disable_local_auth", False)

payload = {
  "name": playbook.inputs.azure_automation_account_name,
  "location": playbook.inputs.azure_automation_account_location,
  "properties": {
    "publicNetworkAccess": True if public_network_access == None else public_network_access,
    "disableLocalAuth": False if disable_local_auth == None else disable_local_auth,
    "sku":{
      "name": "Basic"
    }
  }
}
if getattr(playbook.inputs, "azure_automation_account_tags", None):
  payload["tags"] = getattr(playbook.inputs, "azure_automation_account_tags", {})
inputs.input_parameters = str(payload)

Example Function Post Process Script:

from datetime import datetime
results = playbook.functions.results.account_results
public_network_access = getattr(playbook.inputs, "azure_automation_account_public_network_access", True)
disable_local_auth = getattr(playbook.inputs, "azure_automation_account_disable_local_auth", False)

if results.get("success"):
  incident.properties.azure_automation_create_ui_tab = True
  content = results.get("content", {})
  account_id = content.get("id", "")
  resourceGroup_start = account_id.find("resourceGroups/")+15
  resource_group = account_id[resourceGroup_start:account_id.find("/providers", resourceGroup_start)]
  
  row = incident.addRow("azure_automation_accounts")
  row["account_name_accounts"] = content.get("name", "")
  row["resource_group_accounts"] = resource_group
  row["location_accounts"] = content.get("location", "")
  row["tags_accounts"] = str(content.get("tags"))
  row["publicnetworkaccess_accounts"] = content.get("properties", {}).get("publicNetworkAccess", None)
  row["disablelocalauth_accounts"] = content.get("properties", {}).get("disableLocalAuth", None)
  row["account_deleted_accounts"] = False
  row["account_query_date"] = int(datetime.now().timestamp()*1000)


Function - Azure Create Credential

Create or update a credential.

screenshot: fn-azure-create-credential

Inputs:

Name Type Required Example Tooltip
account_name text No - Azure Automation Account Name
credential_name text No - Name of the Azure automation credential
credential_update boolean No - If True will update the given credential. If False will create the given credential
input_parameters text No - string with dictionary format
resource_group_name text No - Existing Azure automation resource group name

Outputs:

NOTE: This example might be in JSON format, but results is a Python Dictionary on the SOAR platform.

results = {
  "content": {
    "id": "/subscriptions/abcdefgh-1234-abcd-1234-a1b2c3d4e5f6/resourceGroups/demoassets/providers/Microsoft.Automation/automationAccounts/automation1/credentials/tes43",
    "name": "tes43",
    "properties": {
      "creationTime": "2023-08-21T18:14:38.87+00:00",
      "description": null,
      "lastModifiedTime": "2023-08-21T18:14:38.87+00:00",
      "userName": "tes43"
    },
    "type": "Microsoft.Automation/AutomationAccounts/Credentials"
  },
  "inputs": {
    "account_name": "automation1",
    "credential_name": "tes43",
    "input_parameters": "{\u0027name\u0027: \u0027tes43\u0027, \u0027properties\u0027: {\u0027userName\u0027: \u0027tes43\u0027, \u0027password\u0027: \u0027password\u0027}}",
    "resource_group_name": "demoassets"
  },
  "metrics": {
    "execution_time_ms": 1506,
    "host": "local",
    "package": "fn-azure-automation-utilities",
    "package_version": "1.0.0",
    "timestamp": "2023-08-21 14:14:38",
    "version": "1.0"
  },
  "raw": null,
  "reason": null,
  "success": true,
  "version": 2.0
}

Example Function Input Script:

inputs.account_name = playbook.inputs.azure_automation_account_name
inputs.resource_group_name = playbook.inputs.azure_automation_resource_group
inputs.credential_name = playbook.inputs.azure_automation_credential_name

payload = {
  "name": playbook.inputs.azure_automation_credential_name,
  "properties": {
    "userName": playbook.inputs.azure_automation_credential_username,
    "password": playbook.inputs.azure_automation_credential_password
  }
}
if getattr(playbook.inputs, "azure_automation_credential_description", None):
  payload["properties"]["description"] = getattr(playbook.inputs, "azure_automation_credential_description", None)
inputs.input_parameters = str(payload)

Example Function Post Process Script:

from datetime import datetime
results = playbook.functions.results.create_results
if results.get("success"):
  incident.properties.azure_automation_create_ui_tab = True
  # Add information to the data table
  row = incident.addRow("azure_automation_credentials")
  row["credential_name"] = playbook.inputs.azure_automation_credential_name
  row["credential_username"] = playbook.inputs.azure_automation_credential_username
  row["credential_description"] = getattr(playbook.inputs, 'azure_automation_credential_description', None)
  row["account_name_credentials"] = playbook.inputs.azure_automation_account_name
  row["resource_group_credentials"] = playbook.inputs.azure_automation_resource_group
  row["credential_deleted"] = False
  row["credential_query_date"] = int(datetime.now().timestamp()*1000)


Function - Azure Create Schedule

Create or update a schedule.

screenshot: fn-azure-create-schedule

Inputs:

Name Type Required Example Tooltip
account_name text No - Azure Automation Account Name
input_parameters text No - string with dictionary format
resource_group_name text No - Existing Azure automation resource group name
schedule_name text No The name of the azure automation schedule -
schedule_update boolean No - If True schedule will update. If False schedule will be created

Outputs:

NOTE: This example might be in JSON format, but results is a Python Dictionary on the SOAR platform.

results = {
  "content": {
    "id": "/subscriptions/abcdefgh-1234-abcd-1234-a1b2c3d4e5f6/resourceGroups/demoassets/providers/Microsoft.Automation/automationAccounts/automation1/schedules/tester1324",
    "name": "tester1324",
    "properties": {
      "advancedSchedule": null,
      "creationTime": "2023-08-24T15:31:44.2666667+00:00",
      "description": "something",
      "expiryTime": "2023-08-25T08:40:00+00:00",
      "expiryTimeOffsetMinutes": 0.0,
      "frequency": "OneTime",
      "interval": null,
      "isEnabled": true,
      "lastModifiedTime": "2023-08-24T15:31:44.2666667+00:00",
      "nextRun": "2023-08-25T08:40:00+00:00",
      "nextRunOffsetMinutes": 0.0,
      "startTime": "2023-08-25T08:40:00+00:00",
      "startTimeOffsetMinutes": 0.0,
      "timeZone": "Etc/UTC"
    },
    "type": "Microsoft.Automation/AutomationAccounts/Schedules"
  },
  "inputs": {
    "account_name": "automation1",
    "input_parameters": "{\u0027name\u0027: \u0027tester1324\u0027, \u0027properties\u0027: {\u0027startTime\u0027: 1692967200000, \u0027frequency\u0027: \u0027OneTime\u0027, \u0027description\u0027: \u0027something\u0027}}",
    "resource_group_name": "demoassets",
    "schedule_name": "tester1324"
  },
  "metrics": {
    "execution_time_ms": 30624,
    "host": "local",
    "package": "fn-azure-automation-utilities",
    "package_version": "1.0.0",
    "timestamp": "2023-08-24 11:31:44",
    "version": "1.0"
  },
  "raw": null,
  "reason": null,
  "success": true,
  "version": 2.0
}

Example Function Input Script:

inputs.account_name = playbook.inputs.azure_automation_account_name
inputs.resource_group_name = playbook.inputs.azure_automation_resource_group
inputs.schedule_name = playbook.inputs.azure_automation_schedule_name

payload = {
  "name": playbook.inputs.azure_automation_schedule_name,
  "properties": {
    "startTime": playbook.inputs.azure_automation_schedule_start_time,
    "frequency": "OneTime",
    "advancedSchedule": {}
  }
}

if getattr(playbook.inputs, "azure_automation_schedule_description", None): # Set the description
  payload["properties"]["description"] = getattr(playbook.inputs, "azure_automation_schedule_description", None)
if getattr(playbook.inputs, "schedule_time_zone", None): # Set the time zone
  payload["properties"]["timeZone"] = getattr(playbook.inputs, "schedule_time_zone", None)

frequency = getattr(playbook.inputs, "recur_frequency", None)
# If the frequency Recurring is selected
if playbook.inputs.schedule_recurrence == "Recurring":
  if frequency:
    payload["properties"]["frequency"] = frequency # Set user selected frequency
  else: # Fail if not given by user
    helper.fail("If Schedule Recurrence equals Recurring than Recur Frequency must be given.")
  payload["properties"]["interval"] = int(getattr(playbook.inputs, "recur_interval", 1)) # Add user given interval to payload
  # If an expiration date time is given then add it to the payload
  if getattr(playbook.inputs, "schedule_expiration", None):
    payload["properties"]["expiryTime"] = getattr(playbook.inputs, "schedule_expiration", None)
  # If the frequency selected equals Week, then add the user selected days to the payload
  if frequency == "Week":
    if getattr(playbook.inputs, "recur_week_days", []):
      # List of selected days
      payload["properties"]["advancedSchedule"]["weekDays"] = getattr(playbook.inputs, "recur_week_days", [])
    else:
      helper.fail("If Recur Frequency Week is selected than Recur Week Days must be given.")

inputs.input_parameters = str(payload)

Example Function Post Process Script:

from datetime import datetime
results = playbook.functions.results.schedule
if results.get("success"):
  incident.properties.azure_automation_create_ui_tab = True
  # Add information to the data table
  schedule = results.get("content", {})
  row = incident.addRow("azure_automation_schedules")
  row["schedule_name"] = schedule.get("name", "")
  row["schedule_description"] = schedule.get("properties", {}).get("description", None)
  row["schedule_enabled"] = schedule.get("properties", {}).get("isEnabled", False)
  row["schedule_start_time"] = schedule.get("properties", {}).get("startTime", None)
  row["schedule_expiry_time"] = schedule.get("properties", {}).get("expiryTime", None)
  row["schedule_frequency"] = schedule.get("properties", {}).get("frequency", None)
  row["schedule_interval"] = str(schedule.get("properties", {}).get("interval", 1))
  row["schedule_time_zone"] = schedule.get("properties", {}).get("timeZone", None)
  row["advanced_schedule"] = str(schedule.get("properties", {}).get("advancedSchedule", {}))
  row["account_name_schedules"] = playbook.inputs.azure_automation_account_name
  row["resource_group_schedules"] = playbook.inputs.azure_automation_resource_group
  row["schedule_deleted"] = False
  row["schedule_query_row"] = int(datetime.now().timestamp()*1000)


Function - Azure Delete Account

Delete an Azure automation account.

screenshot: fn-azure-delete-account

Inputs:

Name Type Required Example Tooltip
account_name text No - Azure Automation Account Name
resource_group_name text No - Existing Azure automation resource group name

Outputs:

NOTE: This example might be in JSON format, but results is a Python Dictionary on the SOAR platform.

results = {
  "content": {
    "status": 200
  },
  "inputs": {
    "account_name": "test-account",
    "resource_group_name": "DemoAssets"
  },
  "metrics": {
    "execution_time_ms": 5098,
    "host": "local",
    "package": "fn-azure-automation-utilities",
    "package_version": "1.0.0",
    "timestamp": "2023-07-25 08:24:31",
    "version": "1.0"
  },
  "raw": null,
  "reason": "",
  "success": true,
  "version": 2.0
}

Example Function Input Script:

inputs.account_name = row.account_name_accounts
inputs.resource_group_name = row.resource_group_accounts

Example Function Post Process Script:

from datetime import datetime
results = playbook.functions.results.account_delete

if results.get("success"):
  incident.properties.azure_automation_create_ui_tab = True
  status = results.get("content", {}).get("status")
  if status == 200:
    row.account_deleted_accounts = True
    row.account_query_date = int(datetime.now().timestamp()*1000)
  elif status == 204:
    incident.addNote(f"""Azure Automation: Account Delete - Example (PB)
Inputs -
  Account Name: {playbook.inputs.azure_automation_account_name}
  Resource Group: {playbook.inputs.azure_automation_account_resource_group}

Results -
  Azure automation account '{playbook.inputs.azure_automation_account_name}' not found.""")


Function - Azure Delete Credential

Delete the credential.

screenshot: fn-azure-delete-credential

Inputs:

Name Type Required Example Tooltip
account_name text No - Azure Automation Account Name
credential_name text No - Name of the Azure automation credential
resource_group_name text No - Existing Azure automation resource group name

Outputs:

NOTE: This example might be in JSON format, but results is a Python Dictionary on the SOAR platform.

results = {
  "content": {
    "status": 200
  },
  "inputs": {
    "account_name": "automation1",
    "credential_name": "tes43",
    "resource_group_name": "demoassets"
  },
  "metrics": {
    "execution_time_ms": 1570,
    "host": "local",
    "package": "fn-azure-automation-utilities",
    "package_version": "1.0.0",
    "timestamp": "2023-08-21 14:16:11",
    "version": "1.0"
  },
  "raw": null,
  "reason": "",
  "success": true,
  "version": 2.0
}

Example Function Input Script:

inputs.account_name = row.account_name_credentials
inputs.resource_group_name = row.resource_group_credentials
inputs.credential_name = row.credential_name

Example Function Post Process Script:

from datetime import datetime
results = playbook.functions.results.delete_cred

if results.get("success"):
  incident.properties.azure_automation_create_ui_tab = True
  status = results.get("content", {}).get("status")
  if status == 200:
    row["credential_deleted"] = True
    row["credential_query_date"] = int(datetime.now().timestamp()*1000)
  elif status == 204:
    incident.addNote(f"""Azure Automation: Credential Delete - Example (PB)
Inputs -
  Account Name: {row.account_name}
  Resource Group: {row.resource_group}
  Credential Name: {row.credential_name}

Results -
  Azure automation credential '{row.credential_name}' not found.""")


Function - Azure Delete Runbook

Delete the runbook by name.

screenshot: fn-azure-delete-runbook

Inputs:

Name Type Required Example Tooltip
account_name text No - Azure Automation Account Name
resource_group_name text No - Existing Azure automation resource group name
runbook_name text No - Runbook name in Azure Automation

Outputs:

NOTE: This example might be in JSON format, but results is a Python Dictionary on the SOAR platform.

results = {
  "content": {
    "status": 200
  },
  "inputs": {
    "account_name": "automation1",
    "resource_group_name": "demoassets",
    "runbook_name": "test_fail"
  },
  "metrics": {
    "execution_time_ms": 3220,
    "host": "local",
    "package": "fn-azure-automation-utilities",
    "package_version": "1.0.0",
    "timestamp": "2023-08-16 14:09:43",
    "version": "1.0"
  },
  "raw": null,
  "reason": "",
  "success": true,
  "version": 2.0
}

Example Function Input Script:

inputs.account_name = row.account_name_runbooks
inputs.resource_group_name = row.resource_group_runbooks
inputs.runbook_name = row.runbook_name

Example Function Post Process Script:

from datetime import datetime
results = playbook.functions.results.delete_runbook
if results.get("success"):
  incident.properties.azure_automation_create_ui_tab = True
  row.runbook_deleted = True
  row.runbook_query_date = int(datetime.now().timestamp()*1000)


Function - Azure Delete Schedule

Delete the schedule identified by schedule name.

screenshot: fn-azure-delete-schedule

Inputs:

Name Type Required Example Tooltip
account_name text No - Azure Automation Account Name
resource_group_name text No - Existing Azure automation resource group name
schedule_name text No The name of the azure automation schedule -

Outputs:

NOTE: This example might be in JSON format, but results is a Python Dictionary on the SOAR platform.

results = {
  "content": {
    "status": 200
  },
  "inputs": {
    "account_name": "automation1",
    "resource_group_name": "demoassets",
    "schedule_name": "tester1324"
  },
  "metrics": {
    "execution_time_ms": 1244,
    "host": "local",
    "package": "fn-azure-automation-utilities",
    "package_version": "1.0.0",
    "timestamp": "2023-08-24 11:38:33",
    "version": "1.0"
  },
  "raw": null,
  "reason": "",
  "success": true,
  "version": 2.0
}

Example Function Input Script:

inputs.account_name = row.account_name_schedules
inputs.resource_group_name = row.resource_group_schedules
inputs.schedule_name = row.schedule_name

Example Function Post Process Script:

from datetime import datetime
results = playbook.functions.results.delete_schedule

if results.get("success"):
  incident.properties.azure_automation_create_ui_tab = True
  status = results.get("content", {}).get("status")
  if status == 200:
    row["schedule_deleted"] = True
    row["schedule_query_date"] = int(datetime.now().timestamp()*1000)
  elif status == 204:
    incident.addNote(f"""Azure Automation: Schedule Delete - Example (PB)
Inputs -
  Account Name: {row.account_name}
  Resource Group: {row.resource_group}
  Schedule Name: {row.schedule_name}

Results -
  Schedule '{row.schedule_name}' not found.""")


Function - Azure Execute Runbook

Execute a given Azure runbook and retrieve the results

screenshot: fn-azure-execute-runbook

Inputs:

Name Type Required Example Tooltip
account_name text No - Azure Automation Account Name
input_parameters text No - string with dictionary format
resource_group_name text No - Existing Azure automation resource group name
runbook_name text No - Runbook name in Azure Automation
time_to_wait number No - Amount of seconds to wait in between Azure automation job status checks. This should be hold long it takes the given runbook to complete.

Outputs:

NOTE: This example might be in JSON format, but results is a Python Dictionary on the SOAR platform.

results = {
  "content": "\r\nLocation              : eastus\r\nTags                  : {}\r\nJobCount              : 0\r\nRunbookType           : PowerShell\r\nParameters            : {}\r\nLogVerbose            : False\r\nLogProgress           : False\r\nLastModifiedBy        : \r\nState                 : Published\r\nResourceGroupName     : DemoAssets\r\nAutomationAccountName : automation1\r\nName                  : get_all_runbooks\r\nCreationTime          : 7/19/2023 3:39:27 PM +00:00\r\nLastModifiedTime      : 7/19/2023 4:03:24 PM +00:00\r\nDescription           : Return all runbooks\r\n\r\n\r\nEnvironments                                                                                                            \r\n------------                                                                                                            \r\n{[AzureChinaCloud, AzureChinaCloud], [AzureCloud, AzureCloud], [AzureGermanCloud, AzureGermanCloud], [AzureUSGovernme...\r\n\r\n",
  "inputs": {
    "account_name": "automation1",
    "input_parameters": "{\u0027runbook_name\u0027: \u0027get_all_runbooks\u0027}",
    "resource_group_name": "DemoAssets",
    "runbook_name": "Get_given_runbook",
    "time_to_wait": 20
  },
  "metrics": {
    "execution_time_ms": 41660,
    "host": "local",
    "package": "fn-azure-automation-utilities",
    "package_version": "1.0.0",
    "timestamp": "2023-07-25 08:29:24",
    "version": "1.0"
  },
  "raw": null,
  "reason": null,
  "success": true,
  "version": 2.0
}

Example Function Input Script:

inputs.account_name = row.account_name_runbooks
if getattr(playbook.inputs, "azure_automation_runbook_input_parameters", None):
  inputs.input_parameters = playbook.inputs.azure_automation_runbook_input_parameters
inputs.resource_group_name = row.resource_group_runbooks
inputs.runbook_name = row.runbook_name

time_to_wait = getattr(playbook.inputs, "time_to_wait", 30)
# If no time_to_wait is given then default to 30 seconds
inputs.time_to_wait = time_to_wait if time_to_wait else 30

Example Function Post Process Script:

results = playbook.functions.results.runbook_results
if results.get("success"):
  incident.properties.azure_automation_create_ui_tab = True
  incident.addNote(f"""Azure Automation: Runbook Execute - Example (PB)
Inputs -
  Account Name: {row.account_name_runbooks}
  Resource Group: {row.resource_group_runbooks}
  Runbook Name: {row.runbook_name}
  Time to Wait: {getattr(playbook.inputs, 'time_to_wait', 30)}
  Input Parameters: {playbook.inputs.azure_automation_runbook_input_parameters}

Results -  
  {str(results.get('content', {}))}""")


Function - Azure Get Account

Get a specified Azure automation account information or list accounts.

screenshot: fn-azure-get-account

Inputs:

Name Type Required Example Tooltip
account_name text No - Azure Automation Account Name
resource_group_name text No - Existing Azure automation resource group name

Outputs:

NOTE: This example might be in JSON format, but results is a Python Dictionary on the SOAR platform.

results = {
  "content": {
    "etag": null,
    "id": "/subscriptions/abcdefgh-1234-abcd-1234-a1b2c3d4e5f6/resourceGroups/DemoAssets/providers/Microsoft.Automation/automationAccounts/testing352",
    "identity": {
      "principalId": "ee616124-e026-4ca0-8c64-d34bae779faf",
      "tenantId": "50ad7d3e-b889-434d-802d-13b87c68047b",
      "type": "SystemAssigned"
    },
    "location": "eastus",
    "name": "testing352",
    "properties": {
      "RegistrationUrl": "https://99f846f3-c84d-4c96-af2b-cd0f7a5bd5d5.agentsvc.eus.azure-automation.net/accounts/99f846f3-c84d-4c96-af2b-cd0f7a5bd5d5",
      "RuntimeConfiguration": {
        "powershell": {
          "builtinModules": {
            "Az": "8.0.0"
          }
        },
        "powershell7": {
          "builtinModules": {
            "Az": "8.0.0"
          }
        }
      },
      "automationHybridServiceUrl": "https://99f846f3-c84d-4c96-af2b-cd0f7a5bd5d5.jrds.eus.azure-automation.net/automationAccounts/99f846f3-c84d-4c96-af2b-cd0f7a5bd5d5",
      "creationTime": "2023-07-25T12:05:22.16+00:00",
      "disableLocalAuth": false,
      "encryption": {
        "identity": {
          "userAssignedIdentity": null
        },
        "keySource": "Microsoft.Automation"
      },
      "lastModifiedBy": null,
      "lastModifiedTime": "2023-07-25T12:05:22.16+00:00",
      "privateEndpointConnections": [],
      "publicNetworkAccess": true,
      "sku": {
        "capacity": null,
        "family": null,
        "name": "Basic"
      },
      "state": "Ok"
    },
    "systemData": {
      "createdAt": "2023-07-25T12:05:22.16+00:00",
      "lastModifiedAt": "2023-07-25T12:05:22.16+00:00"
    },
    "tags": {},
    "type": "Microsoft.Automation/AutomationAccounts"
  },
  "inputs": {
    "account_name": "testing352",
    "resource_group_name": "DemoAssets"
  },
  "metrics": {
    "execution_time_ms": 1433,
    "host": "local",
    "package": "fn-azure-automation-utilities",
    "package_version": "1.0.0",
    "timestamp": "2023-07-27 14:14:45",
    "version": "1.0"
  },
  "raw": null,
  "reason": null,
  "success": true,
  "version": 2.0
}

Example Function Input Script:

if getattr(playbook.inputs, "azure_automation_account_name", None):
  inputs.account_name = playbook.inputs.azure_automation_account_name
if getattr(playbook.inputs, "azure_automation_resource_group_name", None):
  inputs.resource_group_name = playbook.inputs.azure_automation_resource_group_name

Example Function Post Process Script:

from datetime import datetime
results = playbook.functions.results.account_info

def add_to_row(account):
  account_id = account.get("id", "")
  resourceGroup_start = account_id.find("resourceGroups/")+15
  resource_group = account_id[resourceGroup_start:account_id.find("/providers", resourceGroup_start)]

  row = incident.addRow("azure_automation_accounts")
  row["account_name_accounts"] = account.get("name", "")
  row["resource_group_accounts"] = resource_group
  row["location_accounts"] = account.get("location", "")
  row["tags_accounts"] = str(account.get("tags"))
  row["publicnetworkaccess_accounts"] = account.get("properties", {}).get("publicNetworkAccess", None)
  row["disablelocalauth_accounts"] = account.get("properties", {}).get("disableLocalAuth", None)
  row["account_deleted_accounts"] = False
  row["account_query_date"] = int(datetime.now().timestamp()*1000)

if results.get("success"):
  incident.properties.azure_automation_create_ui_tab = True
  content = results.get("content", {})
  if content.get("value", None):
    for account in content.get("value", []):
      add_to_row(account)
  else:
    add_to_row(content)


Function - Azure Get Agent Registration Information

Retrieve the automation agent registration information.

screenshot: fn-azure-get-agent-registration-information

Inputs:

Name Type Required Example Tooltip
account_name text No - Azure Automation Account Name
resource_group_name text No - Existing Azure automation resource group name

Outputs:

NOTE: This example might be in JSON format, but results is a Python Dictionary on the SOAR platform.

results = {
  "content": {
    "dscMetaConfiguration": "\r\n\tinstance of MSFT_WebDownloadManager as $MSFT_WebDownloadManager1ref\r\n\t{\r\n\tResourceID = \"[ConfigurationRepositoryWeb]AzureAutomationDSC\";\r\n\t SourceInfo = \"C:\\\\OaaS-RegistrationMetaConfig2.ps1::20::9::ConfigurationRepositoryWeb\";\r\n\t RegistrationKey = \"1234RYKSRuyfmINzCvic0Oz7DpGskIbty5W12345QbKWlsYT0BGp6qzfwz12345678vuh28cqRMoxDD39Iut7w==\"; \r\n\t ServerURL = \"https://abcdefgh-1234-abcd-1234-a1b2c3d4e5f6.agentsvc.eus.azure-automation.net/accounts/abcdefgh-1234-abcd-1234-a1b2c3d4e5f6\";\r\n\t};\r\n\r\n\tinstance of MSFT_WebResourceManager as $MSFT_WebResourceManager1ref\r\n\t{\r\n\t SourceInfo = \"C:\\\\OaaS-RegistrationMetaConfig2.ps1::27::9::ResourceRepositoryWeb\";\r\n\t ServerURL = \"https://abcdefgh-1234-abcd-1234-a1b2c3d4e5f6.agentsvc.eus.azure-automation.net/accounts/abcdefgh-1234-abcd-1234-a1b2c3d4e5f6\";\r\n\t ResourceID = \"[ResourceRepositoryWeb]AzureAutomationDSC\";\r\n\t RegistrationKey = \"1234RYKSRuyfmINzCvic0Oz7DpGskIbty5W12345QbKWlsYT0BGp6qzfwz12345678vuh28cqRMoxDD39Iut7w==\"; \r\n\t};\r\n\r\n\tinstance of MSFT_WebReportManager as $MSFT_WebReportManager1ref\r\n\t{\r\n\t SourceInfo = \"C:\\\\OaaS-RegistrationMetaConfig2.ps1::34::9::ReportServerWeb\";\r\n\t ServerURL = \"https://abcdefgh-1234-abcd-1234-a1b2c3d4e5f6.agentsvc.eus.azure-automation.net/accounts/abcdefgh-1234-abcd-1234-a1b2c3d4e5f6\";\r\n\t ResourceID = \"[ReportServerWeb]AzureAutomationDSC\";\r\n\t RegistrationKey = \"1234RYKSRuyfmINzCvic0Oz7DpGskIbty5W12345QbKWlsYT0BGp6qzfwz12345678vuh28cqRMoxDD39Iut7w==\"; \r\n\t};\r\n\r\n\tinstance of MSFT_DSCMetaConfiguration as $MSFT_DSCMetaConfiguration1ref\r\n\t{\r\n\t RefreshMode = \"Pull\";\r\n\t AllowModuleOverwrite = False;\r\n\t ActionAfterReboot = \"ContinueConfiguration\";\r\n\t RefreshFrequencyMins = 30;\r\n\t RebootNodeIfNeeded = False;\r\n\t ConfigurationModeFrequencyMins = 15;\r\n\t ConfigurationMode = \"ApplyAndMonitor\";\r\n\r\n\t  ResourceModuleManagers = {\r\n\t  $MSFT_WebResourceManager1ref  \r\n\t};\r\n\t  ReportManagers = {\r\n\t  $MSFT_WebReportManager1ref  \r\n\t };\r\n\t  ConfigurationDownloadManagers = {\r\n\t  $MSFT_WebDownloadManager1ref  \r\n\t };\r\n\t};\r\n\r\n\tinstance of OMI_ConfigurationDocument\r\n\t{\r\n\t Version=\"2.0.0\";\r\n\t MinimumCompatibleVersion = \"2.0.0\";\r\n\t CompatibleVersionAdditionalProperties= { \"MSFT_DSCMetaConfiguration:StatusRetentionTimeInDays\" };\r\n\t Author=\"azureautomation\";\r\n\t GenerationDate=\"04/17/2015 11:41:09\";\r\n\t GenerationHost=\"azureautomation-01\";\r\n\t Name=\"RegistrationMetaConfig\";\r\n\t};\r\n\t",
    "endpoint": "https://abcdefgh-1234-abcd-1234-a1b2c3d4e5f6.agentsvc.eus.azure-automation.net/accounts/abcdefgh-1234-abcd-1234-a1b2c3d4e5f6",
    "id": "/subscriptions/abcdefgh-1234-abcd-1234-a1b2c3d4e5f6/resourceGroups/demoassets/providers/Microsoft.Automation/automationAccounts/automation1/agentRegistrationInformation/https://abcdefgh-1234-abcd-1234-a1b2c3d4e5f6.agentsvc.eus.azure-automation.net/accounts/abcdefgh-1234-abcd-1234-a1b2c3d4e5f6",
    "keys": {
      "primary": "1234RYKSRuyfmINzCvic0Oz7DpGskIbty5W12345QbKWlsYT0BGp6qzfwz12345678vuh28cqRMoxDD39Iut7w==",
      "secondary": "bC6hr123456789qPD2eeowEt9rDRqfJMnJmUOhP123450/x53Vezc3rqDhherrLzb123456MWhub+86IKwxssg=="
    }
  },
  "inputs": {
    "account_name": "automation1",
    "resource_group_name": "demoassets"
  },
  "metrics": {
    "execution_time_ms": 1725,
    "host": "local",
    "package": "fn-azure-automation-utilities",
    "package_version": "1.0.0",
    "timestamp": "2023-08-21 09:45:31",
    "version": "1.0"
  },
  "raw": null,
  "reason": null,
  "success": true,
  "version": 2.0
}

Example Function Input Script:

inputs.account_name = playbook.inputs.azure_automation_account_name
inputs.resource_group_name = playbook.inputs.azure_automation_resource_group_name

Example Function Post Process Script:

from json import dumps
results = playbook.functions.results.registration_info

if results.get("success"):
  incident.properties.azure_automation_create_ui_tab = True
  incident.addNote(f"""Azure Automation: Agent Registration Get Information - Example (PB)
Inputs -
  Account Name: {playbook.inputs.azure_automation_account_name}
  Resource Group Name: {playbook.inputs.azure_automation_resource_group_name}

Results -
  {dumps(results.get('content', {}), indent=4)}""")


Function - Azure Get Credential

Get credential from given credential name or list all credentials on given resource group.

screenshot: fn-azure-get-credential

Inputs:

Name Type Required Example Tooltip
account_name text No - Azure Automation Account Name
credential_name text No - Name of the Azure automation credential
resource_group_name text No - Existing Azure automation resource group name

Outputs:

NOTE: This example might be in JSON format, but results is a Python Dictionary on the SOAR platform.

results = {
  "content": {
    "id": "/subscriptions/abcdefgh-1234-abcd-1234-a1b2c3d4e5f6/resourceGroups/demoassets/providers/Microsoft.Automation/automationAccounts/automation1/credentials/tes43",
    "name": "tes43",
    "properties": {
      "creationTime": "2023-08-21T18:14:38.87+00:00",
      "description": null,
      "lastModifiedTime": "2023-08-21T18:14:38.87+00:00",
      "userName": "tes43"
    },
    "type": "Microsoft.Automation/AutomationAccounts/Credentials"
  },
  "inputs": {
    "account_name": "automation1",
    "credential_name": "tes43",
    "resource_group_name": "demoassets"
  },
  "metrics": {
    "execution_time_ms": 1393,
    "host": "local",
    "package": "fn-azure-automation-utilities",
    "package_version": "1.0.0",
    "timestamp": "2023-08-21 14:15:23",
    "version": "1.0"
  },
  "raw": null,
  "reason": null,
  "success": true,
  "version": 2.0
}

Example Function Input Script:

inputs.account_name = playbook.inputs.azure_automation_account_name
inputs.resource_group_name = playbook.inputs.azure_automation_resource_group
if getattr(playbook.inputs, "azure_automation_credential_name", None):
  inputs.credential_name = getattr(playbook.inputs, "azure_automation_credential_name", None)

Example Function Post Process Script:

from datetime import datetime
results = playbook.functions.results.cred

# Add credential information to data table
def add_to_row(credential):
  row = incident.addRow("azure_automation_credentials")
  row["credential_name"] = credential.get("name")
  row["credential_username"] = credential.get("properties", {}).get("userName")
  row["credential_description"] = credential.get("properties", {}).get("description")
  row["account_name_credentials"] = playbook.inputs.azure_automation_account_name
  row["resource_group_credentials"] = playbook.inputs.azure_automation_resource_group
  row["credential_deleted"] = False
  row["credential_query_date"] = int(datetime.now().timestamp()*1000)

if results.get("success"):
  incident.properties.azure_automation_create_ui_tab = True
  content = results.get('content', {})
  if content.get("value", []):
    # If list of credentials returned
    for credential in content.get("value", []):
      add_to_row(credential)
  elif content.get("name", None): # If single credential returned
    add_to_row(content)


Function - Azure Get Job

Retrieve the job info or job output identified by job name or list jobs.

screenshot: fn-azure-get-job

Inputs:

Name Type Required Example Tooltip
account_name text No - Azure Automation Account Name
job_name text No - Azure Automation job name
job_output boolean No - If True will return Job output. If False will return job details
resource_group_name text No - Existing Azure automation resource group name

Outputs:

NOTE: This example might be in JSON format, but results is a Python Dictionary on the SOAR platform.

results = {
  "content": {
    "id": "/subscriptions/abcdefgh-1234-abcd-1234-a1b2c3d4e5f6/resourceGroups/demoassets/providers/Microsoft.Automation/automationAccounts/automation1/jobs/1692024049238",
    "name": "1692024049238",
    "properties": {
      "creationTime": "2023-08-14T14:42:29.5306946+00:00",
      "endTime": "2023-08-14T14:42:55.9297673+00:00",
      "exception": null,
      "jobId": "efe4db52-a124-4bea-9582-7b0c7f7133e4",
      "lastModifiedTime": "2023-08-14T14:42:55.9297673+00:00",
      "lastStatusModifiedTime": "2023-08-14T14:42:55.9297673+00:00",
      "parameters": {
        "runbook_name": "get_all_runbooks"
      },
      "provisioningState": "Succeeded",
      "runOn": "",
      "runbook": {
        "name": "Get_given_runbook"
      },
      "startTime": "2023-08-14T14:42:41.9604553+00:00",
      "startedBy": "{scrubbed}",
      "status": "Completed",
      "statusDetails": "None"
    },
    "type": "Microsoft.Automation/AutomationAccounts/Jobs"
  },
  "inputs": {
    "account_name": "automation1",
    "job_name": "1692024049238",
    "resource_group_name": "demoassets"
  },
  "metrics": {
    "execution_time_ms": 533,
    "host": "local",
    "package": "fn-azure-automation-utilities",
    "package_version": "1.0.0",
    "timestamp": "2023-08-16 14:52:41",
    "version": "1.0"
  },
  "raw": null,
  "reason": null,
  "success": true,
  "version": 2.0
}

Example Function Input Script:

inputs.account_name = playbook.inputs.azure_automation_account_name
inputs.resource_group_name = playbook.inputs.azure_automation_resource_group_name
if getattr(playbook.inputs, "azure_automation_job_name", None):
  inputs.job_name = playbook.inputs.azure_automation_job_name

Example Function Post Process Script:

from json import dumps
results = playbook.functions.results.job_results
if results.get("success"):
  incident.properties.azure_automation_create_ui_tab = True
  incident.addNote(f"""Azure Automation: Job Get - Example (PB)
Inputs -
  Account Name: {playbook.inputs.azure_automation_account_name}
  Resource Group: {playbook.inputs.azure_automation_resource_group_name}
  Job Name: {getattr(playbook.inputs, 'azure_automation_job_name', None)}

Results -
  {dumps(results.get('content', {}), indent=4)}""")


Function - Azure Get Module Activity

Retrieve the activity in the module identified by module name and activity name or Retrieve a list of activities in the module identified by module name.

screenshot: fn-azure-get-module-activity

Inputs:

Name Type Required Example Tooltip
account_name text No - Azure Automation Account Name
activity_name text No - The Azure automation module activity name
module_name text No - The name of the Azure automation module.
resource_group_name text No - Existing Azure automation resource group name

Outputs:

NOTE: This example might be in JSON format, but results is a Python Dictionary on the SOAR platform.

results = {
  "content": {
    "id": "/subscriptions/abcdefgh-1234-abcd-1234-a1b2c3d4e5f6/resourceGroups/demoassets/providers/Microsoft.Automation/automationAccounts/automation1/modules/Az.Advisor/activities/Set-AzAdvisorConfiguration",
    "name": "Set-AzAdvisorConfiguration",
    "properties": {
      "creationTime": "2022-07-06T10:01:53.9133333+00:00",
      "definition": "",
      "description": "Updates or creates the Azure Advisor Configuration. ^https://docs.microsoft.com/powershell/module/az.advisor/set-azadvisorConfiguration^",
      "lastModifiedTime": "2022-07-06T10:01:53.9133333+00:00",
      "outputTypes": [
        {
          "name": "Microsoft.Azure.Commands.Advisor.Cmdlets.Models.PsAzureAdvisorConfigurationData",
          "type": "Microsoft.Azure.Commands.Advisor.Cmdlets.Models.PsAzureAdvisorConfigurationData"
        }
      ],
      "parameterSets": [
        {
          "name": "InputObjectLowCpuExcludeParameterSet",
          "parameters": [
            {
              "description": null,
              "isDynamic": false,
              "isMandatory": false,
              "name": "DefaultProfile",
              "position": -2147483648,
              "type": "Microsoft.Azure.Commands.Common.Authentication.Abstractions.Core.IAzureContextContainer",
              "validationSet": [],
              "valueFromPipeline": false,
              "valueFromPipelineByPropertyName": false,
              "valueFromRemainingArguments": false
            },
            {
              "description": null,
              "isDynamic": false,
              "isMandatory": false,
              "name": "Exclude",
              "position": 2,
              "type": "System.Management.Automation.SwitchParameter",
              "validationSet": [],
              "valueFromPipeline": false,
              "valueFromPipelineByPropertyName": false,
              "valueFromRemainingArguments": false
            },
            {
              "description": null,
              "isDynamic": false,
              "isMandatory": true,
              "name": "LowCpuThreshold",
              "position": 0,
              "type": "System.Int32",
              "validationSet": [],
              "valueFromPipeline": false,
              "valueFromPipelineByPropertyName": false,
              "valueFromRemainingArguments": false
            },
            {
              "description": null,
              "isDynamic": false,
              "isMandatory": false,
              "name": "WhatIf",
              "position": -2147483648,
              "type": "System.Management.Automation.SwitchParameter",
              "validationSet": [],
              "valueFromPipeline": false,
              "valueFromPipelineByPropertyName": false,
              "valueFromRemainingArguments": false
            },
            {
              "description": null,
              "isDynamic": false,
              "isMandatory": false,
              "name": "InputObject",
              "position": 1,
              "type": "Microsoft.Azure.Commands.Advisor.Cmdlets.Models.PsAzureAdvisorConfigurationData",
              "validationSet": [],
              "valueFromPipeline": true,
              "valueFromPipelineByPropertyName": false,
              "valueFromRemainingArguments": false
            },
            {
              "description": null,
              "isDynamic": false,
              "isMandatory": false,
              "name": "Confirm",
              "position": -2147483648,
              "type": "System.Management.Automation.SwitchParameter",
              "validationSet": [],
              "valueFromPipeline": false,
              "valueFromPipelineByPropertyName": false,
              "valueFromRemainingArguments": false
            }
          ]
        },
        {
          "name": "InputObjectRgExcludeParameterSet",
          "parameters": [
            {
              "description": null,
              "isDynamic": false,
              "isMandatory": false,
              "name": "InputObject",
              "position": 1,
              "type": "Microsoft.Azure.Commands.Advisor.Cmdlets.Models.PsAzureAdvisorConfigurationData",
              "validationSet": [],
              "valueFromPipeline": true,
              "valueFromPipelineByPropertyName": false,
              "valueFromRemainingArguments": false
            },
            {
              "description": null,
              "isDynamic": false,
              "isMandatory": false,
              "name": "Exclude",
              "position": 2,
              "type": "System.Management.Automation.SwitchParameter",
              "validationSet": [],
              "valueFromPipeline": false,
              "valueFromPipelineByPropertyName": false,
              "valueFromRemainingArguments": false
            },
            {
              "description": null,
              "isDynamic": false,
              "isMandatory": false,
              "name": "Confirm",
              "position": -2147483648,
              "type": "System.Management.Automation.SwitchParameter",
              "validationSet": [],
              "valueFromPipeline": false,
              "valueFromPipelineByPropertyName": false,
              "valueFromRemainingArguments": false
            },
            {
              "description": null,
              "isDynamic": false,
              "isMandatory": false,
              "name": "ResourceGroupName",
              "position": 0,
              "type": "System.String",
              "validationSet": [],
              "valueFromPipeline": false,
              "valueFromPipelineByPropertyName": false,
              "valueFromRemainingArguments": false
            },
            {
              "description": null,
              "isDynamic": false,
              "isMandatory": false,
              "name": "WhatIf",
              "position": -2147483648,
              "type": "System.Management.Automation.SwitchParameter",
              "validationSet": [],
              "valueFromPipeline": false,
              "valueFromPipelineByPropertyName": false,
              "valueFromRemainingArguments": false
            },
            {
              "description": null,
              "isDynamic": false,
              "isMandatory": false,
              "name": "DefaultProfile",
              "position": -2147483648,
              "type": "Microsoft.Azure.Commands.Common.Authentication.Abstractions.Core.IAzureContextContainer",
              "validationSet": [],
              "valueFromPipeline": false,
              "valueFromPipelineByPropertyName": false,
              "valueFromRemainingArguments": false
            }
          ]
        }
      ],
      "type": null
    },
    "type": null
  },
  "inputs": {
    "account_name": "automation1",
    "activity_name": "Set-AzAdvisorConfiguration",
    "module_name": "Az.Advisor",
    "resource_group_name": "demoassets"
  },
  "metrics": {
    "execution_time_ms": 2203,
    "host": "local",
    "package": "fn-azure-automation-utilities",
    "package_version": "1.0.0",
    "timestamp": "2023-08-14 10:52:19",
    "version": "1.0"
  },
  "raw": null,
  "reason": null,
  "success": true,
  "version": 2.0
}

Example Function Input Script:

inputs.account_name = playbook.inputs.azure_automation_account_name
inputs.module_name = playbook.inputs.azure_automation_module_name
inputs.resource_group_name = playbook.inputs.azure_automation_resource_group_name

if getattr(playbook.inputs, "azure_automation_activity_name", None):
  inputs.activity_name = playbook.inputs.azure_automation_activity_name

Example Function Post Process Script:

from json import dumps
results = playbook.functions.results.module_activity

if results.get("success"):
  incident.properties.azure_automation_create_ui_tab = True
  incident.addNote(f"""Azure Automation: Module Get Activity - Example (PB)
Inputs -
  Account Name: {playbook.inputs.azure_automation_account_name}
  Resource Group: {playbook.inputs.azure_automation_resource_group_name}
  Module Name: {playbook.inputs.azure_automation_module_name}
  Activity Name: {getattr(playbook.inputs, 'azure_automation_activity_name', None)}

Results -
  {dumps(results.get('content', {}), indent=4)}""")


Function - Azure Get Node Report

Retrieve the Dsc node report data by node id and report id or List Dsc node reports by node id.

screenshot: fn-azure-get-node-report

Inputs:

Name Type Required Example Tooltip
account_name text No - Azure Automation Account Name
node_id text Yes - Azure Automation Dsc node ID
report_id text No - Azure Automation Dsc node report ID
resource_group_name text No - Existing Azure automation resource group name

Outputs:

NOTE: This example might be in JSON format, but results is a Python Dictionary on the SOAR platform.

results = {
  "content": {
    "configurationVersion": "2.0.0",
    "endTime": "2023-09-06T13:30:02.1606975+00:00",
    "errors": [],
    "hostName": null,
    "iPV4Addresses": [],
    "iPV6Addresses": [],
    "id": "/subscriptions/abcdefgh-1234-abcd-1234-a1b2c3d4e5f6/resourceGroups/DemoAssets/providers/Microsoft.Automation/automationAccounts/automation1/nodes/24939717-e819-4059-aa08-82862c65f3c8/reports/3c47f0b6-aeb7-429a-a656-70f2a19ab22a",
    "lastModifiedTime": "2023-09-06T13:30:02.2533333+00:00",
    "metaConfiguration": null,
    "numberOfResources": 0,
    "rawErrors": null,
    "rebootRequested": null,
    "refreshMode": null,
    "reportFormatVersion": "2.0",
    "reportId": "3c47f0b6-aeb7-429a-a656-70f2a19ab22a",
    "resources": [],
    "startTime": "2023-09-06T13:30:01.9451859+00:00",
    "status": "Compliant",
    "type": "Consistency"
  },
  "inputs": {
    "account_name": "automation1",
    "node_id": "24939717-e819-4059-aa08-82862c65f3c8",
    "report_id": "3c47f0b6-aeb7-429a-a656-70f2a19ab22a",
    "resource_group_name": "DemoAssets"
  },
  "metrics": {
    "execution_time_ms": 1084,
    "host": "local",
    "package": "fn-azure-automation-utilities",
    "package_version": "1.0.0",
    "timestamp": "2023-09-06 09:55:00",
    "version": "1.0"
  },
  "raw": null,
  "reason": null,
  "success": true,
  "version": 2.0
}

Example Function Input Script:

inputs.account_name = playbook.inputs.azure_automation_account_name
inputs.node_id = playbook.inputs.azure_automation_node_id
inputs.resource_group_name = playbook.inputs.azure_automation_resource_group_name
if getattr(playbook.inputs, "azure_automation_report_id", None):
  inputs.report_id = playbook.inputs.azure_automation_report_id

Example Function Post Process Script:

from json import dumps
results = playbook.functions.results.node_report

if results.get("success"):
  incident.properties.azure_automation_create_ui_tab = True
  incident.addNote(f"""Azure Automation: Node Get Report - Example (PB)
Inputs -
  Account Name: {playbook.inputs.azure_automation_account_name}
  Resource Group: {playbook.inputs.azure_automation_resource_group_name}
  Node ID: {playbook.inputs.azure_automation_node_id}
  Report ID: {getattr(playbook.inputs, 'azure_automation_report_id', None)}

Results -
  {dumps(results.get('content', {}), indent=4)}""")


Function - Azure Get Runbook

Retrieve the runbook identified by runbook name or list runbooks on given account.

screenshot: fn-azure-get-runbook

Inputs:

Name Type Required Example Tooltip
account_name text No - Azure Automation Account Name
resource_group_name text No - Existing Azure automation resource group name
runbook_name text No - Runbook name in Azure Automation

Outputs:

NOTE: This example might be in JSON format, but results is a Python Dictionary on the SOAR platform.

results = {
  "content": {
    "etag": "\"638246066435733333\"",
    "id": "/subscriptions/abcdefgh-1234-abcd-1234-a1b2c3d4e5f6/resourceGroups/demoassets/providers/Microsoft.Automation/automationAccounts/automation1/runbooks/Hello_world",
    "location": "eastus",
    "name": "Hello_world",
    "properties": {
      "creationTime": "2023-07-10T17:22:53.7066667+00:00",
      "description": "My first python 3 runbook",
      "draft": null,
      "jobCount": 0,
      "lastModifiedBy": null,
      "lastModifiedTime": "2023-07-10T17:24:03.5733333+00:00",
      "logActivityTrace": 0,
      "logProgress": false,
      "logVerbose": false,
      "outputTypes": [],
      "parameters": {},
      "provisioningState": "Succeeded",
      "runbookType": "Python3",
      "serviceManagementTags": null,
      "state": "Published"
    },
    "tags": {},
    "type": "Microsoft.Automation/AutomationAccounts/Runbooks"
  },
  "inputs": {
    "account_name": "automation1",
    "resource_group_name": "demoassets",
    "runbook_name": "Hello_world"
  },
  "metrics": {
    "execution_time_ms": 7989,
    "host": "local",
    "package": "fn-azure-automation-utilities",
    "package_version": "1.0.0",
    "timestamp": "2023-08-16 10:20:00",
    "version": "1.0"
  },
  "raw": null,
  "reason": null,
  "success": true,
  "version": 2.0
}

Example Function Input Script:

inputs.account_name = playbook.inputs.azure_automation_account_name
inputs.resource_group_name = playbook.inputs.azure_resource_group
if getattr(playbook.inputs, 'azure_automation_runbook_name', None):
  inputs.runbook_name = playbook.inputs.azure_automation_runbook_name

Example Function Post Process Script:

from datetime import datetime
results = playbook.functions.results.runbook_results

# Add runbooks info to the data table
def add_to_row(runbook):
  row = incident.addRow("azure_automation_runbooks")
  row["runbook_name"] = runbook.get("name")
  row["runbook_type"] = runbook.get("properties", {}).get("runbookType")
  row["runbook_state"] = runbook.get("properties", {}).get("state")
  row["runbook_tags"] = str(runbook.get("tags"))
  row["account_name_runbooks"] = playbook.inputs.azure_automation_account_name
  row["resource_group_runbooks"] = playbook.inputs.azure_resource_group
  row["runbook_deleted"] = False
  row["runbook_query_date"] = int(datetime.now().timestamp()*1000)

if results.get("success"):
  incident.properties.azure_automation_create_ui_tab = True
  content = results.get("content", {})
  if content.get("value", None):
    # If list of runbooks returned
    for runbook in content.get("value", []):
      add_to_row(runbook)
  else: # If single runbook returned
    add_to_row(content)


Function - Azure Get Schedule

Retrieve the schedule identified by schedule name or list schedules.

screenshot: fn-azure-get-schedule

Inputs:

Name Type Required Example Tooltip
account_name text No - Azure Automation Account Name
resource_group_name text No - Existing Azure automation resource group name
schedule_name text No The name of the azure automation schedule -

Outputs:

NOTE: This example might be in JSON format, but results is a Python Dictionary on the SOAR platform.

results = {
  "content": {
    "id": "/subscriptions/abcdefgh-1234-abcd-1234-a1b2c3d4e5f6/resourceGroups/demoassets/providers/Microsoft.Automation/automationAccounts/automation1/schedules/tester1324",
    "name": "tester1324",
    "properties": {
      "advancedSchedule": null,
      "creationTime": "2023-08-24T15:31:44.2666667+00:00",
      "description": "something",
      "expiryTime": "2023-08-25T08:40:00+00:00",
      "expiryTimeOffsetMinutes": 0.0,
      "frequency": "OneTime",
      "interval": null,
      "isEnabled": true,
      "lastModifiedTime": "2023-08-24T15:31:44.2666667+00:00",
      "nextRun": "2023-08-25T08:40:00+00:00",
      "nextRunOffsetMinutes": 0.0,
      "startTime": "2023-08-25T08:40:00+00:00",
      "startTimeOffsetMinutes": 0.0,
      "timeZone": "Etc/UTC"
    },
    "type": "Microsoft.Automation/AutomationAccounts/Schedules"
  },
  "inputs": {
    "account_name": "automation1",
    "resource_group_name": "demoassets",
    "schedule_name": "tester1324"
  },
  "metrics": {
    "execution_time_ms": 1586,
    "host": "local",
    "package": "fn-azure-automation-utilities",
    "package_version": "1.0.0",
    "timestamp": "2023-08-24 11:33:14",
    "version": "1.0"
  },
  "raw": null,
  "reason": null,
  "success": true,
  "version": 2.0
}

Example Function Input Script:

inputs.account_name = playbook.inputs.azure_automation_account_name
inputs.resource_group_name = playbook.inputs.azure_automation_resource_group
if getattr(playbook.inputs, "azure_automation_schedule_name", None):
  inputs.schedule_name = playbook.inputs.azure_automation_schedule_name

Example Function Post Process Script:

from datetime import datetime
results = playbook.functions.results.get_schedule

# Add schedule information to data table
def row_to_add(schedule):
  row = incident.addRow("azure_automation_schedules")
  row["schedule_name"] = schedule.get("name", "")
  row["schedule_description"] = schedule.get("properties", {}).get("description", None)
  row["schedule_enabled"] = schedule.get("properties", {}).get("isEnabled", False)
  row["schedule_start_time"] = schedule.get("properties", {}).get("startTime", None)
  row["schedule_expiry_time"] = schedule.get("properties", {}).get("expiryTime", None)
  row["schedule_frequency"] = schedule.get("properties", {}).get("frequency", None)
  row["schedule_interval"] = schedule.get("properties", {}).get("interval", 1)
  row["schedule_time_zone"] = schedule.get("properties", {}).get("timeZone", None)
  row["advanced_schedule"] = str(schedule.get("properties", {}).get("advancedSchedule", {}))
  row["account_name_schedules"] = playbook.inputs.azure_automation_account_name
  row["resource_group_schedules"] = playbook.inputs.azure_automation_resource_group
  row["schedule_deleted"] = False
  row["schedule_query_date"] = int(datetime.now().timestamp()*1000)

if results.get("success"):
  incident.properties.azure_automation_create_ui_tab = True
  content = results.get("content", {})
  if content.get("value", None):
    # If list of schedules returned
    for schedule in content.get("value", []):
      row_to_add(schedule)
  else: # If single schedule returned
    row_to_add(content)


Function - Azure List Statistics by Automation Account

Retrieve the statistics for the account.

screenshot: fn-azure-list-statistics-by-automation-account

Inputs:

Name Type Required Example Tooltip
account_name text No - Azure Automation Account Name
resource_group_name text No - Existing Azure automation resource group name

Outputs:

NOTE: This example might be in JSON format, but results is a Python Dictionary on the SOAR platform.

results = {
  "content": {
    "value": [
      {
        "counterProperty": "New",
        "counterValue": 0,
        "endTime": "2023-09-06T13:58:01.5985342+00:00",
        "id": "/subscriptions/abcdefgh-1234-abcd-1234-a1b2c3d4e5f6/resourceGroups/DemoAssets/providers/Microsoft.Automation/automationAccounts/automation1/statistics/New",
        "startTime": "2023-08-30T13:58:01.5985342+00:00"
      },
      {
        "counterProperty": "Activating",
        "counterValue": 0,
        "endTime": "2023-09-06T13:58:01.5985342+00:00",
        "id": "/subscriptions/abcdefgh-1234-abcd-1234-a1b2c3d4e5f6/resourceGroups/DemoAssets/providers/Microsoft.Automation/automationAccounts/automation1/statistics/Activating",
        "startTime": "2023-08-30T13:58:01.5985342+00:00"
      },
      {
        "counterProperty": "Running",
        "counterValue": 0,
        "endTime": "2023-09-06T13:58:01.5985342+00:00",
        "id": "/subscriptions/abcdefgh-1234-abcd-1234-a1b2c3d4e5f6/resourceGroups/DemoAssets/providers/Microsoft.Automation/automationAccounts/automation1/statistics/Running",
        "startTime": "2023-08-30T13:58:01.5985342+00:00"
      },
      {
        "counterProperty": "Completed",
        "counterValue": 0,
        "endTime": "2023-09-06T13:58:01.5985342+00:00",
        "id": "/subscriptions/abcdefgh-1234-abcd-1234-a1b2c3d4e5f6/resourceGroups/DemoAssets/providers/Microsoft.Automation/automationAccounts/automation1/statistics/Completed",
        "startTime": "2023-08-30T13:58:01.5985342+00:00"
      },
      {
        "counterProperty": "Failed",
        "counterValue": 0,
        "endTime": "2023-09-06T13:58:01.5985342+00:00",
        "id": "/subscriptions/abcdefgh-1234-abcd-1234-a1b2c3d4e5f6/resourceGroups/DemoAssets/providers/Microsoft.Automation/automationAccounts/automation1/statistics/Failed",
        "startTime": "2023-08-30T13:58:01.5985342+00:00"
      }
    ]
  },
  "inputs": {
    "account_name": "automation1",
    "resource_group_name": "DemoAssets"
  },
  "metrics": {
    "execution_time_ms": 773,
    "host": "local",
    "package": "fn-azure-automation-utilities",
    "package_version": "1.0.0",
    "timestamp": "2023-09-06 09:58:01",
    "version": "1.0"
  },
  "raw": null,
  "reason": null,
  "success": true,
  "version": 2.0
}

Example Function Input Script:

inputs.account_name = playbook.inputs.azure_automation_account_name
inputs.resource_group_name = playbook.inputs.azure_automation_resource_group_name

Example Function Post Process Script:

from datetime import datetime
results = playbook.functions.results.statistics

if results.get("success"):
  incident.properties.azure_automation_create_ui_tab = True
  for stat in results.get("content", {}).get("value", []):
    row = incident.addRow("azure_automation_statistics")
    row["statistic_counter_property"] = stat.get("counterProperty", None)
    row["statistic_counter_value"] = stat.get("counterValue", 0)
    row["account_name_statistics"] = playbook.inputs.azure_automation_account_name
    row["resource_group_statistics"] = playbook.inputs.azure_automation_resource_group_name
    row["statistic_query_date"] = int(datetime.now().timestamp()*1000)


Function - Azure Regenerate Agent Registration Key

Regenerate a primary or secondary agent registration key

screenshot: fn-azure-regenerate-agent-registration-key

Inputs:

Name Type Required Example Tooltip
account_name text No - Azure Automation Account Name
input_parameters text No - string with dictionary format
resource_group_name text No - Existing Azure automation resource group name

Outputs:

NOTE: This example might be in JSON format, but results is a Python Dictionary on the SOAR platform.

results = {
  "content": {
    "dscMetaConfiguration": null,
    "endpoint": "https://abcdefgh-1234-abcd-1234-a1b2c3d4e5f6.agentsvc.eus.azure-automation.net/accounts/abcdefgh-1234-abcd-1234-a1b2c3d4e5f6",
    "id": null,
    "keys": {
      "primary": "g+Z4E/12345678c/YbuFnwTe4yI12EYPRTdmFHVj+SI12345b0R8ghU8YNWe7BM3hjYDCzkqWhZGd0r5V4YHag==",
      "secondary": "bC6hr123456789qPD2eeowEt9rDRqfJMnJmUOhP123450/x53Vezc3rqDhherrLzb123456MWhub+86IKwxssg=="
    }
  },
  "inputs": {
    "account_name": "automation1",
    "input_parameters": "{\u0027keyName\u0027: \u0027primary\u0027}",
    "resource_group_name": "demoassets"
  },
  "metrics": {
    "execution_time_ms": 1104,
    "host": "local",
    "package": "fn-azure-automation-utilities",
    "package_version": "1.0.0",
    "timestamp": "2023-08-21 09:53:13",
    "version": "1.0"
  },
  "raw": null,
  "reason": null,
  "success": true,
  "version": 2.0
}

Example Function Input Script:

inputs.account_name = playbook.inputs.azure_automation_account_name
inputs.resource_group_name = playbook.inputs.azure_automation_resource_group
inputs.input_parameters = str({"keyName": playbook.inputs.azure_automation_agent_key_to_regenerate})

Example Function Post Process Script:

from json import dumps
results = playbook.functions.results.registration_key

if results.get("success"):
  incident.properties.azure_automation_create_ui_tab = True
  incident.addNote(f"""Azure Automation: Agent Registration Regenerate Key - Example (PB)
Inputs -
  Account Name: {playbook.inputs.azure_automation_account_name}
  Resource Group: {playbook.inputs.azure_automation_resource_group}
  Key to Regenerate: {playbook.inputs.azure_automation_agent_key_to_regenerate}

Results -
  {dumps(results.get('content', {}), indent=4)}""")


Playbooks

Playbook Name Description Activation Type Object Status Condition
Azure Automation: Account Delete - Example (PB) Delete an Azure automation account Manual azure_automation_accounts enabled azure_automation_accounts.account_deleted_accounts not_equals True AND azure_automation_accounts.account_name_accounts has_a_value AND azure_automation_accounts.resource_group_accounts has_a_value
Azure Automation: Account Update - Example (PB) Update an automation account. Manual azure_automation_accounts enabled azure_automation_accounts.account_deleted_accounts not_equals True AND azure_automation_accounts.account_name_accounts has_a_value AND azure_automation_accounts.resource_group_accounts has_a_value
Azure Automation: Credential Delete - Example (PB) Delete a credential Manual azure_automation_credentials enabled azure_automation_credentials.account_name_credentials has_a_value AND azure_automation_credentials.credential_deleted not_equals True AND azure_automation_credentials.credential_name has_a_value AND azure_automation_credentials.resource_group_credentials has_a_value
Azure Automation: Credential Update - Example (PB) Update a credential. Manual azure_automation_credentials enabled azure_automation_credentials.account_name_credentials has_a_value AND azure_automation_credentials.credential_deleted not_equals True AND azure_automation_credentials.credential_name has_a_value AND azure_automation_credentials.resource_group_credentials has_a_value
Azure Automation: Runbook Delete - Example (PB) Delete an Azure runbook Manual azure_automation_runbooks enabled azure_automation_runbooks.account_name_runbooks has_a_value AND azure_automation_runbooks.resource_group_runbooks has_a_value AND azure_automation_runbooks.runbook_deleted not_equals True AND azure_automation_runbooks.runbook_name has_a_value
Azure Automation: Runbook Execute - Example (PB) Execute a runbook on Azure Manual azure_automation_runbooks enabled azure_automation_runbooks.account_name_runbooks has_a_value AND azure_automation_runbooks.resource_group_runbooks has_a_value AND azure_automation_runbooks.runbook_name has_a_value
Azure Automation: Schedule Delete - Example (PB) Delete the schedule identified by schedule name. Manual azure_automation_schedules enabled azure_automation_schedules.account_name_schedules has_a_value AND azure_automation_schedules.resource_group_schedules has_a_value AND azure_automation_schedules.schedule_deleted not_equals True AND azure_automation_schedules.schedule_name has_a_value
Azure Automation: Schedule Update - Example (PB) Update the schedule identified by schedule name. Manual azure_automation_schedules enabled azure_automation_schedules.account_name_schedules has_a_value AND azure_automation_schedules.resource_group_schedules has_a_value AND azure_automation_schedules.schedule_deleted not_equals True AND azure_automation_schedules.schedule_name has_a_value
Azure Automation: Account Create - Example (PB) Create an Azure automation account Manual incident enabled -
Azure Automation: Credential Create - Example (PB) Create a credential Manual incident enabled -
Azure Automation: Schedule Create - Example (PB) Create a schedule. Manual incident enabled -
Azure Automation: Account Get - Example (PB) Get the details of the given Azure automation account. Manual incident enabled -
Azure Automation: Agent Registration Get Information - Example (PB) Retrieve the automation agent registration information. Manual incident enabled -
Azure Automation: Credential Get - Example (PB) Get credential from given credential name or list all credentials on given resource group. Manual incident enabled -
Azure Automation: Job Get - Example (PB) Retrieve the job identified by job name. Manual incident enabled -
Azure Automation: Job Get Output - Example (PB) Retrieve the job output identified by job name. Manual incident enabled -
Azure Automation: Module Get Activity - Example (PB) Retrieve the activity in the module identified by module name and activity name. Manual incident enabled -
Azure Automation: DSC Node Get Report - Example (PB) Retrieve the Dsc node report data by node id and report id or List Dsc node reports by node id. Manual incident enabled -
Azure Automation: Runbook Get - Example (PB) Retrieve the runbook identified by runbook name. Manual incident enabled -
Azure Automation: Schedule Get - Example (PB) Retrieve the schedule identified by schedule name. Manual incident enabled -
Azure Automation: Statistics List by Automation Account - Example (PB) Retrieve the statistics for the account. Manual incident enabled -
Azure Automation: Agent Registration Regenerate Key - Example (PB) Regenerate a primary or secondary agent registration key Manual incident enabled -

Data Table - Azure Automation Accounts

screenshot: dt-azure-automation-accounts

API Name:

azure_automation_accounts

Columns:

Column Name API Access Name Type Tooltip
Deleted account_deleted_accounts boolean If the account has been deleted or not
disableLocalAuth disablelocalauth_accounts boolean Either disable or enable local Auth. A value of True would mean local auth is disabled.
Location location_accounts text The region the account is in
Name account_name_accounts text Azure Automation Account Name
publicNetworkAccess publicnetworkaccess_accounts boolean Either allow or deny access to public network from account
Query Date account_query_date datetimepicker Time the query to get this information was run
Resource Group resource_group_accounts text Azure Automation resource group name
Tags tags_accounts text dictionary of Azure automation account tags

Data Table - Azure Automation Credentials

screenshot: dt-azure-automation-credentials

API Name:

azure_automation_credentials

Columns:

Column Name API Access Name Type Tooltip
Account Name account_name_credentials text Name fo the account the credential is on
Deleted credential_deleted boolean If the credential is deleted
Description credential_description text Description for the credential
Name credential_name text Name of the credential
Query Date credential_query_date datetimepicker Time the query was run to get this information
Resource Group resource_group_credentials text Resource group the credential is on
Username credential_username text Username for the credential

Data Table - Azure Automation Runbooks

screenshot: dt-azure-automation-runbooks

API Name:

azure_automation_runbooks

Columns:

Column Name API Access Name Type Tooltip
Account Name account_name_runbooks text Name of the account the runbook is on
Deleted runbook_deleted boolean If the runbook as been deleted or not
Name runbook_name text Name of the runbook
Query Date runbook_query_date datetimepicker Time the query to get this information was run
Resource Group resource_group_runbooks text The resource group the account is on
State runbook_state text State of the runbook
Tags runbook_tags text Tags given to the runbook
Type runbook_type text Type of runbook

Data Table - Azure Automation Schedules

screenshot: dt-azure-automation-schedules

API Name:

azure_automation_schedules

Columns:

Column Name API Access Name Type Tooltip
Account Name account_name_schedules text Azure automation account name
Advanced Schedule advanced_schedule text The advanced schedule properties
Deleted schedule_deleted boolean If the schedule is deleted or not
Description schedule_description text Description of the schedule
Enabled schedule_enabled boolean Is the schedule enabled
Expiry Time schedule_expiry_time text The time the schedule expires
Frequency schedule_frequency text The frequency of the schedule
Interval schedule_interval text The execute intervals of the schedule
Name schedule_name text Name of the schedule
Query Date schedule_query_date datetimepicker Time the query to get this information was run
Resource Group resource_group_schedules text Azure Automation resource group
Start Time schedule_start_time text The time the schedule starts
Time Zone schedule_time_zone text The time zone the schedule is in

Data Table - Azure Automation Statistics

screenshot: dt-azure-automation-statistics

API Name:

azure_automation_statistics

Columns:

Column Name API Access Name Type Tooltip
Account Name account_name_statistics text Azure Automation Account Name
Counter Property statistic_counter_property text Property of the counter statistic
Counter Value statistic_counter_value number The value of the counter statistic
Query Date statistic_query_date datetimepicker Time the query to get this information was run
Resource Group resource_group_statistics text Azure Automation resource group

Custom Fields

Label API Access Name Type Prefix Placeholder Tooltip
Create UI Tab azure_automation_create_ui_tab boolean properties - If true the Azure Automation UI Tab will be created

Troubleshooting & Support

Refer to the documentation listed in the Requirements section for troubleshooting information.

For Support

This is an IBM supported app. Please search ibm.com/mysupport for assistance.