#!/usr/bin/perl use strict; use warnings; use 5.014; use MIME::Base64; use Data::Dumper; use XML::Twig; use REST::Client; # Just in case we want to request JSON instead of XML from CMDB #use JSON; Just in case we want to request JSON instead of XML from CMDB # Set the request parameters my $host = 'https://staplessb.service-now.com'; # Eg. User name="admin", Password="admin" for this code sample. my $user = 'USERNAME'; my $pwd = 'PASSWORD'; my $client = REST::Client->new(host => $host); my $encoded_auth = encode_base64("$user:$pwd", ''); my $header = 'checked_in,change_request,po_number,correlation_id,cfg_auto_provider,supported_by,u_service_catalogtrue,first_discovered,u_oem_part_numbe,sent_for_repair,owned_by,gl_account,managed_by,asset,u_project_id,maintenance_schedule,u_chgfalse,category,delivery_date,install_status,u_maintenance_window,virtualfalse,u_sub_class,dns_domain,u_incident,u_parts_software_needed,change_control,checked_out,u_decommission_stamp,purchase_date,order_date,u_template,skip_sync,lease_id,u_sevice_options,vendor,sys_id,u_maint_contract_sla,sys_created_by,u_sla_support_tie,subcategory,start_date,comments,location,link,value,unverified,justification,u_disposal_date,sys_tags,sys_domain,link,value,sys_mod_count,cost_cc,u_total_purchase_cost,monitor,sys_updated_on,warranty_expiration,invoice_number,fqdn,cost,u_retail_grp,u_server_type,ip_address,u_manufacture_date_dummy,last_discovered,model_id,link,value,manufacturer,u_incfalse,company,due,cfg_auto_management_server,u_proposed,u_change,u_work_notes,u_store_location,asset_tag,discovery_source,u_application_id,assignment_group,can_print,u_problem,department,u_manufacture_date,support_group,link,value,u_exclusion,sys_created_on,u_display_name,u_alias,cost_center,short_description,sys_updated_by,name,u_environment,u_function,due_in,u_change_approver,install_date,assigned,u_active_stamp,u_retail_group,serial_number,u_work_notes__asset_,repair_contract_id,assigned_to,mac_address,model_number,schedule,u_ci_id,returned_from_repair,ng_assignment_flag,u_procurement_product_number,sys_class_name,attributes,u_location_stamp,fault_count,cfg_auto_change'; $client->GET("/api/now/table/cmdb_ci?sysparm_limit=5&sysparm_fields=($header)", {'Authorization' => "Basic $encoded_auth", 'Accept' => 'application/xml'}); my $field= $ARGV[0] || 'u_ci_id'; my $input_xml = $client->responseContent(); my $twig = new XML::Twig; $twig->xparse($input_xml); my $root = $twig->root(); my @data = (); my @cols = split ',',$header; unshift @cols, $field; # added for sort for my $record ($root->children) { my @tmp=(); for my $col (@cols){ push @tmp,$record->first_child($col)->text; } push @data,[ @tmp ]; } my @sorted = sort { $b->[0] cmp $a->[0] } @data; print $header."\n"; for (@sorted){ print join ',',@$_[1..$#cols]; # exclude sort col print "\n"; } __DATA__ true false false false ';