Run PowerShell script on MID server via ECC queue - Assistance required
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-05-2023 06:47 AM
Hi,
I am trying to run a PS script on one of our MID servers via the ECC queue however the script isn't being run. I know the script works as it's currently being run on that Server via another integration. For the moment the script should create a log file in a designated folder. The log file should contain the parameters that have been passed to the script via ServiceNow.
As I'm currently only testing the script has been written as a fix script but the intention is to put this in a workflow node.
The Fix Script:
var requestNumber = 'RITM0123456';
var userDomain = 'emea';
var userName = 'sw123456';
var groupDomain = 'emea';
var groupName = 'JPTK_CADDATA_PSD_AEC FPC';
var ecc = new GlideRecord('ecc_queue');
ecc.initialize();
ecc.agent = 'mid.server.euw1-ldpm-ad-dev';
ecc.topic = 'Command';
var value = "ServiceNow\PowerShell Scripts\logParameters.ps1 " +"-RequestNumber " +requestNumber+ " -UserDomain " +userDomain+ " -UserName " +userName+ " -GroupDomain" + " "+groupDomain+ " -GroupName " +groupName;
ecc.payload = '<?xml version="1.0" encoding="UTF-8"?><parameters><parameter RequestNumber="'+requestNumber+'" UserDomain="'+userDomain+'" UserName="'+userName+'" GroupDomain ="'+groupDomain+'" GroupName="'+groupName+'" value="'+value+'"/><parameter name="skip_sensor" value="true"/></parameters>';
ecc.queue = 'output';
ecc.state = 'ready';
ecc.insert();
ECC Queue Output:
<?xml version="1.0" encoding="UTF-8"?><parameters><parameter RequestNumber="RITM0123456" UserDomain="emea" UserName="sw123456" GroupDomain ="emea" GroupName="JPTK_CADDATA_PSD_AEC FPC" value="ServiceNowPowerShell ScriptslogParameters.ps1 -RequestNumber RITM0123456 -UserDomain emea -UserName sw123456 -GroupDomain emea -GroupName JPTK_CADDATA_PSD_AEC FPC"/><parameter name="skip_sensor" value="true"/></parameters>
ECC Queue Input:
<?xml version="1.0" encoding="UTF-8"?><results probe_time="0"><result command=""><stdout/><stderr/></result><parameters><parameter name="" value="ServiceNowPowerShell ScriptslogParameters.ps1 -RequestNumber RITM0123456 -UserDomain emea -UserName sw123456 -GroupDomain emea -GroupName JPTK_CADDATA_PSD_AEC FPC"/><parameter name="agent" value="mid.server.euw1-ldpm-ad-dev"/><parameter name="signature" value=""/><parameter name="response_to" value=""/><parameter name="from_sys_id" value=""/><parameter name="source" value=""/><parameter name="priority" value="2"/><parameter name="agent_correlator" value=""/><parameter name="skip_sensor" value="true"/><parameter name="processed" value=""/><parameter name="error_string" value=""/><parameter name="sys_id" value="a4dfbe088758691819bcec6e8bbb3591"/><parameter name="sequence" value="18581def1ea0000001"/><parameter name="from_host" value=""/><parameter name="sys_created_on" value="2023-01-05 12:19:09"/><parameter name="sys_domain" value="global"/><parameter name="name" value=""/><parameter name="topic" value="Command"/><parameter name="state" value="ready"/><parameter name="queue" value="output"/><parameter name="ecc_queue" value="a4dfbe088758691819bcec6e8bbb3591"/></parameters></results>
The input state is set to error when processed.
Can anyone assist with why the script isn't being run via the MID server when the output gets processed?
Regards,
Steven
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-19-2024 01:37 PM
Steven - I know that this is old. Did you ever get an answer on this? I'm working on something similar and your approach looks a little bit off. This video shows a different approach:
https://www.youtube.com/watch?v=6yW-3eXMT7o&list=LL&index=5&t=719s
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-22-2024 01:26 AM
Hi @treycarroll
I never got a response but after looking into PS a bit more I managed to work out the problem and resolve it by only sending the parameter values to the PS script.
Workflow:
/*
Variables to be passed to PS script
*/
var ritm = current.number;
var name = current.variables.requested_for.u_sam_account_name;
var danaherGroupName = current.variables.danaher_group_name;
/*
Build the command for the ECC payload
*/
var powerShellScript = "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe D:\\ServiceNow\\PS_SCRIPTS\\DanaherSharedFolderV2.ps1 " + name + " " + ritm + " " + "'" + danaherGroupName + "'";
Script Include:
createEccRecord: function(powerShellScript, source, company) {
var ecc = new GlideRecord("ecc_queue");
ecc.initialize();
switch (company) {
case 'Danaher':
ecc.agent = this._getMidSeverDanaher();
break;
case 'Pall':
ecc.agent = this._getMidServerPall();
break;
default:
ecc.agent = this._getMidSeverDanaher();
}
ecc.topic = "Command";
ecc.source = source;
ecc.payload = '<?xml version="1.0" encoding="UTF-8"?><parameters> <parameter name="name" value = "' + powerShellScript + '" /><parameter name = "skip_sensor" value = "true"/> </parameters>';
ecc.queue = "output";
ecc.state = "ready";
ecc.insert();
},
PowerShell script:
#Variables
$UserName = $args[0]
$RequestNumber = $args[1]
$GroupName = $args[2]
I've not had a chance to watch the video link yet but will take a look as we have more work coming up that might benefit from this approach. Thanks for reaching out.
Steven