MicrosoftWindows Deprecated
Agentless Windows host management over WinRM. Deprecated. Use Ansible Microsoft Windows (from the Ansible Microsoft Windows pack) instead.
IT Services · Ansible Powered Integrations (Deprecated)
Details
| ID | MicrosoftWindows |
|---|---|
| Provider | Microsoft |
| Category | IT Services |
| From Version | 6.0.0 |
| Docker Image | demisto/ansible-runner:1.0.0.3456168 |
| Supported Modules | Agentix |
Configuration parameters
creds— Username (required)port— Default WinRM Port (required)concurrency— Concurrecy Factor (required)
Commands (104)
-
win-aclSet file/directory/registry permissions for a system user or group.
-
win-acl-inheritanceChange ACL inheritance.
-
win-audit-policy-systemUsed to make changes to the system wide Audit Policy.
-
win-audit-ruleAdds an audit rule to files, folders, or registry keys.
-
win-certificate-storeManages the certificate store.
-
win-chocolateyManage packages using chocolatey.
-
win-chocolatey-configManages Chocolatey config settings.
-
win-chocolatey-factsCreate a facts collection for Chocolatey.
-
win-chocolatey-featureManages Chocolatey features.
-
win-chocolatey-sourceManages Chocolatey sources.
-
win-copyCopies files to remote locations on windows hosts.
-
win-credentialManages Windows Credentials in the Credential Manager.
-
win-defragConsolidate fragmented files on local volumes.
-
win-disk-factsShow the attached disks and disk information of the target host.
-
win-disk-imageManage ISO/VHD/VHDX mounts on Windows hosts.
-
win-dns-clientConfigures DNS lookup on Windows hosts.
-
win-dns-recordManage Windows Server DNS records.
-
win-domainEnsures the existence of a Windows domain.
-
win-domain-computerManage computers in Active Directory.
-
win-domain-controllerManage domain controller/member server state for a Windows host.
-
win-domain-groupCreates, modifies or removes domain groups.
-
win-domain-group-membershipManage Windows domain group membership.
-
win-domain-membershipManage domain/workgroup membership for a Windows host.
-
win-domain-userManages Windows Active Directory user accounts.
-
win-dotnet-ngenRuns ngen to recompile DLLs after .NET updates.
-
win-dscInvokes a PowerShell DSC configuration.
-
win-environmentModify environment variables on windows hosts.
-
win-eventlogManage Windows event logs.
-
win-eventlog-entryWrite entries to Windows event logs.
-
win-featureInstalls and uninstalls Windows Features on Windows Server.
-
win-fileCreates, touches or removes files or directories.
-
win-file-versionGet DLL or EXE file build version.
-
win-findReturn a list of files based on specific criteria.
-
win-firewallEnable or disable the Windows Firewall.
-
win-firewall-ruleWindows firewall automation.
-
win-formatFormats an existing volume or a new volume on an existing partition on Windows.
-
win-gather-factsGathers facts about remote hosts.
-
win-get-urlDownloads file from HTTP, HTTPS, or FTP to node.
-
win-groupAdd and remove local groups.
-
win-group-membershipManage Windows local group membership.
-
win-hostnameManages local Windows computer name.
-
win-hostsManages hosts file entries on Windows.
-
win-hotfixInstall and uninstalls Windows hotfixes.
-
win-http-proxyManages proxy settings for WinHTTP.
-
win-iis-virtualdirectoryConfigures a virtual directory in IIS.
-
win-iis-webapplicationConfigures IIS web applications.
-
win-iis-webapppoolConfigure IIS Web Application Pools.
-
win-iis-webbindingConfigures a IIS Web site binding.
-
win-iis-websiteConfigures a IIS Web site.
-
win-inet-proxyManages proxy settings for WinINet and Internet Explorer.
-
win-lineinfileEnsure a particular line is in a file, or replace an existing line using a back-referenced regular expression.
-
win-mapped-driveMap network drives for users.
-
win-msgSends a message to logged in users on Windows hosts.
-
win-netbiosManage NetBIOS over TCP/IP settings on Windows.
-
win-nssmInstall a service using NSSM.
-
win-optional-featureManage optional Windows features.
-
win-ownerSet owner.
-
win-packageInstalls/uninstalls an installable package.
-
win-pagefileQuery or change pagefile configuration.
-
win-partitionCreates, changes and removes partitions on Windows Server.
-
win-pathManage Windows path environment variables.
-
win-pesterRun Pester tests on Windows hosts.
-
win-pingA windows version of the classic ping module.
-
win-power-planChanges the power plan of a Windows system.
-
win-product-factsProvides Windows product and license information.
-
win-psexecRuns commands (remotely) as another (privileged) user.
-
win-psmoduleAdds or removes a Windows PowerShell module.
-
win-psrepositoryAdds, removes or updates a Windows PowerShell repository.
-
win-rabbitmq-pluginManage RabbitMQ plugins.
-
win-rds-capManage Connection Authorization Policies (CAP) on a Remote Desktop Gateway server.
-
win-rds-rapManage Resource Authorization Policies (RAP) on a Remote Desktop Gateway server.
-
win-rds-settingsManage main settings of a Remote Desktop Gateway server.
-
win-rebootReboot a windows machine.
-
win-reg-statGet information about Windows registry keys.
-
win-regeditAdd, change, or remove registry keys and values.
-
win-regionSet the region and format settings.
-
win-regmergeMerges the contents of a registry file into the Windows registry.
-
win-robocopySynchronizes the contents of two directories using Robocopy.
-
win-routeAdd or remove a static route.
-
win-sayText to speech module for Windows to speak messages and optionally play sounds.
-
win-scheduled-taskManage scheduled tasks.
-
win-scheduled-task-statGet information about Windows Scheduled Tasks.
-
win-security-policyChange local security policy settings.
-
win-serviceManage and query Windows services.
-
win-shareManage Windows shares.
-
win-shortcutManage shortcuts on Windows.
-
win-snmpConfigures the Windows SNMP service.
-
win-statGet information about Windows files.
-
win-tempfileCreates temporary files and directories.
-
win-templateTemplate a file out to a remote server.
-
win-timezoneSets Windows machine timezone.
-
win-toastSends Toast windows notification to logged in users on Windows 10 or later hosts.
-
win-unzipUnzips compressed files and archives on the Windows node.
-
win-updatesDownload and install Windows updates.
-
win-uriInteracts with webservices.
-
win-userManages local Windows user accounts.
-
win-user-profileManages the Windows user profiles.
-
win-user-rightManage Windows User Rights.
-
win-wait-forWaits for a condition before continuing.
-
win-wait-for-processWaits for a process to exist or not exist before continuing.
-
win-wakeonlanSend a magic Wake-on-LAN (WoL) broadcast packet.
-
win-webpicmdInstalls packages using Web Platform Installer command-line.
-
win-whoamiGet information about the current user and process.
-
win-xmlManages XML file content on Windows hosts.
import demistomock as demisto # noqa: F401 from CommonServerPython import * # noqa: F401 import json import traceback from typing import Dict, cast import ansible_runner import ssh_agent_setup # Dict to Markdown Converter adapted from https://github.com/PolBaladas/torsimany/ def dict2md(json_block, depth=0): markdown = "" if isinstance(json_block, dict): markdown = parseDict(json_block, depth) if isinstance(json_block, list): markdown = parseList(json_block, depth) return markdown def parseDict(d, depth): markdown = "" for k in d: if isinstance(d[k], (dict, list)): markdown += addHeader(k, depth) markdown += dict2md(d[k], depth + 1) else: markdown += buildValueChain(k, d[k], depth) return markdown def parseList(rawlist, depth): markdown = "" for value in rawlist: if not isinstance(value, (dict, list)): index = rawlist.index(value) markdown += buildValueChain(index, value, depth) else: markdown += parseDict(value, depth) return markdown def buildHeaderChain(depth): list_tag = '* ' htag = '#' chain = list_tag * (bool(depth)) + htag * (depth + 1) + \ ' value ' + (htag * (depth + 1) + '\n') return chain def buildValueChain(key, value, depth): tab = " " list_tag = '* ' chain = tab * (bool(depth - 1)) + list_tag + \ str(key) + ": " + str(value) + "\n" return chain def addHeader(value, depth): chain = buildHeaderChain(depth) chain = chain.replace('value', value.title()) return chain # Remove ansible branding from results def rec_ansible_key_strip(obj): if isinstance(obj, dict): return {key.replace('ansible_', ''): rec_ansible_key_strip(val) for key, val in obj.items()} return obj # COMMAND FUNCTIONS def generic_ansible(integration_name, command, args: Dict[str, Any]) -> CommandResults: readable_output = "" sshkey = "" fork_count = 1 # default to executing against 1 host at a time if args.get('concurrency'): fork_count = cast(int, args.get('concurrency')) inventory: Dict[str, dict] = {} inventory['all'] = {} inventory['all']['hosts'] = {} if type(args['host']) is list: # host arg can be a array of multiple hosts hosts = args['host'] else: # host arg could also be csv hosts = [host.strip() for host in args['host'].split(',')] for host in hosts: new_host = {} new_host['ansible_host'] = host if ":" in host: address = host.split(':') new_host['ansible_port'] = address[1] new_host['ansible_host'] = address[0] else: new_host['ansible_host'] = host if demisto.params().get('port'): new_host['ansible_port'] = demisto.params().get('port') # Windows # Different credential options # Password saved in credential manager selection if demisto.params().get('creds', {}).get('credentials').get('password'): username = demisto.params().get('creds', {}).get('credentials').get('user') password = demisto.params().get('creds', {}).get('credentials').get('password') new_host['ansible_user'] = username new_host['ansible_password'] = password # username/password individually entered else: username = demisto.params().get('creds', {}).get('identifier') password = demisto.params().get('creds', {}).get('password') new_host['ansible_user'] = username new_host['ansible_password'] = password new_host['ansible_connection'] = "winrm" new_host['ansible_winrm_transport'] = "ntlm" new_host['ansible_winrm_server_cert_validation'] = "ignore" inventory['all']['hosts'][host] = new_host module_args = "" # build module args list for arg_key, arg_value in args.items(): # skip hardcoded host arg, as it doesn't related to module if arg_key == 'host': continue module_args += "%s=\"%s\" " % (arg_key, arg_value) r = ansible_runner.run(inventory=inventory, host_pattern='all', module=command, quiet=True, omit_event_data=True, ssh_key=sshkey, module_args=module_args, forks=fork_count) results = [] for each_host_event in r.events: # Troubleshooting # demisto.log("%s: %s\n" % (each_host_event['event'], each_host_event)) if each_host_event['event'] in ["runner_on_ok", "runner_on_unreachable", "runner_on_failed"]: # parse results result = json.loads('{' + each_host_event['stdout'].split('{', 1)[1]) host = each_host_event['stdout'].split('|', 1)[0].strip() status = each_host_event['stdout'].replace('=>', '|').split('|', 3)[1] # if successful build outputs if each_host_event['event'] == "runner_on_ok": if 'fact' in command: result = result['ansible_facts'] else: if result.get(command) is not None: result = result[command] else: result.pop("ansible_facts", None) result = rec_ansible_key_strip(result) if host != "localhost": readable_output += "# %s - %s\n" % (host, status) else: # This is integration is not host based readable_output += "# %s\n" % status readable_output += dict2md(result) # add host and status to result result['host'] = host result['status'] = status results.append(result) if each_host_event['event'] == "runner_on_unreachable": msg = "Host %s unreachable\nError Details: %s" % (host, result) return_error(msg) if each_host_event['event'] == "runner_on_failed": msg = "Host %s failed running command\nError Details: %s" % (host, result) return_error(msg) return CommandResults( readable_output=readable_output, outputs_prefix=integration_name + '.' + command, outputs_key_field='', outputs=results ) # MAIN FUNCTION def main() -> None: """main function, parses params and runs command functions :return: :rtype: """ # SSH Key integration requires ssh_agent to be running in the background ssh_agent_setup.setup() try: if demisto.command() == 'test-module': # This is the call made when pressing the integration Test button. return_results('ok') elif demisto.command() == 'win-gather-facts': return_results(generic_ansible('microsoftwindows', 'gather_facts', demisto.args())) elif demisto.command() == 'win-acl': return_results(generic_ansible('microsoftwindows', 'win_acl', demisto.args())) elif demisto.command() == 'win-acl-inheritance': return_results(generic_ansible('microsoftwindows', 'win_acl_inheritance', demisto.args())) elif demisto.command() == 'win-audit-policy-system': return_results(generic_ansible('microsoftwindows', 'win_audit_policy_system', demisto.args())) elif demisto.command() == 'win-audit-rule': return_results(generic_ansible('microsoftwindows', 'win_audit_rule', demisto.args())) elif demisto.command() == 'win-certificate-store': return_results(generic_ansible('microsoftwindows', 'win_certificate_store', demisto.args())) elif demisto.command() == 'win-chocolatey': return_results(generic_ansible('microsoftwindows', 'win_chocolatey', demisto.args())) elif demisto.command() == 'win-chocolatey-config': return_results(generic_ansible('microsoftwindows', 'win_chocolatey_config', demisto.args())) elif demisto.command() == 'win-chocolatey-facts': return_results(generic_ansible('microsoftwindows', 'win_chocolatey_facts', demisto.args())) elif demisto.command() == 'win-chocolatey-feature': return_results(generic_ansible('microsoftwindows', 'win_chocolatey_feature', demisto.args())) elif demisto.command() == 'win-chocolatey-source': return_results(generic_ansible('microsoftwindows', 'win_chocolatey_source', demisto.args())) elif demisto.command() == 'win-copy': return_results(generic_ansible('microsoftwindows', 'win_copy', demisto.args())) elif demisto.command() == 'win-credential': return_results(generic_ansible('microsoftwindows', 'win_credential', demisto.args())) elif demisto.command() == 'win-defrag': return_results(generic_ansible('microsoftwindows', 'win_defrag', demisto.args())) elif demisto.command() == 'win-disk-facts': return_results(generic_ansible('microsoftwindows', 'win_disk_facts', demisto.args())) elif demisto.command() == 'win-disk-image': return_results(generic_ansible('microsoftwindows', 'win_disk_image', demisto.args())) elif demisto.command() == 'win-dns-client': return_results(generic_ansible('microsoftwindows', 'win_dns_client', demisto.args())) elif demisto.command() == 'win-dns-record': return_results(generic_ansible('microsoftwindows', 'win_dns_record', demisto.args())) elif demisto.command() == 'win-domain': return_results(generic_ansible('microsoftwindows', 'win_domain', demisto.args())) elif demisto.command() == 'win-domain-computer': return_results(generic_ansible('microsoftwindows', 'win_domain_computer', demisto.args())) elif demisto.command() == 'win-domain-controller': return_results(generic_ansible('microsoftwindows', 'win_domain_controller', demisto.args())) elif demisto.command() == 'win-domain-group': return_results(generic_ansible('microsoftwindows', 'win_domain_group', demisto.args())) elif demisto.command() == 'win-domain-group-membership': return_results(generic_ansible('microsoftwindows', 'win_domain_group_membership', demisto.args())) elif demisto.command() == 'win-domain-membership': return_results(generic_ansible('microsoftwindows', 'win_domain_membership', demisto.args())) elif demisto.command() == 'win-domain-user': return_results(generic_ansible('microsoftwindows', 'win_domain_user', demisto.args())) elif demisto.command() == 'win-dotnet-ngen': return_results(generic_ansible('microsoftwindows', 'win_dotnet_ngen', demisto.args())) elif demisto.command() == 'win-dsc': return_results(generic_ansible('microsoftwindows', 'win_dsc', demisto.args())) elif demisto.command() == 'win-environment': return_results(generic_ansible('microsoftwindows', 'win_environment', demisto.args())) elif demisto.command() == 'win-eventlog': return_results(generic_ansible('microsoftwindows', 'win_eventlog', demisto.args())) elif demisto.command() == 'win-eventlog-entry': return_results(generic_ansible('microsoftwindows', 'win_eventlog_entry', demisto.args())) elif demisto.command() == 'win-feature': return_results(generic_ansible('microsoftwindows', 'win_feature', demisto.args())) elif demisto.command() == 'win-file': return_results(generic_ansible('microsoftwindows', 'win_file', demisto.args())) elif demisto.command() == 'win-file-version': return_results(generic_ansible('microsoftwindows', 'win_file_version', demisto.args())) elif demisto.command() == 'win-find': return_results(generic_ansible('microsoftwindows', 'win_find', demisto.args())) elif demisto.command() == 'win-firewall': return_results(generic_ansible('microsoftwindows', 'win_firewall', demisto.args())) elif demisto.command() == 'win-firewall-rule': return_results(generic_ansible('microsoftwindows', 'win_firewall_rule', demisto.args())) elif demisto.command() == 'win-format': return_results(generic_ansible('microsoftwindows', 'win_format', demisto.args())) elif demisto.command() == 'win-get-url': return_results(generic_ansible('microsoftwindows', 'win_get_url', demisto.args())) elif demisto.command() == 'win-group': return_results(generic_ansible('microsoftwindows', 'win_group', demisto.args())) elif demisto.command() == 'win-group-membership': return_results(generic_ansible('microsoftwindows', 'win_group_membership', demisto.args())) elif demisto.command() == 'win-hostname': return_results(generic_ansible('microsoftwindows', 'win_hostname', demisto.args())) elif demisto.command() == 'win-hosts': return_results(generic_ansible('microsoftwindows', 'win_hosts', demisto.args())) elif demisto.command() == 'win-hotfix': return_results(generic_ansible('microsoftwindows', 'win_hotfix', demisto.args())) elif demisto.command() == 'win-http-proxy': return_results(generic_ansible('microsoftwindows', 'win_http_proxy', demisto.args())) elif demisto.command() == 'win-iis-virtualdirectory': return_results(generic_ansible('microsoftwindows', 'win_iis_virtualdirectory', demisto.args())) elif demisto.command() == 'win-iis-webapplication': return_results(generic_ansible('microsoftwindows', 'win_iis_webapplication', demisto.args())) elif demisto.command() == 'win-iis-webapppool': return_results(generic_ansible('microsoftwindows', 'win_iis_webapppool', demisto.args())) elif demisto.command() == 'win-iis-webbinding': return_results(generic_ansible('microsoftwindows', 'win_iis_webbinding', demisto.args())) elif demisto.command() == 'win-iis-website': return_results(generic_ansible('microsoftwindows', 'win_iis_website', demisto.args())) elif demisto.command() == 'win-inet-proxy': return_results(generic_ansible('microsoftwindows', 'win_inet_proxy', demisto.args())) elif demisto.command() == 'win-lineinfile': return_results(generic_ansible('microsoftwindows', 'win_lineinfile', demisto.args())) elif demisto.command() == 'win-mapped-drive': return_results(generic_ansible('microsoftwindows', 'win_mapped_drive', demisto.args())) elif demisto.command() == 'win-msg': return_results(generic_ansible('microsoftwindows', 'win_msg', demisto.args())) elif demisto.command() == 'win-netbios': return_results(generic_ansible('microsoftwindows', 'win_netbios', demisto.args())) elif demisto.command() == 'win-nssm': return_results(generic_ansible('microsoftwindows', 'win_nssm', demisto.args())) elif demisto.command() == 'win-optional-feature': return_results(generic_ansible('microsoftwindows', 'win_optional_feature', demisto.args())) elif demisto.command() == 'win-owner': return_results(generic_ansible('microsoftwindows', 'win_owner', demisto.args())) elif demisto.command() == 'win-package': return_results(generic_ansible('microsoftwindows', 'win_package', demisto.args())) elif demisto.command() == 'win-pagefile': return_results(generic_ansible('microsoftwindows', 'win_pagefile', demisto.args())) elif demisto.command() == 'win-partition': return_results(generic_ansible('microsoftwindows', 'win_partition', demisto.args())) elif demisto.command() == 'win-path': return_results(generic_ansible('microsoftwindows', 'win_path', demisto.args())) elif demisto.command() == 'win-pester': return_results(generic_ansible('microsoftwindows', 'win_pester', demisto.args())) elif demisto.command() == 'win-ping': return_results(generic_ansible('microsoftwindows', 'win_ping', demisto.args())) elif demisto.command() == 'win-power-plan': return_results(generic_ansible('microsoftwindows', 'win_power_plan', demisto.args())) elif demisto.command() == 'win-product-facts': return_results(generic_ansible('microsoftwindows', 'win_product_facts', demisto.args())) elif demisto.command() == 'win-psexec': return_results(generic_ansible('microsoftwindows', 'win_psexec', demisto.args())) elif demisto.command() == 'win-psmodule': return_results(generic_ansible('microsoftwindows', 'win_psmodule', demisto.args())) elif demisto.command() == 'win-psrepository': return_results(generic_ansible('microsoftwindows', 'win_psrepository', demisto.args())) elif demisto.command() == 'win-rabbitmq-plugin': return_results(generic_ansible('microsoftwindows', 'win_rabbitmq_plugin', demisto.args())) elif demisto.command() == 'win-rds-cap': return_results(generic_ansible('microsoftwindows', 'win_rds_cap', demisto.args())) elif demisto.command() == 'win-rds-rap': return_results(generic_ansible('microsoftwindows', 'win_rds_rap', demisto.args())) elif demisto.command() == 'win-rds-settings': return_results(generic_ansible('microsoftwindows', 'win_rds_settings', demisto.args())) elif demisto.command() == 'win-reboot': return_results(generic_ansible('microsoftwindows', 'win_reboot', demisto.args())) elif demisto.command() == 'win-reg-stat': return_results(generic_ansible('microsoftwindows', 'win_reg_stat', demisto.args())) elif demisto.command() == 'win-regedit': return_results(generic_ansible('microsoftwindows', 'win_regedit', demisto.args())) elif demisto.command() == 'win-region': return_results(generic_ansible('microsoftwindows', 'win_region', demisto.args())) elif demisto.command() == 'win-regmerge': return_results(generic_ansible('microsoftwindows', 'win_regmerge', demisto.args())) elif demisto.command() == 'win-robocopy': return_results(generic_ansible('microsoftwindows', 'win_robocopy', demisto.args())) elif demisto.command() == 'win-route': return_results(generic_ansible('microsoftwindows', 'win_route', demisto.args())) elif demisto.command() == 'win-say': return_results(generic_ansible('microsoftwindows', 'win_say', demisto.args())) elif demisto.command() == 'win-scheduled-task': return_results(generic_ansible('microsoftwindows', 'win_scheduled_task', demisto.args())) elif demisto.command() == 'win-scheduled-task-stat': return_results(generic_ansible('microsoftwindows', 'win_scheduled_task_stat', demisto.args())) elif demisto.command() == 'win-security-policy': return_results(generic_ansible('microsoftwindows', 'win_security_policy', demisto.args())) elif demisto.command() == 'win-service': return_results(generic_ansible('microsoftwindows', 'win_service', demisto.args())) elif demisto.command() == 'win-share': return_results(generic_ansible('microsoftwindows', 'win_share', demisto.args())) elif demisto.command() == 'win-shortcut': return_results(generic_ansible('microsoftwindows', 'win_shortcut', demisto.args())) elif demisto.command() == 'win-snmp': return_results(generic_ansible('microsoftwindows', 'win_snmp', demisto.args())) elif demisto.command() == 'win-stat': return_results(generic_ansible('microsoftwindows', 'win_stat', demisto.args())) elif demisto.command() == 'win-tempfile': return_results(generic_ansible('microsoftwindows', 'win_tempfile', demisto.args())) elif demisto.command() == 'win-template': return_results(generic_ansible('microsoftwindows', 'win_template', demisto.args())) elif demisto.command() == 'win-timezone': return_results(generic_ansible('microsoftwindows', 'win_timezone', demisto.args())) elif demisto.command() == 'win-toast': return_results(generic_ansible('microsoftwindows', 'win_toast', demisto.args())) elif demisto.command() == 'win-unzip': return_results(generic_ansible('microsoftwindows', 'win_unzip', demisto.args())) elif demisto.command() == 'win-updates': return_results(generic_ansible('microsoftwindows', 'win_updates', demisto.args())) elif demisto.command() == 'win-uri': return_results(generic_ansible('microsoftwindows', 'win_uri', demisto.args())) elif demisto.command() == 'win-user': return_results(generic_ansible('microsoftwindows', 'win_user', demisto.args())) elif demisto.command() == 'win-user-profile': return_results(generic_ansible('microsoftwindows', 'win_user_profile', demisto.args())) elif demisto.command() == 'win-user-right': return_results(generic_ansible('microsoftwindows', 'win_user_right', demisto.args())) elif demisto.command() == 'win-wait-for': return_results(generic_ansible('microsoftwindows', 'win_wait_for', demisto.args())) elif demisto.command() == 'win-wait-for-process': return_results(generic_ansible('microsoftwindows', 'win_wait_for_process', demisto.args())) elif demisto.command() == 'win-wakeonlan': return_results(generic_ansible('microsoftwindows', 'win_wakeonlan', demisto.args())) elif demisto.command() == 'win-webpicmd': return_results(generic_ansible('microsoftwindows', 'win_webpicmd', demisto.args())) elif demisto.command() == 'win-whoami': return_results(generic_ansible('microsoftwindows', 'win_whoami', demisto.args())) elif demisto.command() == 'win-xml': return_results(generic_ansible('microsoftwindows', 'win_xml', demisto.args())) # Log exceptions and return errors except Exception as e: demisto.error(traceback.format_exc()) # print the traceback return_error(f'Failed to execute {demisto.command()} command.\nError:\n{str(e)}') # ENTRY POINT if __name__ in ('__main__', '__builtin__', 'builtins'): main()