diff --git a/agents/meshcmd.js b/agents/meshcmd.js
index 3d74d8af..244ed9f7 100644
--- a/agents/meshcmd.js
+++ b/agents/meshcmd.js
@@ -35,6 +35,9 @@ var membershipIPv6 = 'FF02:0:0:0:0:0:0:FE';
var settings = null;
var meshCmdVersion = '***Mesh*Cmd*Version***'; // Dynamically replaced with MeshCentral version
var amtLms = null, amtMei = null, amtMeiState = null;
+var wsstack = null, amtstack = null;
+var oswsstack = null, osamtstack = null;
+
// MeshCommander for Firmware (GZIP'ed, Base64)
var Small_IntelAmtWebApp = "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";
@@ -233,7 +236,8 @@ function startMeScriptEx() {
var amt = require('amt');
wsstack = new wsman(transport, settings.hostname, settings.tls ? 16993 : 16992, settings.username, settings.password, settings.tls);
amtstack = new amt(wsstack);
- amtstack.onProcessChanged = onWsmanProcessChanged;
+ //IntelAmtEntireStateProgress = 101;
+ //amtstack.onProcessChanged = onWsmanProcessChanged;
var scriptData = null;
try { scriptData = fs.readFileSync(settings.script); } catch (e) { console.log('Unable to read script file (1): ' + settings.script + '.'); exit(1); return; }
@@ -246,6 +250,7 @@ function startMeScriptEx() {
var script = scriptModule.setup(scriptData, {})
script.amtstack = amtstack;
script.start();
+ script.onCompleted = function () { exit(1); }
}
//
@@ -373,7 +378,24 @@ function startLms(func) {
//console.log('LME Connecting...');
amtLms.on('connect', function () {
amtLms.connected = true;
- //console.log("LME Connected.");
+ amtMei.getLocalSystemAccount(function (x) {
+ var transport = require('amt-wsman-duk');
+ var wsman = require('amt-wsman');
+ var amt = require('amt');
+ //oswsstack = new wsman(transport, '127.0.0.1', 16992, x.user, x.pass, false);
+ oswsstack = new wsman(transport, '127.0.0.1', 16992, 'admin', 'P@ssw0rd', false);
+ osamtstack = new amt(oswsstack);
+ //osamtstack.BatchEnum(null, ['CIM_SoftwareIdentity'], startLmsWsmanResponse, null, true);
+ //AllWsmanRequests = "AMT_8021xCredentialContext,AMT_8021XProfile,AMT_ActiveFilterStatistics,AMT_AgentPresenceCapabilities,AMT_AgentPresenceInterfacePolicy,AMT_AgentPresenceService,AMT_AgentPresenceWatchdog,AMT_AgentPresenceWatchdogAction,AMT_AlarmClockService,IPS_AlarmClockOccurrence,AMT_AssetTable,AMT_AssetTableService,AMT_AuditLog,AMT_AuditPolicyRule,AMT_AuthorizationService,AMT_BootCapabilities,AMT_BootSettingData,AMT_ComplexFilterEntryBase,AMT_CRL,AMT_CryptographicCapabilities,AMT_EACCredentialContext,AMT_EndpointAccessControlService,AMT_EnvironmentDetectionInterfacePolicy,AMT_EnvironmentDetectionSettingData,AMT_EthernetPortSettings,AMT_EventLogEntry,AMT_EventManagerService,AMT_EventSubscriber,AMT_FilterEntryBase,AMT_FilterInSystemDefensePolicy,AMT_GeneralSettings,AMT_GeneralSystemDefenseCapabilities,AMT_Hdr8021Filter,AMT_HeuristicPacketFilterInterfacePolicy,AMT_HeuristicPacketFilterSettings,AMT_HeuristicPacketFilterStatistics,AMT_InterfacePolicy,AMT_IPHeadersFilter,AMT_KerberosSettingData,AMT_ManagementPresenceRemoteSAP,AMT_MessageLog,AMT_MPSUsernamePassword,AMT_NetworkFilter,AMT_NetworkPortDefaultSystemDefensePolicy,AMT_NetworkPortSystemDefenseCapabilities,AMT_NetworkPortSystemDefensePolicy,AMT_PCIDevice,AMT_PETCapabilities,AMT_PETFilterForTarget,AMT_PETFilterSetting,AMT_ProvisioningCertificateHash,AMT_PublicKeyCertificate,AMT_PublicKeyManagementCapabilities,AMT_PublicKeyManagementService,AMT_PublicPrivateKeyPair,AMT_RedirectionService,AMT_RemoteAccessCapabilities,AMT_RemoteAccessCredentialContext,AMT_RemoteAccessPolicyAppliesToMPS,AMT_RemoteAccessPolicyRule,AMT_RemoteAccessService,AMT_SetupAndConfigurationService,AMT_SNMPEventSubscriber,AMT_StateTransitionCondition,AMT_SystemDefensePolicy,AMT_SystemDefensePolicyInService,AMT_SystemDefenseService,AMT_SystemPowerScheme,AMT_ThirdPartyDataStorageAdministrationService,AMT_ThirdPartyDataStorageService,AMT_TimeSynchronizationService,AMT_TLSCredentialContext,AMT_TLSProtocolEndpoint,AMT_TLSProtocolEndpointCollection,AMT_TLSSettingData,AMT_TrapTargetForService,AMT_UserInitiatedConnectionService,AMT_WebUIService,AMT_WiFiPortConfigurationService,CIM_AbstractIndicationSubscription,CIM_Account,CIM_AccountManagementCapabilities,CIM_AccountManagementService,CIM_AccountOnSystem,CIM_AdminDomain,CIM_AlertIndication,CIM_AssignedIdentity,CIM_AssociatedPowerManagementService,CIM_AuthenticationService,CIM_AuthorizationService,CIM_BIOSElement,CIM_BIOSFeature,CIM_BIOSFeatureBIOSElements,CIM_BootConfigSetting,CIM_BootService,CIM_BootSettingData,CIM_BootSourceSetting,CIM_Capabilities,CIM_Card,CIM_Chassis,CIM_Chip,CIM_Collection,CIM_Component,CIM_ComputerSystem,CIM_ComputerSystemPackage,CIM_ConcreteComponent,CIM_ConcreteDependency,CIM_Controller,CIM_CoolingDevice,CIM_Credential,CIM_CredentialContext,CIM_CredentialManagementService,CIM_Dependency,CIM_DeviceSAPImplementation,CIM_ElementCapabilities,CIM_ElementConformsToProfile,CIM_ElementLocation,CIM_ElementSettingData,CIM_ElementSoftwareIdentity,CIM_ElementStatisticalData,CIM_EnabledLogicalElement,CIM_EnabledLogicalElementCapabilities,CIM_EthernetPort,CIM_Fan,CIM_FilterCollection,CIM_FilterCollectionSubscription,CIM_HostedAccessPoint,CIM_HostedDependency,CIM_HostedService,CIM_Identity,CIM_IEEE8021xCapabilities,CIM_IEEE8021xSettings,CIM_Indication,CIM_IndicationService,CIM_InstalledSoftwareIdentity,CIM_KVMRedirectionSAP,CIM_LANEndpoint,CIM_ListenerDestination,CIM_ListenerDestinationWSManagement,CIM_Location,CIM_Log,CIM_LogEntry,CIM_LogicalDevice,CIM_LogicalElement,CIM_LogicalPort,CIM_LogicalPortCapabilities,CIM_LogManagesRecord,CIM_ManagedCredential,CIM_ManagedElement,CIM_ManagedSystemElement,CIM_MediaAccessDevice,CIM_MemberOfCollection,CIM_Memory,CIM_MessageLog,CIM_NetworkPort,CIM_NetworkPortCapabilities,CIM_NetworkPortConfigurationService,CIM_OrderedComponent,CIM_OwningCollectionElement,CIM_OwningJobElement,CIM_PCIController,CIM_PhysicalComponent,CIM_PhysicalElement,CIM_PhysicalElementLocation,CIM_PhysicalFrame,CIM_PhysicalMemory,CIM_PhysicalPackage,CIM_Policy,CIM_PolicyAction,CIM_PolicyCondition,CIM_PolicyInSystem,CIM_PolicyRule,CIM_PolicyRuleInSystem,CIM_PolicySet,CIM_PolicySetAppliesToElement,CIM_PolicySetInSystem,CIM_PowerManagementCapabilities,CIM_PowerManagementService,CIM_PowerSupply,CIM_Privilege,CIM_PrivilegeManagementCapabilities,CIM_PrivilegeManagementService,CIM_ProcessIndication,CIM_Processor,CIM_ProtocolEndpoint,CIM_ProvidesServiceToElement,CIM_Realizes,CIM_RecordForLog,CIM_RecordLog,CIM_RedirectionService,CIM_ReferencedProfile,CIM_RegisteredProfile,CIM_RemoteAccessAvailableToElement,CIM_RemoteIdentity,CIM_RemotePort,CIM_RemoteServiceAccessPoint,CIM_Role,CIM_RoleBasedAuthorizationService,CIM_RoleBasedManagementCapabilities,CIM_RoleLimitedToTarget,CIM_SAPAvailableForElement,CIM_SecurityService,CIM_Sensor,CIM_Service,CIM_ServiceAccessBySAP,CIM_ServiceAccessPoint,CIM_ServiceAffectsElement,CIM_ServiceAvailableToElement,CIM_ServiceSAPDependency,CIM_ServiceServiceDependency,CIM_SettingData,CIM_SharedCredential,CIM_SoftwareElement,CIM_SoftwareFeature,CIM_SoftwareFeatureSoftwareElements,CIM_SoftwareIdentity,CIM_StatisticalData,CIM_StorageExtent,CIM_System,CIM_SystemBIOS,CIM_SystemComponent,CIM_SystemDevice,CIM_SystemPackaging,CIM_UseOfLog,CIM_Watchdog,CIM_WiFiEndpoint,CIM_WiFiEndpointCapabilities,CIM_WiFiEndpointSettings,CIM_WiFiPort,CIM_WiFiPortCapabilities,IPS_AdminProvisioningRecord,IPS_ClientProvisioningRecord,IPS_HostBasedSetupService,IPS_HostIPSettings,IPS_IderSessionUsingPort,IPS_IPv6PortSettings,IPS_KVMRedirectionSettingData,IPS_KvmSessionUsingPort,IPS_ManualProvisioningRecord,IPS_OptInService,IPS_ProvisioningAuditRecord,IPS_ProvisioningRecordLog,IPS_RasSessionUsingPort,IPS_ScreenSettingData,IPS_SecIOService,IPS_SessionUsingPort,IPS_SolSessionUsingPort,IPS_TLSProvisioningRecord".split(',');
+ //var AllWsman = "IPS_SecIOService,IPS_ScreenSettingData,IPS_ProvisioningRecordLog,IPS_HostBasedSetupService,IPS_HostIPSettings,IPS_IPv6PortSettings".split(',');
+ //var xx = AllWsman[4];
+ //console.log(xx);
+ //osamtstack.Get(AllWsmanRequests.shift(), startLmsWsmanResponse, null, true);
+ osamtstack.Get('IPS_SecIOService', startLmsWsmanResponse, null, true);
+ //osamtstack.BatchEnum(null, ['IPS_KVMRedirectionSettingData', 'CIM_SoftwareIdentity'], startLmsWsmanResponse, null, true);
+ //osamtstack.BatchEnum(null, AllWsman, startLmsWsmanResponse, null, true);
+ });
+ console.log("LME Connected.");
if (settings.noconsole !== true) {
amtLms.meshCommander = http.createServer();
amtLms.meshCommander.listen(16994);
@@ -432,6 +454,14 @@ function startLms(func) {
});
}
+function startLmsWsmanResponse(stack, name, responses, status) {
+ if (status == 600) { console.log('ERROR: Unable to connect to Intel(R) AMT.'); }
+ else if (status != 200) { console.log('ERROR: Unable to get object from Intel(R) AMT, status = ' + status + '.'); }
+ else { console.log(JSON.stringify(responses.Body), status); }
+ //amtstack.Get(AllWsmanRequests.shift(), startLmsWsmanResponse, null, true);
+}
+
+
// Process commands in the LMS control channel
// Command 9 is add a notification.
function processLmsControlData(data) {
diff --git a/agents/meshcore.js b/agents/meshcore.js
index 6345354f..95bd8d82 100644
--- a/agents/meshcore.js
+++ b/agents/meshcore.js
@@ -548,7 +548,8 @@ function createMeshCore(agent) {
this.prependListener('end', function () { this.httprequest.process.kill(); });
this.removeAllListeners('data');
this.on('data', onTunnelControlData);
- //this.write('MeshCore Terminal Hello!1');
+ //this.write('MeshCore Terminal Hello');
+ if (process.platform != 'win32') { this.httprequest.process.stdin.write("stty erase ^H\nalias ls='ls --color=auto'\nclear\n"); }
}
if (this.httprequest.protocol == 2) {
// Remote desktop using native pipes
diff --git a/agents/modules_meshcmd/amt-lme.js b/agents/modules_meshcmd/amt-lme.js
index cecfffc9..f7a8f468 100644
--- a/agents/modules_meshcmd/amt-lme.js
+++ b/agents/modules_meshcmd/amt-lme.js
@@ -316,6 +316,18 @@ function lme_heci(options) {
console.log('Unknown Recipient ID/' + rChannelId + ' for APF_CHANNEL_DATA');
}
break;
+ case APF_CHANNEL_OPEN_FAILURE:
+ var rChannelId = chunk.readUInt32BE(1);
+ var reasonCode = chunk.readUInt32BE(5);
+ if ((this.sockets != null) && (this.sockets[rChannelId] != undefined)) {
+ this.sockets[rChannelId].end();
+ delete this.sockets[rChannelId];
+ } else if ((this.insockets != null) && (this.insockets[rChannelId] != undefined)) {
+ delete this.insockets[rChannelId];
+ } else {
+ console.log('Unknown Recipient ID/' + rChannelId + ' for APF_CHANNEL_OPEN_FAILURE');
+ }
+ break;
case APF_CHANNEL_CLOSE:
var rChannelId = chunk.readUInt32BE(1);
if ((this.sockets != null) && (this.sockets[rChannelId] != undefined)) {
diff --git a/agents/modules_meshcmd/amt-mei.js b/agents/modules_meshcmd/amt-mei.js
index 970e0271..18ca1ea6 100644
--- a/agents/modules_meshcmd/amt-mei.js
+++ b/agents/modules_meshcmd/amt-mei.js
@@ -46,6 +46,7 @@ function amt_heci() {
});
});
this._amt.connect(heci.GUIDS.AMT, { noPipeline: 1 });
+ function trim(x) { var y = x.indexOf('\0'); if (y >= 0) { return x.substring(0, y); } else { return x; } }
this.getCommand = function (chunk) {
var command = chunk.length == 0 ? (this._amt.rq.peekQueue().cmd | 0x800000) : chunk.readUInt32LE(4);
@@ -216,6 +217,7 @@ function amt_heci() {
this.getCertHashEntry(handles.shift(), this._getHashEntrySink, fn, opt, entries, handles);
}, callback, optional);
};
+
this._getHashEntrySink = function (result, fn, opt, entries, handles) {
entries.push(result);
if (handles.length > 0) {
@@ -229,7 +231,7 @@ function amt_heci() {
var optional = [];
for (var i = 1; i < arguments.length; ++i) { optional.push(arguments[i]); }
this.sendCommand(103, Buffer.alloc(40), function (header, fn, opt) {
- if (header.Data.length == 68) { opt.unshift({ user: header.Data.slice(0, 34).toString(), pass: header.Data.slice(34, 67).toString(), raw: header.Data }); } else { opt.unshift(null); }
+ if (header.Data.length == 68) { opt.unshift({ user: trim(header.Data.slice(0, 34).toString()), pass: trim(header.Data.slice(34, 67).toString()), raw: header.Data }); } else { opt.unshift(null); }
fn.apply(this, opt);
}, callback, optional);
}
diff --git a/agents/modules_meshcmd/amt-script.js b/agents/modules_meshcmd/amt-script.js
index 9837edae..3fd6c842 100644
--- a/agents/modules_meshcmd/amt-script.js
+++ b/agents/modules_meshcmd/amt-script.js
@@ -36,10 +36,10 @@ function ReadShortX(v, p) { return (v[p + 1] << 8) + v[p]; }
function ReadInt(v, p) { return (v[p] * 0x1000000) + (v[p + 1] << 16) + (v[p + 2] << 8) + v[p + 3]; } // We use "*0x1000000" instead of "<<24" because the shift converts the number to signed int32.
function ReadSInt(v, p) { return (v[p] << 24) + (v[p + 1] << 16) + (v[p + 2] << 8) + v[p + 3]; }
function ReadIntX(v, p) { return (v[p + 3] * 0x1000000) + (v[p + 2] << 16) + (v[p + 1] << 8) + v[p]; }
-function ShortToStr(v) { return ''; } // TODO
-function ShortToStrX(v) { return ''; } // TODO
-function IntToStr(v) { return ''; } // TODO
-function IntToStrX(v) { return ''; } // TODO
+function ShortToStr(v) { var b = Buffer.alloc(2); b.writeInt16BE(v); return b; }
+function ShortToStrX(v) { var b = Buffer.alloc(2); b.writeInt16LE(v); return b; }
+function IntToStr(v) { var b = Buffer.alloc(4); b.writeInt32BE(v); return b; }
+function IntToStrX(v) { var b = Buffer.alloc(4); b.writeInt32LE(v); return b; }
function btoa(x) { return Buffer.from(x).toString('base64'); }
function atob(x) { var z = null; try { z = Buffer.from(x, 'base64').toString(); } catch (e) { console.log(e); } return z; }
function passwordcheck(p) { if (p.length < 8) return false; var upper = 0, lower = 0, number = 0, nonalpha = 0; for (var i in p) { var c = p.charCodeAt(i); if ((c > 64) && (c < 91)) { upper = 1; } else if ((c > 96) && (c < 123)) { lower = 1; } else if ((c > 47) && (c < 58)) { number = 1; } else { nonalpha = 1; } } return ((upper + lower + number + nonalpha) == 4); }
@@ -47,20 +47,32 @@ function hex2rstr(x) { Buffer.from(x, 'hex').toString(); }
function rstr2hex(x) { Buffer.from(x).toString('hex'); }
function random() { return 0; } // TODO
function rstr_md5(x) { return null; } // TODO
+function getItem(x, y, z) { for (var i in x) { if (x[i][y] == z) return x[i]; } return null; }
+
+var httpErrorTable = {
+ 200: 'OK',
+ 401: 'Authentication Error',
+ 408: 'Timeout Error',
+ 601: 'WSMAN Parsing Error',
+ 602: 'Unable to parse HTTP response header',
+ 603: 'Unexpected HTTP enum response',
+ 604: 'Unexpected HTTP pull response',
+ 998: 'Invalid TLS certificate'
+}
// Setup the script state
module.exports.setup = function(binary, startvars) {
- var obj = { startvars: startvars };
+ var obj = { startvars: startvars, onCompleted: null };
+ obj.wsRetryCall = null;
+ obj.wsRetryArgs = null;
+ obj.wsRetryTimes = null;
if (binary.length < 6) { console.error('Invalid script length'); return null; } // Script must have at least 6 byte header
if (ReadInt(binary, 0) != 0x247D2945) { console.error('Invalid binary script'); return null; } // Check the script magic header
if (ReadShort(binary, 4) > 1) { console.error('Unsupported script version'); return null; } // Check the script version
obj.script = binary.slice(6);
- // obj.onStep;
- // obj.onConsole;
// Reset the script to the start
obj.reset = function (stepspeed) {
- console.log('reset');
obj.stop();
obj.ip = 0;
obj.variables = startvars;
@@ -69,15 +81,13 @@ module.exports.setup = function(binary, startvars) {
// Start the script
obj.start = function (stepspeed) {
- console.log('start');
obj.stop();
- if (stepspeed == null) { obj.stepspeed = 100; } else { obj.stepspeed = stepspeed; }
+ if (stepspeed == null) { obj.stepspeed = 10; } else { obj.stepspeed = stepspeed; }
if (obj.stepspeed > 0) { obj.timer = setInterval(function () { obj.step() }, obj.stepspeed); }
}
// Stop the script
obj.stop = function () {
- console.log('stop');
if (obj.timer != null) { clearInterval(obj.timer); }
obj.timer = null;
obj.stepspeed = 0;
@@ -91,7 +101,6 @@ module.exports.setup = function(binary, startvars) {
// Run the script one step forward
obj.step = function () {
- console.log('step');
if (obj.state != 1) return;
if (obj.ip < obj.script.length) {
var cmdid = ReadShort(obj.script, obj.ip);
@@ -99,18 +108,20 @@ module.exports.setup = function(binary, startvars) {
var argcount = ReadShort(obj.script, obj.ip + 4);
var argptr = obj.ip + 6;
var args = [];
-
+
// Clear all temp variables (This is optional)
for (var i in obj.variables) { if (i.startsWith('__')) { delete obj.variables[i]; } }
// Loop on each argument, moving forward by the argument length each time
for (var i = 0; i < argcount; i++) {
var arglen = ReadShort(obj.script, argptr);
- var argval = obj.script.substring(argptr + 2, argptr + 2 + arglen); // <----------- Problem area
- var argtyp = argval.charCodeAt(0);
- argval = argval.substring(1);
+ var argval = obj.script.slice(argptr + 2, argptr + 2 + arglen);
+ var argtyp = argval[0];
+ argval = argval.slice(1);
if (argtyp < 2) {
// Get the value and replace all {var} with variable values
+ argval = argval.toString();
+ //console.log(argval);
while (argval.split("{").length > 1) { var t = argval.split("{").pop().split("}").shift(); argval = argval.replace('{' + t + '}', obj.getVar(t)); }
if (argtyp == 1) { obj.variables['__' + i] = decodeURI(argval); argval = '__' + i; } // If argtyp is 1, this is a literal. Store in temp variable.
args.push(argval);
@@ -122,6 +133,8 @@ module.exports.setup = function(binary, startvars) {
argptr += (2 + arglen);
}
+ //console.log('CMD: ' + cmdid, args.join(', '));
+
// Move instruction pointer forward by command size
obj.ip += cmdlen;
@@ -130,13 +143,18 @@ module.exports.setup = function(binary, startvars) {
for (var i = 0; i < 10; i++) { argsval.push(obj.getVar(args[i])); }
var storeInArg0;
+ //console.log('VAR: ' + JSON.stringify(obj.variables));
+ //console.log('CMD: ' + cmdid, argsval.join(', '));
+
try {
if (cmdid < 10000) {
// Lets run the actual command
+ //console.log(cmdid);
switch (cmdid) {
case 0: // nop
break;
case 1: // jump(label) or jump(label, a, compare, b)
+ //console.log('JUMP ' + argsval[1] + ' ' + argsval[2] + ' ' + argsval[3]);
if (argsval[2]) {
if (
(argsval[2] == '<' && argsval[1] < argsval[3]) ||
@@ -145,16 +163,24 @@ module.exports.setup = function(binary, startvars) {
(argsval[2] == '=' && argsval[1] == argsval[3]) ||
(argsval[2] == '>=' && argsval[1] >= argsval[3]) ||
(argsval[2] == '>' && argsval[1] > argsval[3])
- ) { obj.ip = argsval[0]; }
+ ) {
+ obj.ip = argsval[0];
+ }
} else {
obj.ip = argsval[0]; // Set the instruction pointer to the new location in the script
}
break;
case 2: // set(variable, value)
- if (args[1] == undefined) delete obj.variables[args[0]]; else obj.setVar(args[0], argsval[1]);
+ if (args[1] == undefined) { if (obj.variables[args[0]]) { delete obj.variables[args[0]]; } } else {
+ //console.log('SET ' + args[0] + ' TO ' + argsval[1]);
+ obj.setVar(args[0], argsval[1]);
+ }
break;
case 3: // print(message)
- if (obj.onConsole) { obj.onConsole(obj.toString(argsval[0]), obj); } else { console.log(obj.toString(argsval[0])); }
+ var v = obj.toString(argsval[0]);
+ if (v.indexOf('INFO: ') == 0) { v = v.substring(6); }
+ if (v.indexOf('SUCCESS: ') == 0) { v = v.substring(9); }
+ if (obj.onConsole) { obj.onConsole(v, obj); } else { console.log(v); }
// Q(obj.consoleid).value += () + '\n'); Q(obj.console).scrollTop = Q(obj.console).scrollHeight;
break;
case 4: // dialog(title, content, buttons)
@@ -178,7 +204,7 @@ module.exports.setup = function(binary, startvars) {
storeInArg0 = argsval[1].join(argsval[2]);
break;
case 10: // length(variable_dest, variable_src)
- storeInArg0 = argsval[1].length;
+ if (argsval[1] == null) { storeInArg0 = 0; } else { storeInArg0 = argsval[1].length; }
break;
case 11: // jsonparse(variable_dest, json)
storeInArg0 = JSON.parse(argsval[1]);
@@ -228,15 +254,11 @@ module.exports.setup = function(binary, startvars) {
obj.amtstack.UnSubscribe(argsval[0], obj.xxWsmanReturn, obj, 0, argsval[1]);
break;
case 24: // readchar(str, pos)
- console.log(argsval[1], argsval[2], argsval[1].charCodeAt(argsval[2]));
+ //console.log('readchar', argsval[1], argsval[2], argsval[1].charCodeAt(argsval[2]));
storeInArg0 = argsval[1].charCodeAt(argsval[2]);
break;
case 25: // signWithDummyCa
- // ###BEGIN###{Certificates}
- obj.state = 2;
- // DERKey, xxCaPrivateKey, certattributes, issuerattributes
- amtcert_signWithCaKey(argsval[0], null, argsval[1], { 'CN': 'Untrusted Root Certificate' }, obj.xxSignWithDummyCaReturn);
- // ###END###{Certificates}
+ // Not supported
break;
default: {
obj.state = 9;
@@ -246,23 +268,24 @@ module.exports.setup = function(binary, startvars) {
} else {
if (cmdid < 20000) {
// functions of type ARG1 = func(ARG2, ARG3, ARG4, ARG5, ARG6)
- //storeInArg0 = script_functionTableX2[cmdid - 10000](argsval[1], argsval[2], argsval[3], argsval[4], argsval[5], argsval[6]);
+ storeInArg0 = script_functionTableX2[cmdid - 10000](argsval[1], argsval[2], argsval[3], argsval[4], argsval[5], argsval[6]);
} else {
+ //if (cmdid == 20009) { console.log('--------------------------------------'); }
// Optional functions of type ARG1 = func(ARG2, ARG3, ARG4, ARG5, ARG6)
//if (script_functionTableX3 && script_functionTableX3[cmdid - 20000]) {
// storeInArg0 = script_functionTableX3[cmdid - 20000](obj, argsval[1], argsval[2], argsval[3], argsval[4], argsval[5], argsval[6]); // Note that optional calls start with "obj" as first argument.
//}
}
}
-
if (storeInArg0 != undefined) obj.setVar(args[0], storeInArg0);
} catch (e) {
if (typeof e == 'object') { e = e.message; }
obj.setVar('_exception', e);
+ console.log('EXCEPTION: ' + e);
}
}
- if (obj.state == 1 && obj.ip >= obj.script.length) { obj.state = 0; obj.stop(); }
+ if (obj.state == 1 && obj.ip >= obj.script.length) { obj.state = 0; obj.stop(); if (obj.onCompleted) { obj.onCompleted(); } }
if (obj.onStep) obj.onStep(obj);
return obj;
}
@@ -274,28 +297,7 @@ module.exports.setup = function(binary, startvars) {
if (obj.onStep) obj.onStep(obj);
}
- // ###BEGIN###{**ClosureAdvancedMode}
- obj.xxWsmanReturnFix = function (x) {
- if (!x || x == null) return;
- if (x.Header) { x['Header'] = x.Header; delete x.Header; }
- if (x.Body) { x['Body'] = x.Body; delete x.Body; }
- if (x.Responses) { x['Responses'] = x.Responses; delete x.Responses; }
- if (x.Response) { x['Response'] = x.Response; delete x.Response; }
- if (x.ReturnValueStr) { x['ReturnValueStr'] = x.ReturnValueStr; delete x.ReturnValueStr; }
- }
- // ###END###{**ClosureAdvancedMode}
-
obj.xxWsmanReturn = function (stack, name, responses, status) {
- // ###BEGIN###{**ClosureAdvancedMode}
- // This is required when Google Closure is used
- if (responses) {
- obj.xxWsmanReturnFix(responses);
- for (var i in responses) {
- obj.xxWsmanReturnFix(responses[i]);
- for (var j in responses[i]) { obj.xxWsmanReturnFix(responses[i][j]); }
- }
- }
- // ###END###{**ClosureAdvancedMode}
obj.setVar(name, responses);
obj.setVar('wsman_result', status);
obj.setVar('wsman_result_str', ((httpErrorTable[status]) ? (httpErrorTable[status]) : ('Error #' + status)));
@@ -303,14 +305,6 @@ module.exports.setup = function(binary, startvars) {
if (obj.onStep) obj.onStep(obj);
}
- // ###BEGIN###{Certificates}
- obj.xxSignWithDummyCaReturn = function (cert) {
- obj.setVar('signed_cert', btoa(_arrayBufferToString(cert)));
- obj.state = 1;
- if (obj.onStep) obj.onStep(obj);
- }
- // ###END###{Certificates}
-
obj.toString = function (x) { if (typeof x == 'object') return JSON.stringify(x); return x; }
obj.reset();
diff --git a/agents/modules_meshcmd/amt-wsman-duk.js b/agents/modules_meshcmd/amt-wsman-duk.js
index ce655873..9ec2dc34 100644
--- a/agents/modules_meshcmd/amt-wsman-duk.js
+++ b/agents/modules_meshcmd/amt-wsman-duk.js
@@ -70,7 +70,7 @@ function CreateWsmanComm(host, port, user, pass, tls, extra) {
req.on('response', function (response) {
//console.log('Response: ' + response.statusCode);
if (response.statusCode != 200) {
- console.log('ERR:' + JSON.stringify(response));
+ //console.log('ERR:' + JSON.stringify(response));
obj.gotNextMessagesError({ status: response.statusCode }, 'error', null, [postdata, callback, tag]);
} else {
response.acc = '';
@@ -80,8 +80,7 @@ function CreateWsmanComm(host, port, user, pass, tls, extra) {
});
// Send POST body, this work with binary.
- req.write(postdata);
- req.end();
+ req.end(postdata);
obj.ActiveAjaxCount++;
return req;
}
diff --git a/agents/modules_meshcmd/amt-wsman.js b/agents/modules_meshcmd/amt-wsman.js
index e612158a..3ee9dbe9 100644
--- a/agents/modules_meshcmd/amt-wsman.js
+++ b/agents/modules_meshcmd/amt-wsman.js
@@ -181,8 +181,7 @@ function WsmanStackCreateService(CreateWsmanComm, host, port, user, pass, tls, e
for (var i = 0; i < selectorArray.length; i++) {
result += '' + selectorArray[i]['Value'] + '';
}
- }
- else {
+ } else {
result += '' + selectorArray['Value'] + '';
}
result += '';
diff --git a/agents/modules_meshcmd/amt.js b/agents/modules_meshcmd/amt.js
index b2bbafcd..da5aecc7 100644
--- a/agents/modules_meshcmd/amt.js
+++ b/agents/modules_meshcmd/amt.js
@@ -356,6 +356,7 @@ function AmtStackCreateService(wsmanStack) {
obj.IPS_HostBasedSetupService_UpgradeClientToAdmin = function (McNonce, SigningAlgorithm, DigitalSignature, callback_func) { obj.Exec("IPS_HostBasedSetupService", "UpgradeClientToAdmin", { "McNonce": McNonce, "SigningAlgorithm": SigningAlgorithm, "DigitalSignature": DigitalSignature }, callback_func); }
obj.IPS_HostBasedSetupService_DisableClientControlMode = function (_method_dummy, callback_func) { obj.Exec("IPS_HostBasedSetupService", "DisableClientControlMode", { "_method_dummy": _method_dummy }, callback_func); }
obj.IPS_KVMRedirectionSettingData_TerminateSession = function (callback_func) { obj.Exec("IPS_KVMRedirectionSettingData", "TerminateSession", {}, callback_func); }
+ obj.IPS_KVMRedirectionSettingData_DataChannelRead = function (callback_func) { obj.Exec("IPS_KVMRedirectionSettingData", "DataChannelRead", {}, callback_func); }
obj.IPS_OptInService_StartOptIn = function (callback_func) { obj.Exec("IPS_OptInService", "StartOptIn", {}, callback_func); }
obj.IPS_OptInService_CancelOptIn = function (callback_func) { obj.Exec("IPS_OptInService", "CancelOptIn", {}, callback_func); }
obj.IPS_OptInService_SendOptInCode = function (OptInCode, callback_func) { obj.Exec("IPS_OptInService", "SendOptInCode", { "OptInCode": OptInCode }, callback_func); }
diff --git a/agents/modules_meshcore/amt-lme.js b/agents/modules_meshcore/amt-lme.js
index 10b6c5c1..f7a8f468 100644
--- a/agents/modules_meshcore/amt-lme.js
+++ b/agents/modules_meshcore/amt-lme.js
@@ -316,9 +316,21 @@ function lme_heci(options) {
console.log('Unknown Recipient ID/' + rChannelId + ' for APF_CHANNEL_DATA');
}
break;
+ case APF_CHANNEL_OPEN_FAILURE:
+ var rChannelId = chunk.readUInt32BE(1);
+ var reasonCode = chunk.readUInt32BE(5);
+ if ((this.sockets != null) && (this.sockets[rChannelId] != undefined)) {
+ this.sockets[rChannelId].end();
+ delete this.sockets[rChannelId];
+ } else if ((this.insockets != null) && (this.insockets[rChannelId] != undefined)) {
+ delete this.insockets[rChannelId];
+ } else {
+ console.log('Unknown Recipient ID/' + rChannelId + ' for APF_CHANNEL_OPEN_FAILURE');
+ }
+ break;
case APF_CHANNEL_CLOSE:
var rChannelId = chunk.readUInt32BE(1);
- if (this.sockets[rChannelId] != undefined) {
+ if ((this.sockets != null) && (this.sockets[rChannelId] != undefined)) {
this.sockets[rChannelId].end();
var amtId = this.sockets[rChannelId].lme.amtId;
var buffer = Buffer.alloc(5);
@@ -498,6 +510,7 @@ var lmsEvents = {
"iAMT0052-0": "User Notification Alert - KVM session requested.",
"iAMT0052-1": "User Notification Alert - KVM session started.",
"iAMT0052-2": "User Notification Alert - KVM session stopped.",
+ "iAMT0052-3": "User Notification Alert - KVM data channel.",
"iAMT0053": "User Notification Alert - RCS notification.",
"iAMT0053-50": "User Notification Alert - RCS notification (HW button pressed. Connection initiated automatically).",
"iAMT0053-52": "User Notification Alert - RCS notification (HW button pressed. Connection wasn't initiated automatically).",
@@ -512,7 +525,7 @@ var lmsEvents = {
"iAMT0057": "User Notification Alert - Network State change notification.",
"iAMT0058": "User Notification Alert - Remote Access change notification.",
"iAMT0058-1": "User Notification Alert - Remote Access change notification - tunnel is closed.",
- //"iAMT0058-1": "User Notification Alert - Remote Access change notification - tunnel is open.",
+ //"iAMT0058-1": "User Notification Alert - Remote Access change notification - tunnel is open.", // TODO
"iAMT0059": "User Notification Alert - KVM enabled event.",
"iAMT0059-0": "User Notification Alert - KVM enabled event - KVM disabled.",
"iAMT0059-1": "User Notification Alert - KVM enabled event - KVM enabled (both from MEBx and PTNI).",
diff --git a/agents/modules_meshcore/amt-mei.js b/agents/modules_meshcore/amt-mei.js
index 970e0271..18ca1ea6 100644
--- a/agents/modules_meshcore/amt-mei.js
+++ b/agents/modules_meshcore/amt-mei.js
@@ -46,6 +46,7 @@ function amt_heci() {
});
});
this._amt.connect(heci.GUIDS.AMT, { noPipeline: 1 });
+ function trim(x) { var y = x.indexOf('\0'); if (y >= 0) { return x.substring(0, y); } else { return x; } }
this.getCommand = function (chunk) {
var command = chunk.length == 0 ? (this._amt.rq.peekQueue().cmd | 0x800000) : chunk.readUInt32LE(4);
@@ -216,6 +217,7 @@ function amt_heci() {
this.getCertHashEntry(handles.shift(), this._getHashEntrySink, fn, opt, entries, handles);
}, callback, optional);
};
+
this._getHashEntrySink = function (result, fn, opt, entries, handles) {
entries.push(result);
if (handles.length > 0) {
@@ -229,7 +231,7 @@ function amt_heci() {
var optional = [];
for (var i = 1; i < arguments.length; ++i) { optional.push(arguments[i]); }
this.sendCommand(103, Buffer.alloc(40), function (header, fn, opt) {
- if (header.Data.length == 68) { opt.unshift({ user: header.Data.slice(0, 34).toString(), pass: header.Data.slice(34, 67).toString(), raw: header.Data }); } else { opt.unshift(null); }
+ if (header.Data.length == 68) { opt.unshift({ user: trim(header.Data.slice(0, 34).toString()), pass: trim(header.Data.slice(34, 67).toString()), raw: header.Data }); } else { opt.unshift(null); }
fn.apply(this, opt);
}, callback, optional);
}
diff --git a/meshagent.js b/meshagent.js
index fa45501d..3b41a3fe 100644
--- a/meshagent.js
+++ b/meshagent.js
@@ -229,7 +229,7 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
});
// If error, do nothing
- ws.on('error', function (err) { console.log(err); });
+ ws.on('error', function (err) { console.log('AGENT WSERR: ' + err); });
// If the mesh agent web socket is closed, clean up.
ws.on('close', function (req) { obj.parent.parent.debug(1, 'Agent disconnect ' + obj.nodeid + ' (' + obj.remoteaddr + ')'); obj.close(0); });
diff --git a/package.json b/package.json
index 71493bd8..f75bb956 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "meshcentral",
- "version": "0.1.4-b",
+ "version": "0.1.4-f",
"keywords": [
"Remote Management",
"Intel AMT",
diff --git a/public/scriptblocks.txt b/public/scriptblocks.txt
index 553c1abf..ec6f97b8 100644
--- a/public/scriptblocks.txt
+++ b/public/scriptblocks.txt
@@ -517,7 +517,7 @@
"AMT-RemoteAccess-AddMpsServerFqdnCert": {
"name": "Remote - Add MPS FQDN/Cert",
"desc": "Add a new CIRA server (MPS) using the server's hostname and authentication using certificate",
- "code": "# Get the input from user for the CN to look for\r\n# Get available certificates\r\nsplit ws_general_query \"AMT_PublicKeyCertificate\" ,\r\nwsbatchenum \"wsman_answer\" ws_general_query\r\nlength wsman_ans_length wsman_answer.AMT_PublicKeyCertificate.responses\r\nset i 0\r\n:loop_ans-%%%~%%%\r\n# Get the current subject name\r\nset curSubject wsman_answer.AMT_PublicKeyCertificate.responses.{i}.Subject\r\nIndexOf pos curSubject \"CN=%%%CN%%%\" \r\njump :cnFound-%%%~%%% pos \">=\" 0\r\nadd i i 1\r\njump :loop_ans-%%%~%%% i \"<\" wsman_ans_length\r\njump :cnNotFound-%%%~%%%\r\n:cnFound-%%%~%%%\r\n# Set the reference to the certificate\r\nset certInstanceId wsman_answer.AMT_PublicKeyCertificate.responses.{i}.InstanceID\r\nset certHandle \"%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_PublicKeyCertificate%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22InstanceID%22%3E{certInstanceId}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\n# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%FQDN%%%%22,%22InfoFormat%22:%22201%22,%22Port%22:%%%Port%%%,%22AuthMethod%22:%221%22%7D\"\r\nset wsargs.Certificate certHandle\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Prescence Server (MPS) successfully added to the Intel(R) AMT Subsystem\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:cnNotFound-%%%~%%%\r\nprint \"Couldn't find a certificate matching the value of CN=%%%CN%%%\"\r\n:error-%%%~%%%\r\nprint \"Call failed with error {wsman_result}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset certHandle\r\nset curSubject\r\nset i\r\nset pos\r\nset ws_general_query\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset certInstanceId\r\nset wsman_ans_length",
+ "code": "# Get the input from user for the CN to look for\r\n# Get available certificates\r\nsplit ws_general_query \"AMT_PublicKeyCertificate\" ,\r\nwsbatchenum \"wsman_answer\" ws_general_query\r\nlength wsman_ans_length wsman_answer.AMT_PublicKeyCertificate.responses\r\nset i 0\r\n:loop_ans-%%%~%%%\r\n# Get the current subject name\r\nset curSubject wsman_answer.AMT_PublicKeyCertificate.responses.{i}.Subject\r\nIndexOf pos curSubject \"CN=%%%CN%%%\" \r\njump :cnFound-%%%~%%% pos \">=\" 0\r\nadd i i 1\r\njump :loop_ans-%%%~%%% i \"<\" wsman_ans_length\r\njump :cnNotFound-%%%~%%%\r\n:cnFound-%%%~%%%\r\n# Set the reference to the certificate\r\nset certInstanceId wsman_answer.AMT_PublicKeyCertificate.responses.{i}.InstanceID\r\nset certHandle \"%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_PublicKeyCertificate%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22InstanceID%22%3E{certInstanceId}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\n# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%FQDN%%%%22,%22InfoFormat%22:%22201%22,%22Port%22:%%%Port%%%,%22AuthMethod%22:%221%22%7D\"\r\nset wsargs.Certificate certHandle\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Presence Server (MPS) successfully added\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:cnNotFound-%%%~%%%\r\nprint \"Couldn't find a certificate matching the value of CN=%%%CN%%%\"\r\n:error-%%%~%%%\r\nprint \"Call failed with error {wsman_result}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset certHandle\r\nset curSubject\r\nset i\r\nset pos\r\nset ws_general_query\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset certInstanceId\r\nset wsman_ans_length",
"vars": {
"FQDN": {
"name": "MPS Hostname",
@@ -545,7 +545,7 @@
"AMT-RemoteAccess-AddMpsServerFqdnUpa": {
"name": "Remote - Add MPS FQDN/User",
"desc": "Add a new CIRA server (MPS) using the server's hostname authentication using username/password",
- "code": "# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%FQDN%%%%22,%22InfoFormat%22:201,%22Port%22:%%%Port%%%,%22AuthMethod%22:2,%22Username%22:%22%%%username%%%%22,%22Password%22:%22%%%password%%%%22%7D\"\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Prescence Server (MPS) successfully added to the Intel(R) AMT Subsystem\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:error-%%%~%%%\r\nprint \"Call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset certHandle\r\nset curSubject\r\nset i\r\nset pos\r\nset ws_general_query\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset certInstanceId\r\nset wsman_ans_length",
+ "code": "# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%FQDN%%%%22,%22InfoFormat%22:201,%22Port%22:%%%Port%%%,%22AuthMethod%22:2,%22Username%22:%22%%%username%%%%22,%22Password%22:%22%%%password%%%%22%7D\"\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Presence Server (MPS) successfully\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:error-%%%~%%%\r\nprint \"Call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset certHandle\r\nset curSubject\r\nset i\r\nset pos\r\nset ws_general_query\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset certInstanceId\r\nset wsman_ans_length",
"vars": {
"FQDN": {
"name": "MPS Hostname",
@@ -580,7 +580,7 @@
"AMT-RemoteAccess-AddMpsIpCertServer": {
"name": "Remote - Add MPS IP/Cert",
"desc": "Add a new CIRA server (MPS) using the server's IP address and authentication using certificate",
- "code": "# Get the input from user for the CN to look for\r\n# Get available certificates\r\nsplit ws_general_query \"AMT_PublicKeyCertificate\" ,\r\nwsbatchenum \"wsman_answer\" ws_general_query\r\nlength wsman_ans_length wsman_answer.AMT_PublicKeyCertificate.responses\r\nset i 0\r\n:loop_ans-%%%~%%%\r\n# Get the current subject name\r\nset curSubject wsman_answer.AMT_PublicKeyCertificate.responses.{i}.Subject\r\nIndexOf pos curSubject \"CN=%%%CN%%%\" \r\njump :cnFound-%%%~%%% pos \">=\" 0\r\nadd i i 1\r\njump :loop_ans-%%%~%%% i \"<\" wsman_ans_length\r\njump :cnNotFound-%%%~%%%\r\n:cnFound-%%%~%%%\r\n# Set the reference to the certificate\r\nset certInstanceId wsman_answer.AMT_PublicKeyCertificate.responses.{i}.InstanceID\r\nset certHandle \"%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_PublicKeyCertificate%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22InstanceID%22%3E{certInstanceId}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\n# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%IP%%%%22,%22InfoFormat%22:%223%22,%22Port%22:%%%Port%%%,%22AuthMethod%22:%221%22%7D\"\r\nset wsargs.Certificate certHandle\r\nset wsargs.CN \"%%%ServerName%%%\"\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Prescence Server (MPS) successfully added to the Intel(R) AMT Subsystem\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:cnNotFound-%%%~%%%\r\nprint \"Couldn't find a certificate matching the value of CN=%%%CN%%%\"\r\n:error-%%%~%%%\r\nprint \"Call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset certHandle\r\nset curSubject\r\nset i\r\nset pos\r\nset ws_general_query\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset certInstanceId\r\nset wsman_ans_length",
+ "code": "# Get the input from user for the CN to look for\r\n# Get available certificates\r\nsplit ws_general_query \"AMT_PublicKeyCertificate\" ,\r\nwsbatchenum \"wsman_answer\" ws_general_query\r\nlength wsman_ans_length wsman_answer.AMT_PublicKeyCertificate.responses\r\nset i 0\r\n:loop_ans-%%%~%%%\r\n# Get the current subject name\r\nset curSubject wsman_answer.AMT_PublicKeyCertificate.responses.{i}.Subject\r\nIndexOf pos curSubject \"CN=%%%CN%%%\" \r\njump :cnFound-%%%~%%% pos \">=\" 0\r\nadd i i 1\r\njump :loop_ans-%%%~%%% i \"<\" wsman_ans_length\r\njump :cnNotFound-%%%~%%%\r\n:cnFound-%%%~%%%\r\n# Set the reference to the certificate\r\nset certInstanceId wsman_answer.AMT_PublicKeyCertificate.responses.{i}.InstanceID\r\nset certHandle \"%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_PublicKeyCertificate%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22InstanceID%22%3E{certInstanceId}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\n# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%IP%%%%22,%22InfoFormat%22:%223%22,%22Port%22:%%%Port%%%,%22AuthMethod%22:%221%22%7D\"\r\nset wsargs.Certificate certHandle\r\nset wsargs.CN \"%%%ServerName%%%\"\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Presence Server (MPS) successfully added\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:cnNotFound-%%%~%%%\r\nprint \"Couldn't find a certificate matching the value of CN=%%%CN%%%\"\r\n:error-%%%~%%%\r\nprint \"Call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset certHandle\r\nset curSubject\r\nset i\r\nset pos\r\nset ws_general_query\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset certInstanceId\r\nset wsman_ans_length",
"vars": {
"IP": {
"name": "IPv4 Address",
@@ -615,7 +615,7 @@
"AMT-RemoteAccess-AddMpsIpUpa": {
"name": "Remote - Add MPS IP/User",
"desc": "Add a new CIRA server (MPS) using the servers IP address and authenticating using a username/password",
- "code": "# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%IP%%%%22,%22InfoFormat%22:%223%22,%22Port%22:%%%Port%%%,%22AuthMethod%22:%222%22,%22Username%22:%22%%%username%%%%22,%22Password%22:%22%%%password%%%%22%7D\"\r\nset wsargs.CN \"%%%ServerName%%%\"\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Prescence Server (MPS) successfully added to the Intel(R) AMT Subsystem\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:error-%%%~%%%\r\nprint \"Call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset wsman_ans_length",
+ "code": "# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%IP%%%%22,%22InfoFormat%22:%223%22,%22Port%22:%%%Port%%%,%22AuthMethod%22:%222%22,%22Username%22:%22%%%username%%%%22,%22Password%22:%22%%%password%%%%22%7D\"\r\nset wsargs.CN \"%%%ServerName%%%\"\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Presence Server (MPS) successfully added\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:error-%%%~%%%\r\nprint \"Call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset wsman_ans_length",
"vars": {
"IP": {
"name": "IPv4 Address",
@@ -684,7 +684,7 @@
"AMT-RemoteAccess-AddRemoteAccessPolicyRule": {
"name": "Remote - Add Trigger (User / Alert)",
"desc": "Set a remote access trigger policy, used to establish a secure tunnel between a management console and the Intel AMT platform.",
- "code": "# *** Prepare arguments for AMT_RemoteAccessService.AddRemoteAccessPolicyRule ***\r\njsonparse ws_args \"%7B%22Trigger%22:%220%22,%22TunnelLifeTime%22:%22%%%tLifeTime%%%%22%7D\"\r\n# *** Verify valid input ***\r\njump :VALID_INPUT \"%%%AccessInfo1%%%\" \"!=\" \"\"\r\nprint \"ERROR: Field %22AccessInfo1%22 must not be empty, aborting operation...\"\r\njump :end-%%%~%%%\r\n:VALID_INPUT\r\n# *** Set a EPR selector matching user input ***\r\nsplit ws_general_query \"AMT_ManagementPresenceRemoteSAP\" ,\r\nwsbatchenum \"wsman_answer\" ws_general_query\r\nset i 0\r\nset arr wsman_answer.AMT_ManagementPresenceRemoteSAP.responses\r\nLength arr_len arr\r\nset mpsEpr1 \"*\"\r\nset mpsEpr2 \"*\"\r\n:loop-%%%~%%%\r\nset curAccessInfo arr.{i}.AccessInfo\r\nadd curAccessInfo curAccessInfo \":\"\r\nadd curAccessInfo curAccessInfo arr.{i}.Port\r\njump :MPS1_NO_MATCH curAccessInfo \"!=\" \"%%%AccessInfo1%%%\"\r\nset mpsEpr1 wsman_answer.AMT_ManagementPresenceRemoteSAP.responses.{i}.Name\r\nprint \"INFO: Found matching (primary) mps: {mpsEpr1}\"\r\njump :MPS2_NOTSET \"%%%AccessInfo2%%%\" \"=\" \"\"\r\n:MPS1_NO_MATCH\r\njump :MPS2_NO_MATCH curAccessInfo \"!=\" \"%%%AccessInfo2%%%\"\r\nset mpsEpr2 wsman_answer.AMT_ManagementPresenceRemoteSAP.responses.{i}.Name\r\nprint \"INFO: Found matching (secondary) mps: {mpsEpr2}\"\r\n:MPS2_NO_MATCH\r\nadd i i 1\r\njump :loop-%%%~%%% i \"<\" arr_len\r\n:MPS2_NOTSET\r\njump :MPS1_FOUND mpsEpr1 \"!=\" \"*\"\r\nprint \"ERROR: MPS server: %22%%%AccessInfo1%%%%22 could not be found, aborting operation...\"\r\njump :end-%%%~%%%\r\n:MPS1_FOUND\r\njump :MPS2_FOUND \"%%%AccessInfo2%%%\" \"=\" \"\"\r\njump :MPS2_FOUND mpsEpr2 \"!=\" \"*\"\r\nprint \"ERROR: MPS server: %22%%%AccessInfo2%%%%22 could not be found, aborting operation...\"\r\njump :end-%%%~%%%\r\n:MPS2_FOUND\r\nprint \"INFO: Setting policy...\"\r\njsonparse ws_args.MpServer \"%7B%7D\"\r\nset MpServer \"%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_ManagementPresenceRemoteSAP%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22Name%22%3E{mpsEpr1}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\njump :SKIP_ADD_MPS2 \"%%%AccessInfo2%%%\" \"=\" \"\"\r\nadd MpServer MpServer \"|%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_ManagementPresenceRemoteSAP%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22Name%22%3E{mpsEpr2}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\n:SKIP_ADD_MPS2\r\nsplit ws_args.MpServer MpServer \"|\"\r\n# *** Call AMT_RemoteAccessService.AddRemoteAccessPolicyRule with policy details. ***\r\nwsexec \"AMT_RemoteAccessService\" \"AddRemoteAccessPolicyRule\" ws_args selector\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Policy addedd successfully\"\r\njump :end-%%%~%%%\r\n:error-%%%~%%%\r\nprint \"WSMAN call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset PullRemoteAccess 1\r\nset mpsEpr1\r\nset mpsEpr2\r\nset i\r\nset curAccessInfo\r\nset arr_len\r\nset MpServer\r\nset arr\r\nset AMT_RemoteAccessService\r\nset wsman_result\r\nset wsman_result_str\r\nset ws_args\r\nset ws_general_query\r\nset wsman_answer",
+ "code": "# *** Prepare arguments for AMT_RemoteAccessService.AddRemoteAccessPolicyRule ***\r\njsonparse ws_args \"%7B%22Trigger%22:%220%22,%22TunnelLifeTime%22:%22%%%tLifeTime%%%%22%7D\"\r\n# *** Verify valid input ***\r\njump :VALID_INPUT \"%%%AccessInfo1%%%\" \"!=\" \"\"\r\nprint \"ERROR: Field %22AccessInfo1%22 must not be empty, aborting operation...\"\r\njump :end-%%%~%%%\r\n:VALID_INPUT\r\n# *** Set a EPR selector matching user input ***\r\nsplit ws_general_query \"AMT_ManagementPresenceRemoteSAP\" ,\r\nwsbatchenum \"wsman_answer\" ws_general_query\r\nset i 0\r\nset arr wsman_answer.AMT_ManagementPresenceRemoteSAP.responses\r\nLength arr_len arr\r\nset mpsEpr1 \"*\"\r\nset mpsEpr2 \"*\"\r\n:loop-%%%~%%%\r\nset curAccessInfo arr.{i}.AccessInfo\r\nadd curAccessInfo curAccessInfo \":\"\r\nadd curAccessInfo curAccessInfo arr.{i}.Port\r\njump :MPS1_NO_MATCH curAccessInfo \"!=\" \"%%%AccessInfo1%%%\"\r\nset mpsEpr1 wsman_answer.AMT_ManagementPresenceRemoteSAP.responses.{i}.Name\r\nprint \"INFO: Found matching (primary) mps: {mpsEpr1}\"\r\njump :MPS2_NOTSET \"%%%AccessInfo2%%%\" \"=\" \"\"\r\n:MPS1_NO_MATCH\r\njump :MPS2_NO_MATCH curAccessInfo \"!=\" \"%%%AccessInfo2%%%\"\r\nset mpsEpr2 wsman_answer.AMT_ManagementPresenceRemoteSAP.responses.{i}.Name\r\nprint \"INFO: Found matching (secondary) mps: {mpsEpr2}\"\r\n:MPS2_NO_MATCH\r\nadd i i 1\r\njump :loop-%%%~%%% i \"<\" arr_len\r\n:MPS2_NOTSET\r\njump :MPS1_FOUND mpsEpr1 \"!=\" \"*\"\r\nprint \"ERROR: MPS server: %22%%%AccessInfo1%%%%22 could not be found, aborting operation...\"\r\njump :end-%%%~%%%\r\n:MPS1_FOUND\r\njump :MPS2_FOUND \"%%%AccessInfo2%%%\" \"=\" \"\"\r\njump :MPS2_FOUND mpsEpr2 \"!=\" \"*\"\r\nprint \"ERROR: MPS server: %22%%%AccessInfo2%%%%22 could not be found, aborting operation...\"\r\njump :end-%%%~%%%\r\n:MPS2_FOUND\r\nprint \"INFO: Setting policy...\"\r\njsonparse ws_args.MpServer \"%7B%7D\"\r\nset MpServer \"%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_ManagementPresenceRemoteSAP%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22Name%22%3E{mpsEpr1}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\njump :SKIP_ADD_MPS2 \"%%%AccessInfo2%%%\" \"=\" \"\"\r\nadd MpServer MpServer \"|%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_ManagementPresenceRemoteSAP%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22Name%22%3E{mpsEpr2}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\n:SKIP_ADD_MPS2\r\nsplit ws_args.MpServer MpServer \"|\"\r\n# *** Call AMT_RemoteAccessService.AddRemoteAccessPolicyRule with policy details. ***\r\nwsexec \"AMT_RemoteAccessService\" \"AddRemoteAccessPolicyRule\" ws_args selector\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Policy added successfully\"\r\njump :end-%%%~%%%\r\n:error-%%%~%%%\r\nprint \"WSMAN call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset PullRemoteAccess 1\r\nset mpsEpr1\r\nset mpsEpr2\r\nset i\r\nset curAccessInfo\r\nset arr_len\r\nset MpServer\r\nset arr\r\nset AMT_RemoteAccessService\r\nset wsman_result\r\nset wsman_result_str\r\nset ws_args\r\nset ws_general_query\r\nset wsman_answer",
"vars": {
"AccessInfo1": {
"name": "MPS 1 Address",
@@ -722,7 +722,7 @@
"AMT-RemoteAccess-AddRemoteAccessPolicyRule2": {
"name": "Remote - Add Trigger (Periodic)",
"desc": "Set a remote access trigger policy, used to establish a secure tunnel between a management console and the Intel AMT platform.",
- "code": "# *** Verify valid input ***\r\nsplit period_arr \"%%%Period%%%\" \":\"\r\nlength period_arr_len period_arr\r\njump :INVALID_ARG_AccessInfo1 \"%%%AccessInfo1%%%\" \"=\" \"\"\r\njump :DailyPeriod \"%%%PeriodType%%%\" \"!=\" \"0\"\r\njump :INVALID_PeriodType \"%%%PeriodType%%%\" \"!=\" \"0\"\r\njump :INVALID_ARG_Period period_arr.0 \"<=\" \"0\"\r\njump :INVALID_ARG_Period period_arr.0 \">\" \"4294967295\"\r\nIntToStr extendedData \"0\"\r\nIntToStr bPeriod period_arr.0\r\nadd extendedData extendedData bPeriod\r\njump :SET_PERIOD\r\n:DailyPeriod\r\njump :INVALID_PeriodType period_arr_len \"!=\" \"2\"\r\njump :INVALID_ARG_PeriodDaily period_arr.0 \"<=\" \"0\"\r\njump :INVALID_ARG_PeriodDaily period_arr.0 \">\" \"23\"\r\njump :INVALID_ARG_PeriodDaily period_arr.1 \">\" \"59\"\r\njump :INVALID_ARG_PeriodDaily period_arr.1 \"<=\" \"0\"\r\nIntToStr extendedData \"1\"\r\nIntToStr bPeriodHour period_arr.0\r\nIntToStr bPeriodMinute period_arr.1\r\nadd extendedData extendedData bPeriodHour\r\nadd extendedData extendedData bPeriodMinute\r\njump :SET_PERIOD\r\n:INVALID_PeriodType\r\nprint \"ERROR: The period type and value must correspond, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_PeriodDaily\r\nprint \"ERROR: Field %22Period%22 must be a value HH:MM 0<=HH<24 && 0<=MM<60, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_AccessInfo1\r\nprint \"ERROR: Field %22AccessInfo1%22 must not be empty, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_Period\r\nprint \"ERROR: Field %22Period%22 must be a value 0<=t\" \"4294967295\"\r\nIntToStr extendedData \"0\"\r\nIntToStr bPeriod period_arr.0\r\nadd extendedData extendedData bPeriod\r\njump :SET_PERIOD\r\n:DailyPeriod\r\njump :INVALID_PeriodType period_arr_len \"!=\" \"2\"\r\njump :INVALID_ARG_PeriodDaily period_arr.0 \"<=\" \"0\"\r\njump :INVALID_ARG_PeriodDaily period_arr.0 \">\" \"23\"\r\njump :INVALID_ARG_PeriodDaily period_arr.1 \">\" \"59\"\r\njump :INVALID_ARG_PeriodDaily period_arr.1 \"<=\" \"0\"\r\nIntToStr extendedData \"1\"\r\nIntToStr bPeriodHour period_arr.0\r\nIntToStr bPeriodMinute period_arr.1\r\nadd extendedData extendedData bPeriodHour\r\nadd extendedData extendedData bPeriodMinute\r\njump :SET_PERIOD\r\n:INVALID_PeriodType\r\nprint \"ERROR: The period type and value must correspond, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_PeriodDaily\r\nprint \"ERROR: Field %22Period%22 must be a value HH:MM 0<=HH<24 && 0<=MM<60, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_AccessInfo1\r\nprint \"ERROR: Field %22AccessInfo1%22 must not be empty, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_Period\r\nprint \"ERROR: Field %22Period%22 must be a value 0<=t=\" 0\r\nadd i i 1\r\njump :loop_ans-%%%~%%% i \"<\" wsman_ans_length\r\njump :cnNotFound-%%%~%%%\r\n:cnFound-%%%~%%%\r\n# Set the reference to the certificate\r\nset certInstanceId wsman_answer.AMT_PublicKeyCertificate.responses.{i}.InstanceID\r\nset certHandle \"%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_PublicKeyCertificate%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22InstanceID%22%3E{certInstanceId}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\n# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%FQDN%%%%22,%22InfoFormat%22:%22201%22,%22Port%22:%%%Port%%%,%22AuthMethod%22:%221%22%7D\"\r\nset wsargs.Certificate certHandle\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Prescence Server (MPS) successfully added to the Intel(R) AMT Subsystem\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:cnNotFound-%%%~%%%\r\nprint \"Couldn't find a certificate matching the value of CN=%%%CN%%%\"\r\n:error-%%%~%%%\r\nprint \"Call failed with error {wsman_result}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset certHandle\r\nset curSubject\r\nset i\r\nset pos\r\nset ws_general_query\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset certInstanceId\r\nset wsman_ans_length",
+ "code": "# Get the input from user for the CN to look for\r\n# Get available certificates\r\nsplit ws_general_query \"AMT_PublicKeyCertificate\" ,\r\nwsbatchenum \"wsman_answer\" ws_general_query\r\nlength wsman_ans_length wsman_answer.AMT_PublicKeyCertificate.responses\r\nset i 0\r\n:loop_ans-%%%~%%%\r\n# Get the current subject name\r\nset curSubject wsman_answer.AMT_PublicKeyCertificate.responses.{i}.Subject\r\nIndexOf pos curSubject \"CN=%%%CN%%%\" \r\njump :cnFound-%%%~%%% pos \">=\" 0\r\nadd i i 1\r\njump :loop_ans-%%%~%%% i \"<\" wsman_ans_length\r\njump :cnNotFound-%%%~%%%\r\n:cnFound-%%%~%%%\r\n# Set the reference to the certificate\r\nset certInstanceId wsman_answer.AMT_PublicKeyCertificate.responses.{i}.InstanceID\r\nset certHandle \"%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_PublicKeyCertificate%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22InstanceID%22%3E{certInstanceId}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\n# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%FQDN%%%%22,%22InfoFormat%22:%22201%22,%22Port%22:%%%Port%%%,%22AuthMethod%22:%221%22%7D\"\r\nset wsargs.Certificate certHandle\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Presence Server (MPS) successfully added\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:cnNotFound-%%%~%%%\r\nprint \"Couldn't find a certificate matching the value of CN=%%%CN%%%\"\r\n:error-%%%~%%%\r\nprint \"Call failed with error {wsman_result}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset certHandle\r\nset curSubject\r\nset i\r\nset pos\r\nset ws_general_query\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset certInstanceId\r\nset wsman_ans_length",
"vars": {
"FQDN": {
"name": "MPS Hostname",
@@ -551,7 +551,7 @@
"AMT-RemoteAccess-AddMpsServerFqdnUpa": {
"name": "Remote - Add MPS FQDN/User",
"desc": "Add a new CIRA server (MPS) using the server's hostname authentication using username/password",
- "code": "# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%FQDN%%%%22,%22InfoFormat%22:201,%22Port%22:%%%Port%%%,%22AuthMethod%22:2,%22Username%22:%22%%%username%%%%22,%22Password%22:%22%%%password%%%%22%7D\"\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Prescence Server (MPS) successfully added to the Intel(R) AMT Subsystem\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:error-%%%~%%%\r\nprint \"Call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset certHandle\r\nset curSubject\r\nset i\r\nset pos\r\nset ws_general_query\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset certInstanceId\r\nset wsman_ans_length",
+ "code": "# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%FQDN%%%%22,%22InfoFormat%22:201,%22Port%22:%%%Port%%%,%22AuthMethod%22:2,%22Username%22:%22%%%username%%%%22,%22Password%22:%22%%%password%%%%22%7D\"\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Presence Server (MPS) successfully added\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:error-%%%~%%%\r\nprint \"Call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset certHandle\r\nset curSubject\r\nset i\r\nset pos\r\nset ws_general_query\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset certInstanceId\r\nset wsman_ans_length",
"vars": {
"FQDN": {
"name": "MPS Hostname",
@@ -586,7 +586,7 @@
"AMT-RemoteAccess-AddMpsIpCertServer": {
"name": "Remote - Add MPS IP/Cert",
"desc": "Add a new CIRA server (MPS) using the server's IP address and authentication using certificate",
- "code": "# Get the input from user for the CN to look for\r\n# Get available certificates\r\nsplit ws_general_query \"AMT_PublicKeyCertificate\" ,\r\nwsbatchenum \"wsman_answer\" ws_general_query\r\nlength wsman_ans_length wsman_answer.AMT_PublicKeyCertificate.responses\r\nset i 0\r\n:loop_ans-%%%~%%%\r\n# Get the current subject name\r\nset curSubject wsman_answer.AMT_PublicKeyCertificate.responses.{i}.Subject\r\nIndexOf pos curSubject \"CN=%%%CN%%%\" \r\njump :cnFound-%%%~%%% pos \">=\" 0\r\nadd i i 1\r\njump :loop_ans-%%%~%%% i \"<\" wsman_ans_length\r\njump :cnNotFound-%%%~%%%\r\n:cnFound-%%%~%%%\r\n# Set the reference to the certificate\r\nset certInstanceId wsman_answer.AMT_PublicKeyCertificate.responses.{i}.InstanceID\r\nset certHandle \"%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_PublicKeyCertificate%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22InstanceID%22%3E{certInstanceId}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\n# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%IP%%%%22,%22InfoFormat%22:%223%22,%22Port%22:%%%Port%%%,%22AuthMethod%22:%221%22%7D\"\r\nset wsargs.Certificate certHandle\r\nset wsargs.CN \"%%%ServerName%%%\"\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Prescence Server (MPS) successfully added to the Intel(R) AMT Subsystem\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:cnNotFound-%%%~%%%\r\nprint \"Couldn't find a certificate matching the value of CN=%%%CN%%%\"\r\n:error-%%%~%%%\r\nprint \"Call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset certHandle\r\nset curSubject\r\nset i\r\nset pos\r\nset ws_general_query\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset certInstanceId\r\nset wsman_ans_length",
+ "code": "# Get the input from user for the CN to look for\r\n# Get available certificates\r\nsplit ws_general_query \"AMT_PublicKeyCertificate\" ,\r\nwsbatchenum \"wsman_answer\" ws_general_query\r\nlength wsman_ans_length wsman_answer.AMT_PublicKeyCertificate.responses\r\nset i 0\r\n:loop_ans-%%%~%%%\r\n# Get the current subject name\r\nset curSubject wsman_answer.AMT_PublicKeyCertificate.responses.{i}.Subject\r\nIndexOf pos curSubject \"CN=%%%CN%%%\" \r\njump :cnFound-%%%~%%% pos \">=\" 0\r\nadd i i 1\r\njump :loop_ans-%%%~%%% i \"<\" wsman_ans_length\r\njump :cnNotFound-%%%~%%%\r\n:cnFound-%%%~%%%\r\n# Set the reference to the certificate\r\nset certInstanceId wsman_answer.AMT_PublicKeyCertificate.responses.{i}.InstanceID\r\nset certHandle \"%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_PublicKeyCertificate%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22InstanceID%22%3E{certInstanceId}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\n# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%IP%%%%22,%22InfoFormat%22:%223%22,%22Port%22:%%%Port%%%,%22AuthMethod%22:%221%22%7D\"\r\nset wsargs.Certificate certHandle\r\nset wsargs.CN \"%%%ServerName%%%\"\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Presence Server (MPS) successfully added\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:cnNotFound-%%%~%%%\r\nprint \"Couldn't find a certificate matching the value of CN=%%%CN%%%\"\r\n:error-%%%~%%%\r\nprint \"Call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset certHandle\r\nset curSubject\r\nset i\r\nset pos\r\nset ws_general_query\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset certInstanceId\r\nset wsman_ans_length",
"vars": {
"IP": {
"name": "IPv4 Address",
@@ -621,7 +621,7 @@
"AMT-RemoteAccess-AddMpsIpUpa": {
"name": "Remote - Add MPS IP/User",
"desc": "Add a new CIRA server (MPS) using the servers IP address and authenticating using a username/password",
- "code": "# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%IP%%%%22,%22InfoFormat%22:%223%22,%22Port%22:%%%Port%%%,%22AuthMethod%22:%222%22,%22Username%22:%22%%%username%%%%22,%22Password%22:%22%%%password%%%%22%7D\"\r\nset wsargs.CN \"%%%ServerName%%%\"\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Prescence Server (MPS) successfully added to the Intel(R) AMT Subsystem\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:error-%%%~%%%\r\nprint \"Call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset wsman_ans_length",
+ "code": "# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%IP%%%%22,%22InfoFormat%22:%223%22,%22Port%22:%%%Port%%%,%22AuthMethod%22:%222%22,%22Username%22:%22%%%username%%%%22,%22Password%22:%22%%%password%%%%22%7D\"\r\nset wsargs.CN \"%%%ServerName%%%\"\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Presence Server (MPS) successfully added\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:error-%%%~%%%\r\nprint \"Call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset wsman_ans_length",
"vars": {
"IP": {
"name": "IPv4 Address",
@@ -684,13 +684,13 @@
"AMT-RemoteAccess-RemoveAll-MPS": {
"name": "Remote - Remove All MPS",
"desc": "Remove all MPS",
- "vars": {},
- "code": "split ws_general_query \"AMT_ManagementPresenceRemoteSAP\" ,\nwsbatchenum \"wsman_answer\" ws_general_query\nset i 0\nset arr wsman_answer.AMT_ManagementPresenceRemoteSAP.responses\nLength arr_len arr\n:loop-%%%~%%%\nset instanceName wsman_answer.AMT_ManagementPresenceRemoteSAP.responses.{i}.Name\nset selector \"%3Cw:SelectorSet%3E%3Cw:Selector%20Name=%22Name%22%3E{instanceName}%3C/w:Selector%3E%3C/w:SelectorSet%3E\"\nwsdelete \"AMT_ManagementPresenceRemoteSAP\" selector\nadd i i 1\njump :loop-%%%~%%% i \"<\" arr_len\n:end-%%%~%%%\nset AMT_ManagementPresenceRemoteSAP\nset arr\nset i\nset instanceName\nset selector\nset ws_general_query\nset wsman_answer\nset wsman_result\nset wsman_result_str\nset arr_len\nset PullRemoteAccess 1\n"
+ "vars": { },
+ "code": "split ws_general_query \"AMT_ManagementPresenceRemoteSAP\" ,\nwsbatchenum \"wsman_answer\" ws_general_query\nset i 0\nset arr wsman_answer.AMT_ManagementPresenceRemoteSAP.responses\nLength arr_len arr\njump :end-%%%~%%% arr_len \"=\" 0\n:loop-%%%~%%%\nset instanceName wsman_answer.AMT_ManagementPresenceRemoteSAP.responses.{i}.Name\nset selector \"%3Cw:SelectorSet%3E%3Cw:Selector%20Name=%22Name%22%3E{instanceName}%3C/w:Selector%3E%3C/w:SelectorSet%3E\"\nwsdelete \"AMT_ManagementPresenceRemoteSAP\" selector\nadd i i 1\njump :loop-%%%~%%% i \"<\" arr_len\n:end-%%%~%%%\nset AMT_ManagementPresenceRemoteSAP\nset arr\nset i\nset instanceName\nset selector\nset ws_general_query\nset wsman_answer\nset wsman_result\nset wsman_result_str\nset arr_len\nset PullRemoteAccess 1\n\n"
},
"AMT-RemoteAccess-AddRemoteAccessPolicyRule": {
"name": "Remote - Add Trigger (User / Alert)",
"desc": "Set a remote access trigger policy, used to establish a secure tunnel between a management console and the Intel AMT platform.",
- "code": "# *** Prepare arguments for AMT_RemoteAccessService.AddRemoteAccessPolicyRule ***\r\njsonparse ws_args \"%7B%22Trigger%22:%220%22,%22TunnelLifeTime%22:%22%%%tLifeTime%%%%22%7D\"\r\n# *** Verify valid input ***\r\njump :VALID_INPUT \"%%%AccessInfo1%%%\" \"!=\" \"\"\r\nprint \"ERROR: Field %22AccessInfo1%22 must not be empty, aborting operation...\"\r\njump :end-%%%~%%%\r\n:VALID_INPUT\r\n# *** Set a EPR selector matching user input ***\r\nsplit ws_general_query \"AMT_ManagementPresenceRemoteSAP\" ,\r\nwsbatchenum \"wsman_answer\" ws_general_query\r\nset i 0\r\nset arr wsman_answer.AMT_ManagementPresenceRemoteSAP.responses\r\nLength arr_len arr\r\nset mpsEpr1 \"*\"\r\nset mpsEpr2 \"*\"\r\n:loop-%%%~%%%\r\nset curAccessInfo arr.{i}.AccessInfo\r\nadd curAccessInfo curAccessInfo \":\"\r\nadd curAccessInfo curAccessInfo arr.{i}.Port\r\njump :MPS1_NO_MATCH curAccessInfo \"!=\" \"%%%AccessInfo1%%%\"\r\nset mpsEpr1 wsman_answer.AMT_ManagementPresenceRemoteSAP.responses.{i}.Name\r\nprint \"Found matching (primary) mps: {mpsEpr1}\"\r\njump :MPS2_NOTSET \"%%%AccessInfo2%%%\" \"=\" \"\"\r\n:MPS1_NO_MATCH\r\njump :MPS2_NO_MATCH curAccessInfo \"!=\" \"%%%AccessInfo2%%%\"\r\nset mpsEpr2 wsman_answer.AMT_ManagementPresenceRemoteSAP.responses.{i}.Name\r\nprint \"Found matching (secondary) mps: {mpsEpr2}\"\r\n:MPS2_NO_MATCH\r\nadd i i 1\r\njump :loop-%%%~%%% i \"<\" arr_len\r\n:MPS2_NOTSET\r\njump :MPS1_FOUND mpsEpr1 \"!=\" \"*\"\r\nprint \"ERROR: MPS server: %22%%%AccessInfo1%%%%22 could not be found, aborting operation...\"\r\njump :end-%%%~%%%\r\n:MPS1_FOUND\r\njump :MPS2_FOUND \"%%%AccessInfo2%%%\" \"=\" \"\"\r\njump :MPS2_FOUND mpsEpr2 \"!=\" \"*\"\r\nprint \"ERROR: MPS server: %22%%%AccessInfo2%%%%22 could not be found, aborting operation...\"\r\njump :end-%%%~%%%\r\n:MPS2_FOUND\r\nprint \"Setting policy...\"\r\njsonparse ws_args.MpServer \"%7B%7D\"\r\nset MpServer \"%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_ManagementPresenceRemoteSAP%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22Name%22%3E{mpsEpr1}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\njump :SKIP_ADD_MPS2 \"%%%AccessInfo2%%%\" \"=\" \"\"\r\nadd MpServer MpServer \"|%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_ManagementPresenceRemoteSAP%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22Name%22%3E{mpsEpr2}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\n:SKIP_ADD_MPS2\r\nsplit ws_args.MpServer MpServer \"|\"\r\n# *** Call AMT_RemoteAccessService.AddRemoteAccessPolicyRule with policy details. ***\r\nwsexec \"AMT_RemoteAccessService\" \"AddRemoteAccessPolicyRule\" ws_args selector\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Policy addedd successfully\"\r\njump :end-%%%~%%%\r\n:error-%%%~%%%\r\nprint \"WSMAN call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset PullRemoteAccess 1\r\nset mpsEpr1\r\nset mpsEpr2\r\nset i\r\nset curAccessInfo\r\nset arr_len\r\nset MpServer\r\nset arr\r\nset AMT_RemoteAccessService\r\nset wsman_result\r\nset wsman_result_str\r\nset ws_args\r\nset ws_general_query\r\nset wsman_answer",
+ "code": "# *** Prepare arguments for AMT_RemoteAccessService.AddRemoteAccessPolicyRule ***\r\njsonparse ws_args \"%7B%22Trigger%22:%220%22,%22TunnelLifeTime%22:%22%%%tLifeTime%%%%22%7D\"\r\n# *** Verify valid input ***\r\njump :VALID_INPUT \"%%%AccessInfo1%%%\" \"!=\" \"\"\r\nprint \"ERROR: Field %22AccessInfo1%22 must not be empty, aborting operation...\"\r\njump :end-%%%~%%%\r\n:VALID_INPUT\r\n# *** Set a EPR selector matching user input ***\r\nsplit ws_general_query \"AMT_ManagementPresenceRemoteSAP\" ,\r\nwsbatchenum \"wsman_answer\" ws_general_query\r\nset i 0\r\nset arr wsman_answer.AMT_ManagementPresenceRemoteSAP.responses\r\nLength arr_len arr\r\nset mpsEpr1 \"*\"\r\nset mpsEpr2 \"*\"\r\n:loop-%%%~%%%\r\nset curAccessInfo arr.{i}.AccessInfo\r\nadd curAccessInfo curAccessInfo \":\"\r\nadd curAccessInfo curAccessInfo arr.{i}.Port\r\njump :MPS1_NO_MATCH curAccessInfo \"!=\" \"%%%AccessInfo1%%%\"\r\nset mpsEpr1 wsman_answer.AMT_ManagementPresenceRemoteSAP.responses.{i}.Name\r\nprint \"Found matching (primary) mps: {mpsEpr1}\"\r\njump :MPS2_NOTSET \"%%%AccessInfo2%%%\" \"=\" \"\"\r\n:MPS1_NO_MATCH\r\njump :MPS2_NO_MATCH curAccessInfo \"!=\" \"%%%AccessInfo2%%%\"\r\nset mpsEpr2 wsman_answer.AMT_ManagementPresenceRemoteSAP.responses.{i}.Name\r\nprint \"Found matching (secondary) mps: {mpsEpr2}\"\r\n:MPS2_NO_MATCH\r\nadd i i 1\r\njump :loop-%%%~%%% i \"<\" arr_len\r\n:MPS2_NOTSET\r\njump :MPS1_FOUND mpsEpr1 \"!=\" \"*\"\r\nprint \"ERROR: MPS server: %22%%%AccessInfo1%%%%22 could not be found, aborting operation...\"\r\njump :end-%%%~%%%\r\n:MPS1_FOUND\r\njump :MPS2_FOUND \"%%%AccessInfo2%%%\" \"=\" \"\"\r\njump :MPS2_FOUND mpsEpr2 \"!=\" \"*\"\r\nprint \"ERROR: MPS server: %22%%%AccessInfo2%%%%22 could not be found, aborting operation...\"\r\njump :end-%%%~%%%\r\n:MPS2_FOUND\r\nprint \"Setting policy...\"\r\njsonparse ws_args.MpServer \"%7B%7D\"\r\nset MpServer \"%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_ManagementPresenceRemoteSAP%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22Name%22%3E{mpsEpr1}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\njump :SKIP_ADD_MPS2 \"%%%AccessInfo2%%%\" \"=\" \"\"\r\nadd MpServer MpServer \"|%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_ManagementPresenceRemoteSAP%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22Name%22%3E{mpsEpr2}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\n:SKIP_ADD_MPS2\r\nsplit ws_args.MpServer MpServer \"|\"\r\n# *** Call AMT_RemoteAccessService.AddRemoteAccessPolicyRule with policy details. ***\r\nwsexec \"AMT_RemoteAccessService\" \"AddRemoteAccessPolicyRule\" ws_args selector\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Policy added successfully\"\r\njump :end-%%%~%%%\r\n:error-%%%~%%%\r\nprint \"WSMAN call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset PullRemoteAccess 1\r\nset mpsEpr1\r\nset mpsEpr2\r\nset i\r\nset curAccessInfo\r\nset arr_len\r\nset MpServer\r\nset arr\r\nset AMT_RemoteAccessService\r\nset wsman_result\r\nset wsman_result_str\r\nset ws_args\r\nset ws_general_query\r\nset wsman_answer",
"vars": {
"AccessInfo1": {
"name": "MPS 1 Address",
@@ -728,7 +728,7 @@
"AMT-RemoteAccess-AddRemoteAccessPolicyRule2": {
"name": "Remote - Add Trigger (Periodic)",
"desc": "Set a remote access trigger policy, used to establish a secure tunnel between a management console and the Intel AMT platform.",
- "code": "# *** Verify valid input ***\r\nsplit period_arr \"%%%Period%%%\" \":\"\r\nlength period_arr_len period_arr\r\njump :INVALID_ARG_AccessInfo1 \"%%%AccessInfo1%%%\" \"=\" \"\"\r\njump :DailyPeriod \"%%%PeriodType%%%\" \"!=\" \"0\"\r\njump :INVALID_PeriodType \"%%%PeriodType%%%\" \"!=\" \"0\"\r\njump :INVALID_ARG_Period period_arr.0 \"<=\" \"0\"\r\njump :INVALID_ARG_Period period_arr.0 \">\" \"4294967295\"\r\nIntToStr extendedData \"0\"\r\nIntToStr bPeriod period_arr.0\r\nadd extendedData extendedData bPeriod\r\njump :SET_PERIOD\r\n:DailyPeriod\r\njump :INVALID_PeriodType period_arr_len \"!=\" \"2\"\r\njump :INVALID_ARG_PeriodDaily period_arr.0 \"<=\" \"0\"\r\njump :INVALID_ARG_PeriodDaily period_arr.0 \">\" \"23\"\r\njump :INVALID_ARG_PeriodDaily period_arr.1 \">\" \"59\"\r\njump :INVALID_ARG_PeriodDaily period_arr.1 \"<=\" \"0\"\r\nIntToStr extendedData \"1\"\r\nIntToStr bPeriodHour period_arr.0\r\nIntToStr bPeriodMinute period_arr.1\r\nadd extendedData extendedData bPeriodHour\r\nadd extendedData extendedData bPeriodMinute\r\njump :SET_PERIOD\r\n:INVALID_PeriodType\r\nprint \"ERROR: The period type and value must correspond, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_PeriodDaily\r\nprint \"ERROR: Field %22Period%22 must be a value HH:MM 0<=HH<24 && 0<=MM<60, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_AccessInfo1\r\nprint \"ERROR: Field %22AccessInfo1%22 must not be empty, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_Period\r\nprint \"ERROR: Field %22Period%22 must be a value 0<=t\" \"4294967295\"\r\nIntToStr extendedData \"0\"\r\nIntToStr bPeriod period_arr.0\r\nadd extendedData extendedData bPeriod\r\njump :SET_PERIOD\r\n:DailyPeriod\r\njump :INVALID_PeriodType period_arr_len \"!=\" \"2\"\r\njump :INVALID_ARG_PeriodDaily period_arr.0 \"<=\" \"0\"\r\njump :INVALID_ARG_PeriodDaily period_arr.0 \">\" \"23\"\r\njump :INVALID_ARG_PeriodDaily period_arr.1 \">\" \"59\"\r\njump :INVALID_ARG_PeriodDaily period_arr.1 \"<=\" \"0\"\r\nIntToStr extendedData \"1\"\r\nIntToStr bPeriodHour period_arr.0\r\nIntToStr bPeriodMinute period_arr.1\r\nadd extendedData extendedData bPeriodHour\r\nadd extendedData extendedData bPeriodMinute\r\njump :SET_PERIOD\r\n:INVALID_PeriodType\r\nprint \"ERROR: The period type and value must correspond, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_PeriodDaily\r\nprint \"ERROR: Field %22Period%22 must be a value HH:MM 0<=HH<24 && 0<=MM<60, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_AccessInfo1\r\nprint \"ERROR: Field %22AccessInfo1%22 must not be empty, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_Period\r\nprint \"ERROR: Field %22Period%22 must be a value 0<=t\" \"4294967295\"\nIntToStr extendedData \"0\"\nIntToStr bPeriod period_arr.0\nadd extendedData extendedData bPeriod\njump :SET_PERIOD\n:DailyPeriod\njump :INVALID_PeriodType period_arr_len \"!=\" \"2\"\njump :INVALID_ARG_PeriodDaily period_arr.0 \"<=\" \"0\"\njump :INVALID_ARG_PeriodDaily period_arr.0 \">\" \"23\"\njump :INVALID_ARG_PeriodDaily period_arr.1 \">\" \"59\"\njump :INVALID_ARG_PeriodDaily period_arr.1 \"<=\" \"0\"\nIntToStr extendedData \"1\"\nIntToStr bPeriodHour period_arr.0\nIntToStr bPeriodMinute period_arr.1\nadd extendedData extendedData bPeriodHour\nadd extendedData extendedData bPeriodMinute\njump :SET_PERIOD\n:INVALID_PeriodType\nprint \"ERROR: The period type and value must correspond, aborting operation...\"\njump :end-4\n:INVALID_ARG_PeriodDaily\nprint \"ERROR: Field %22Period%22 must be a value HH:MM 0<=HH<24 && 0<=MM<60, aborting operation...\"\njump :end-4\n:INVALID_ARG_AccessInfo1\nprint \"ERROR: Field %22AccessInfo1%22 must not be empty, aborting operation...\"\njump :end-4\n:INVALID_ARG_Period\nprint \"ERROR: Field %22Period%22 must be a value 0<=t\" \"5\"\n:SET_IPV6_PREFIX-6\njump :IPv6StringsDefined-6 envDetectionInstance.DetectionIPv6LocalPrefixes \"!=\"\njump :EMPTY_IPV6PRFX \"\" \"=\" \"\" \nset envDetectionInstance.DetectionIPv6LocalPrefixes arrDetectionIPv6LocalPrefixes\njump :CALL_WSPUT-6\n:IPv6StringsDefined-6\nadd arrDetectionIPv6LocalPrefixes \",\" arrDetectionIPv6LocalPrefixes\nadd envDetectionInstance.DetectionIPv6LocalPrefixes envDetectionInstance.DetectionIPv6LocalPrefixes arrDetectionIPv6LocalPrefixes\nmaketoarray envDetectionInstance.DetectionIPv6LocalPrefixes envDetectionInstance.DetectionIPv6LocalPrefixes\n:EMPTY_IPV6PRFX\nlength arrDetectionIPv6LocalPrefixesLen envDetectionInstance.DetectionIPv6LocalPrefixes\njump :INVALID_LEN_DetectionIPv6LocalPrefixes-6 arrDetectionIPv6LocalPrefixesLen \">\" \"5\"\n:CALL_WSPUT-6\nwsput \"AMT_EnvironmentDetectionSettingData\" envDetectionInstance\njump :error-6 wsman_result \"!=\" 200\nprint \"Environment Detection set successfully\"\njump :end-6\n:error-6\nprint \"ERROR: WSMAN call failed: {wsman_result_str}\"\njump :end-6\n:INVALID_LEN_DetectionStrings-6\nprint \"ERROR: detection strings count must be at most 5\"\njump :end-6\n:INVALID_LEN_DetectionIPv6LocalPrefixes-6\nprint \"ERROR: IPv6 prefixes count must be at most 5\"\njump :end-6\n:EMPTY_DETECTIONSTR-6\nprint \"ERROR: %22Detection Strings%22 field cannot be empty, aborting operation...\"\n:end-6\n set PullRemoteAccess \"1\"\nset AMT_EnvironmentDetectionSettingData\nset arrDetectionIPv6LocalPrefixes\nset arrDetectionStrings\nset envDetectionInstance\nset ws_general_query\nset wsman_answer \nset wsman_result\n\n##### Ending Block #####\n:end\njump :SkipPullSystemStatus PullSystemStatus \"!=\" 1\nPullSystemStatus\n:SkipPullSystemStatus\njump :SkipPullEventLog PullEventLog \"!=\" 1\nPullEventLog\n:SkipPullEventLog\njump :SkipPullAuditLog PullAuditLog \"!=\" 1\nPullAuditLog\n:SkipPullAuditLog\njump :SkipPullCertificates PullCertificates \"!=\" 1\nPullCertificates\n:SkipPullCertificates\njump :SkipPullWatchdog PullWatchdog \"!=\" 1\nPullWatchdog\n:SkipPullWatchdog\njump :SkipPullSystemDefense PullSystemDefense \"!=\" 1\nPullSystemDefense\n:SkipPullSystemDefense\njump :SkipPullHardware PullHardware \"!=\" 1\nPullHardware\n:SkipPullHardware\njump :SkipPullUserInfo PullUserInfo \"!=\" 1\nPullUserInfo\n:SkipPullUserInfo\njump :SkipPullRemoteAccess PullRemoteAccess \"!=\" 1\nPullRemoteAccess\n:SkipPullRemoteAccess\nprint \"Script Completed\"\nHighlightBlock\n",
+ "scriptText": "##### Starting Block #####\nprint \"Script Started\"\n\n##### Block: Remote - Remove Trigger #####\nHighlightBlock __t 0\njsonparse hMapPolicies \"%7B%220%22:%20%22User%20Initiated%22,%09%221%22:%20%22Alert%22,%20%222%22:%20%22Periodic%22%7D\"\nsplit policiesArr \"0,1,2\" \",\"\nlength policiesArrLen policiesArr\nset i 0\n:loop-0\nset curPolicy hMapPolicies.{policiesArr.{i}}\njsonparse ws_args \"%7B%22PolicyRuleName%22:%22{curPolicy}%22%7D\"\nwsdelete \"AMT_RemoteAccessPolicyRule\" ws_args\nadd i i 1\njump :loop-0 i \"<\" policiesArrLen\nprint \"Policies removed successfully\"\nset PullRemoteAccess 1\nset AMT_RemoteAccessPolicyRule\nset curPolicy\nset hMapPolicies\nset i\nset policiesArr\nset policiesArrLen\nset ws_args\nset wsman_result\n\n##### Block: Remote - Remove All MPS #####\nHighlightBlock __t 1\nsplit ws_general_query \"AMT_ManagementPresenceRemoteSAP\" ,\nwsbatchenum \"wsman_answer\" ws_general_query\nset i 0\nset arr wsman_answer.AMT_ManagementPresenceRemoteSAP.responses\nLength arr_len arrjump :end-%%%~%%% arr_len \"=\" 0\n\n:loop-1\nset instanceName wsman_answer.AMT_ManagementPresenceRemoteSAP.responses.{i}.Name\nset selector \"%3Cw:SelectorSet%3E%3Cw:Selector%20Name=%22Name%22%3E{instanceName}%3C/w:Selector%3E%3C/w:SelectorSet%3E\"\nwsdelete \"AMT_ManagementPresenceRemoteSAP\" selector\nadd i i 1\njump :loop-1 i \"<\" arr_len\n:end-1\nset AMT_ManagementPresenceRemoteSAP\nset arr\nset i\nset instanceName\nset selector\nset ws_general_query\nset wsman_answer\nset wsman_result\nset wsman_result_str\nset arr_len\nset PullRemoteAccess 1\n\n\n##### Block: Security - Add Certificate #####\nHighlightBlock __t 2\njsonparse wsargs \"%7B%7D\"\nset wsargs.CertificateBlob \"MIIDKDCCAhCgAwIBAgIDBVZ2MA0GCSqGSIb3DQEBCwUAMEQxHzAdBgNVBAMTFk1lc2hDZW50cmFsUm9vdC1mYWM4NGUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKEwtNZXNoQ2VudHJhbDAeFw0xNTA3MTkxODE3NTVaFw00NjA3MTkxODE3NTVaMEQxHzAdBgNVBAMTFk1lc2hDZW50cmFsUm9vdC1mYWM4NGUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKEwtNZXNoQ2VudHJhbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJyN61TmYjDS8PJQGQ8OB2V0ccJ3kKZ4LkrwPhx+qRpZBqQ1MpUfjhjjMngjiEwVu04t729xekRjamwU6sorNZbp2l1OZNA2TIs5WCg1llXyxTkRqtfim83rwXQNu+6ivz5dAux46zKFGOcVdtMlyKEjZj16zuAQ/2xg6qgyQFYwwArq9Cy5qzWMA5cjqugqA106adkOQRCatdWHYxaMXRJaBJuKQnp1HGPefyITK1UEshEZYqmBKnbD9NwxqsC+Sp/diRWrGIEKkx1GsrepQcEXIzIMSdq7+LApwhl84pgNkzKJXHTPHqQaQSejPj3FprsQh2bgsbRJUwBTWIBru/MCAwEAAaMjMCEwDAYDVR0TBAUwAwEB/zARBglghkgBhvhCAQEEBAMCAAUwDQYJKoZIhvcNAQELBQADggEBAA+eOSMF7b82S3faGV7jKAFzkRwOUoZnCVFV6eGBK1iyPC/xrIbWncSc59DjnHMyXWCmc0OVknTgfeyqIS2OD2DkW1zU1gNuQksDbETzV6Db3ExQyv1BXCasLPop2CkC3WCwLFa2bXG7AEheFFfqwZz1mRwPnr8AiHS2zG6RjepZts+zQvVhTftiW1aFmYVHDWlhHFIVJ4xw2KHPfuufSxyOO7YOosjzGHUYiEP1zOQKmwm1Rcz+QZRmj/O8PfQsiKnUHpHAhx0GTqwgoL7hi2bkbC9IX04pDX8Vd5uABDLfU3+S3vjBvUe+XYSRknDnFiivOtAY6fFwLqu+OnbwiIA=\"\njump :certroot 1 \"=\" 1\nprint \"Adding certificate...\"\nwsexec \"AMT_PublicKeyManagementService\" \"AddCertificate\" wsargs\njump :certdone\n:certroot\nprint \"Adding root certificate...\"\nwsexec \"AMT_PublicKeyManagementService\" \"AddTrustedRootCertificate\" wsargs\n:certdone\nset wsargs\nset AMT_PublicKeyManagementService\nset PullCertificates 1\n\n\n##### Block: Remote - Add MPS FQDN/User #####\nHighlightBlock __t 3\n# Set method parameters\njsonparse wsargs \"%7B%22AccessInfo%22:%22devbox.mesh.meshcentral.com%22,%22InfoFormat%22:201,%22Port%22:4433,%22AuthMethod%22:2,%22Username%22:%22B6367516FC563665%22,%22Password%22:%22P@ssw0rd%22%7D\"\n# Execute call to AddMpServer\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\njump :error-3 wsman_result \"!=\" 200\nprint \"Management Presence Server (MPS) successfully added\"\nset PullRemoteAccess 1\njump :end-3\n:error-3\nprint \"Call failed: {wsman_result_str}\"\n:end-3\nset AMT_RemoteAccessService\nset certHandle\nset curSubject\nset i\nset pos\nset ws_general_query\nset wsargs\nset wsman_answer\nset wsman_result\nset wsman_result_str\nset certInstanceId\nset wsman_ans_length\n\n##### Block: Remote - Add Trigger (Periodic) #####\nHighlightBlock __t 4\n# *** Verify valid input ***\nsplit period_arr \"10\" \":\"\nlength period_arr_len period_arr\njump :INVALID_ARG_AccessInfo1 \"devbox.mesh.meshcentral.com:4433\" \"=\" \"\"\njump :DailyPeriod \"0\" \"!=\" \"0\"\njump :INVALID_PeriodType \"0\" \"!=\" \"0\"\njump :INVALID_ARG_Period period_arr.0 \"<=\" \"0\"\njump :INVALID_ARG_Period period_arr.0 \">\" \"4294967295\"\nIntToStr extendedData \"0\"\nIntToStr bPeriod period_arr.0\nadd extendedData extendedData bPeriod\njump :SET_PERIOD\n:DailyPeriod\njump :INVALID_PeriodType period_arr_len \"!=\" \"2\"\njump :INVALID_ARG_PeriodDaily period_arr.0 \"<=\" \"0\"\njump :INVALID_ARG_PeriodDaily period_arr.0 \">\" \"23\"\njump :INVALID_ARG_PeriodDaily period_arr.1 \">\" \"59\"\njump :INVALID_ARG_PeriodDaily period_arr.1 \"<=\" \"0\"\nIntToStr extendedData \"1\"\nIntToStr bPeriodHour period_arr.0\nIntToStr bPeriodMinute period_arr.1\nadd extendedData extendedData bPeriodHour\nadd extendedData extendedData bPeriodMinute\njump :SET_PERIOD\n:INVALID_PeriodType\nprint \"ERROR: The period type and value must correspond, aborting operation...\"\njump :end-4\n:INVALID_ARG_PeriodDaily\nprint \"ERROR: Field %22Period%22 must be a value HH:MM 0<=HH<24 && 0<=MM<60, aborting operation...\"\njump :end-4\n:INVALID_ARG_AccessInfo1\nprint \"ERROR: Field %22AccessInfo1%22 must not be empty, aborting operation...\"\njump :end-4\n:INVALID_ARG_Period\nprint \"ERROR: Field %22Period%22 must be a value 0<=t\" \"5\"\n:SET_IPV6_PREFIX-6\njump :IPv6StringsDefined-6 envDetectionInstance.DetectionIPv6LocalPrefixes \"!=\"\njump :EMPTY_IPV6PRFX \"\" \"=\" \"\" \nset envDetectionInstance.DetectionIPv6LocalPrefixes arrDetectionIPv6LocalPrefixes\njump :CALL_WSPUT-6\n:IPv6StringsDefined-6\nadd arrDetectionIPv6LocalPrefixes \",\" arrDetectionIPv6LocalPrefixes\nadd envDetectionInstance.DetectionIPv6LocalPrefixes envDetectionInstance.DetectionIPv6LocalPrefixes arrDetectionIPv6LocalPrefixes\nmaketoarray envDetectionInstance.DetectionIPv6LocalPrefixes envDetectionInstance.DetectionIPv6LocalPrefixes\n:EMPTY_IPV6PRFX\nlength arrDetectionIPv6LocalPrefixesLen envDetectionInstance.DetectionIPv6LocalPrefixes\njump :INVALID_LEN_DetectionIPv6LocalPrefixes-6 arrDetectionIPv6LocalPrefixesLen \">\" \"5\"\n:CALL_WSPUT-6\nwsput \"AMT_EnvironmentDetectionSettingData\" envDetectionInstance\njump :error-6 wsman_result \"!=\" 200\nprint \"Environment Detection set successfully\"\njump :end-6\n:error-6\nprint \"ERROR: WSMAN call failed: {wsman_result_str}\"\njump :end-6\n:INVALID_LEN_DetectionStrings-6\nprint \"ERROR: detection strings count must be at most 5\"\njump :end-6\n:INVALID_LEN_DetectionIPv6LocalPrefixes-6\nprint \"ERROR: IPv6 prefixes count must be at most 5\"\njump :end-6\n:EMPTY_DETECTIONSTR-6\nprint \"ERROR: %22Detection Strings%22 field cannot be empty, aborting operation...\"\n:end-6\n set PullRemoteAccess \"1\"\nset AMT_EnvironmentDetectionSettingData\nset arrDetectionIPv6LocalPrefixes\nset arrDetectionStrings\nset envDetectionInstance\nset ws_general_query\nset wsman_answer \nset wsman_result\n\n##### Ending Block #####\n:end\njump :SkipPullSystemStatus PullSystemStatus \"!=\" 1\nPullSystemStatus\n:SkipPullSystemStatus\njump :SkipPullEventLog PullEventLog \"!=\" 1\nPullEventLog\n:SkipPullEventLog\njump :SkipPullAuditLog PullAuditLog \"!=\" 1\nPullAuditLog\n:SkipPullAuditLog\njump :SkipPullCertificates PullCertificates \"!=\" 1\nPullCertificates\n:SkipPullCertificates\njump :SkipPullWatchdog PullWatchdog \"!=\" 1\nPullWatchdog\n:SkipPullWatchdog\njump :SkipPullSystemDefense PullSystemDefense \"!=\" 1\nPullSystemDefense\n:SkipPullSystemDefense\njump :SkipPullHardware PullHardware \"!=\" 1\nPullHardware\n:SkipPullHardware\njump :SkipPullUserInfo PullUserInfo \"!=\" 1\nPullUserInfo\n:SkipPullUserInfo\njump :SkipPullRemoteAccess PullRemoteAccess \"!=\" 1\nPullRemoteAccess\n:SkipPullRemoteAccess\nprint \"Script Completed\"\nHighlightBlock\n",
"mescript": "JH0pRQABAAMAFwABAA8BU2NyaXB0IFN0YXJ0ZWROKQATAAIABABfX3QABQIAAAAAAAsAdgACAA0AaE1hcFBvbGljaWVzAF8BJTdCJTIyMCUyMjolMjAlMjJVc2VyJTIwSW5pdGlhdGVkJTIyLCUwOSUyMjElMjI6JTIwJTIyQWxlcnQlMjIsJTIwJTIyMiUyMjolMjAlMjJQZXJpb2RpYyUyMiU3RAAIACAAAwAMAHBvbGljaWVzQXJyAAYBMCwxLDIAAgEsAAoAJQACAA8AcG9saWNpZXNBcnJMZW4ADABwb2xpY2llc0FycgACABEAAgACAGkABQIAAAAAAAIAMwACAAoAY3VyUG9saWN5AB8AaE1hcFBvbGljaWVzLntwb2xpY2llc0Fyci57aX19AAsAPwACAAgAd3NfYXJncwAtASU3QiUyMlBvbGljeVJ1bGVOYW1lJTIyOiUyMntjdXJQb2xpY3l9JTIyJTdEABMALQACABsBQU1UX1JlbW90ZUFjY2Vzc1BvbGljeVJ1bGUACAB3c19hcmdzAA0AFQADAAIAaQACAGkABQIAAAABAAEAJgAEAAUDAAAA9gACAGkAAgE8AA8AcG9saWNpZXNBcnJMZW4AAwAsAAEAJAFJTkZPOiBQb2xpY2llcyByZW1vdmVkIHN1Y2Nlc3NmdWxseQACACAAAgARAFB1bGxSZW1vdGVBY2Nlc3MABQIAAAABAAIAIwABABsAQU1UX1JlbW90ZUFjY2Vzc1BvbGljeVJ1bGUAAgASAAEACgBjdXJQb2xpY3kAAgAVAAEADQBoTWFwUG9saWNpZXMAAgAKAAEAAgBpAAIAFAABAAwAcG9saWNpZXNBcnIAAgAXAAEADwBwb2xpY2llc0FyckxlbgACABAAAQAIAHdzX2FyZ3MAAgAVAAEADQB3c21hbl9yZXN1bHROKQATAAIABABfX3QABQIAAAABAAgAPwADABEAd3NfZ2VuZXJhbF9xdWVyeQAgAUFNVF9NYW5hZ2VtZW50UHJlc2VuY2VSZW1vdGVTQVAAAgAsABAAKAACAA0Bd3NtYW5fYW5zd2VyABEAd3NfZ2VuZXJhbF9xdWVyeQACABEAAgACAGkABQIAAAAAAAIARQACAAQAYXJyADcAd3NtYW5fYW5zd2VyLkFNVF9NYW5hZ2VtZW50UHJlc2VuY2VSZW1vdGVTQVAucmVzcG9uc2VzAAoAFgACAAgAYXJyX2xlbgAEAGFycgACAFcAAgANAGluc3RhbmNlTmFtZQBAAHdzbWFuX2Fuc3dlci5BTVRfTWFuYWdlbWVudFByZXNlbmNlUmVtb3RlU0FQLnJlc3BvbnNlcy57aX0uTmFtZQACAHwAAgAJAHNlbGVjdG9yAGkBJTNDdzpTZWxlY3RvclNldCUzRSUzQ3c6U2VsZWN0b3IlMjBOYW1lPSUyMk5hbWUlMjIlM0V7aW5zdGFuY2VOYW1lfSUzQy93OlNlbGVjdG9yJTNFJTNDL3c6U2VsZWN0b3JTZXQlM0UAEwAzAAIAIAFBTVRfTWFuYWdlbWVudFByZXNlbmNlUmVtb3RlU0FQAAkAc2VsZWN0b3IADQAVAAMAAgBpAAIAaQAFAgAAAAEAAQAfAAQABQMAAAOmAAIAaQACATwACABhcnJfbGVuAAIAKAABACAAQU1UX01hbmFnZW1lbnRQcmVzZW5jZVJlbW90ZVNBUAACAAwAAQAEAGFycgACAAoAAQACAGkAAgAVAAEADQBpbnN0YW5jZU5hbWUAAgARAAEACQBzZWxlY3RvcgACABkAAQARAHdzX2dlbmVyYWxfcXVlcnkAAgAVAAEADQB3c21hbl9hbnN3ZXIAAgAVAAEADQB3c21hbl9yZXN1bHQAAgAZAAEAEQB3c21hbl9yZXN1bHRfc3RyAAIAEAABAAgAYXJyX2xlbgACACAAAgARAFB1bGxSZW1vdGVBY2Nlc3MABQIAAAABTikAEwACAAQAX190AAUCAAAAAgALABgAAgAHAHdzYXJncwAHASU3QiU3RAACBF4AAgAXAHdzYXJncy5DZXJ0aWZpY2F0ZUJsb2IEPQFNSUlES0RDQ0FoQ2dBd0lCQWdJREJWWjJNQTBHQ1NxR1NJYjNEUUVCQ3dVQU1FUXhIekFkQmdOVkJBTVRGazFsYzJoRFpXNTBjbUZzVW05dmRDMW1ZV000TkdVeEN6QUpCZ05WQkFZVEFsVlRNUlF3RWdZRFZRUUtFd3ROWlhOb1EyVnVkSEpoYkRBZUZ3MHhOVEEzTVRreE9ERTNOVFZhRncwME5qQTNNVGt4T0RFM05UVmFNRVF4SHpBZEJnTlZCQU1URmsxbGMyaERaVzUwY21Gc1VtOXZkQzFtWVdNNE5HVXhDekFKQmdOVkJBWVRBbFZUTVJRd0VnWURWUVFLRXd0TlpYTm9RMlZ1ZEhKaGJEQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUp5TjYxVG1ZakRTOFBKUUdROE9CMlYwY2NKM2tLWjRMa3J3UGh4K3FScFpCcVExTXBVZmpoampNbmdqaUV3VnUwNHQ3Mjl4ZWtSamFtd1U2c29yTlpicDJsMU9aTkEyVElzNVdDZzFsbFh5eFRrUnF0ZmltODNyd1hRTnUrNml2ejVkQXV4NDZ6S0ZHT2NWZHRNbHlLRWpaajE2enVBUS8yeGc2cWd5UUZZd3dBcnE5Q3k1cXpXTUE1Y2pxdWdxQTEwNmFka09RUkNhdGRXSFl4YU1YUkphQkp1S1FucDFIR1BlZnlJVEsxVUVzaEVaWXFtQktuYkQ5Tnd4cXNDK1NwL2RpUldyR0lFS2t4MUdzcmVwUWNFWEl6SU1TZHE3K0xBcHdobDg0cGdOa3pLSlhIVFBIcVFhUVNlalBqM0ZwcnNRaDJiZ3NiUkpVd0JUV0lCcnUvTUNBd0VBQWFNak1DRXdEQVlEVlIwVEJBVXdBd0VCL3pBUkJnbGdoa2dCaHZoQ0FRRUVCQU1DQUFVd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFBK2VPU01GN2I4MlMzZmFHVjdqS0FGemtSd09Vb1puQ1ZGVjZlR0JLMWl5UEMveHJJYlduY1NjNTlEam5ITXlYV0NtYzBPVmtuVGdmZXlxSVMyT0QyRGtXMXpVMWdOdVFrc0RiRVR6VjZEYjNFeFF5djFCWENhc0xQb3AyQ2tDM1dDd0xGYTJiWEc3QUVoZUZGZnF3WnoxbVJ3UG5yOEFpSFMyekc2UmplcFp0cyt6UXZWaFRmdGlXMWFGbVlWSERXbGhIRklWSjR4dzJLSFBmdXVmU3h5T083WU9vc2p6R0hVWWlFUDF6T1FLbXdtMVJjeitRWlJtai9POFBmUXNpS25VSHBIQWh4MEdUcXdnb0w3aGkyYmtiQzlJWDA0cERYOFZkNXVBQkRMZlUzK1MzdmpCdlVlK1hZU1JrbkRuRmlpdk90QVk2ZkZ3THF1K09uYndpSUE9AAEAHwAEAAUDAAAK5AAFAgAAAAEAAgE9AAUCAAAAAQADAB4AAQAWAUFkZGluZyBjZXJ0aWZpY2F0ZS4uLgAUAEEAAwAfAUFNVF9QdWJsaWNLZXlNYW5hZ2VtZW50U2VydmljZQAPAUFkZENlcnRpZmljYXRlAAcAd3NhcmdzAAEADQABAAUDAAALUwADACMAAQAbAUFkZGluZyByb290IGNlcnRpZmljYXRlLi4uABQATAADAB8BQU1UX1B1YmxpY0tleU1hbmFnZW1lbnRTZXJ2aWNlABoBQWRkVHJ1c3RlZFJvb3RDZXJ0aWZpY2F0ZQAHAHdzYXJncwACAA8AAQAHAHdzYXJncwACACcAAQAfAEFNVF9QdWJsaWNLZXlNYW5hZ2VtZW50U2VydmljZQACACAAAgARAFB1bGxDZXJ0aWZpY2F0ZXMABQIAAAABTikAEwACAAQAX190AAUCAAAAAwALAMYAAgAHAHdzYXJncwC1ASU3QiUyMkFjY2Vzc0luZm8lMjI6JTIyZGV2Ym94Lm1lc2gubWVzaGNlbnRyYWwuY29tJTIyLCUyMkluZm9Gb3JtYXQlMjI6MjAxLCUyMlBvcnQlMjI6NDQzMywlMjJBdXRoTWV0aG9kJTIyOjIsJTIyVXNlcm5hbWUlMjI6JTIyQjYzNjc1MTZGQzU2MzY2NSUyMiwlMjJQYXNzd29yZCUyMjolMjJQQHNzdzByZCUyMiU3RAAUADoABAAYAUFNVF9SZW1vdGVBY2Nlc3NTZXJ2aWNlAAwBQWRkTXBTZXJ2ZXIABwB3c2FyZ3MAAQEAAQAoAAQABQMAAA1sAA0Ad3NtYW5fcmVzdWx0AAMBIT0ABQIAAADIAAMAWwABAFMBTWFuYWdlbWVudCBQcmVzY2VuY2UgU2VydmVyIChNUFMpIHN1Y2Nlc3NmdWxseSBhZGRlZCB0byB0aGUgSW50ZWwoUikgQU1UIFN1YnN5c3RlbQACACAAAgARAFB1bGxSZW1vdGVBY2Nlc3MABQIAAAABAAEADQABAAUDAAANlAADACgAAQAgAUNhbGwgZmFpbGVkOiB7d3NtYW5fcmVzdWx0X3N0cn0AAgAgAAEAGABBTVRfUmVtb3RlQWNjZXNzU2VydmljZQACABMAAQALAGNlcnRIYW5kbGUAAgATAAEACwBjdXJTdWJqZWN0AAIACgABAAIAaQACAAwAAQAEAHBvcwACABkAAQARAHdzX2dlbmVyYWxfcXVlcnkAAgAPAAEABwB3c2FyZ3MAAgAVAAEADQB3c21hbl9hbnN3ZXIAAgAVAAEADQB3c21hbl9yZXN1bHQAAgAZAAEAEQB3c21hbl9yZXN1bHRfc3RyAAIAFwABAA8AY2VydEluc3RhbmNlSWQAAgAZAAEAEQB3c21hbl9hbnNfbGVuZ3RoTikAEwACAAQAX190AAUCAAAABAAIABwAAwALAHBlcmlvZF9hcnIAAwExMAACAToACgAkAAIADwBwZXJpb2RfYXJyX2xlbgALAHBlcmlvZF9hcnIAAQA3AAQABQMAABJrACEBZGV2Ym94Lm1lc2gubWVzaGNlbnRyYWwuY29tOjQ0MzMAAgE9AAEBAAEAGgAEAAUDAAAQDgACATAAAwEhPQACATAAAQAaAAQABQMAABGdAAIBMAADASE9AAIBMAABACUABAAFAwAAEsgADQBwZXJpb2RfYXJyLjAAAwE8PQACATAAAQAtAAQABQMAABLIAA0AcGVyaW9kX2Fyci4wAAIBPgALATQyOTQ5NjcyOTUnIQAZAAIADQBleHRlbmRlZERhdGEAAgEwJyEAHwACAAgAYlBlcmlvZAANAHBlcmlvZF9hcnIuMAANAC4AAwANAGV4dGVuZGVkRGF0YQANAGV4dGVuZGVkRGF0YQAIAGJQZXJpb2QAAQANAAEABQMAABMrAAEAJwAEAAUDAAARnQAPAHBlcmlvZF9hcnJfbGVuAAMBIT0AAgEyAAEAJQAEAAUDAAAR+gANAHBlcmlvZF9hcnIuMAADATw9AAIBMAABACUABAAFAwAAEfoADQBwZXJpb2RfYXJyLjAAAgE+AAMBMjMAAQAlAAQABQMAABH6AA0AcGVyaW9kX2Fyci4xAAIBPgADATU5AAEAJQAEAAUDAAAR+gANAHBlcmlvZF9hcnIuMQADATw9AAIBMCchABkAAgANAGV4dGVuZGVkRGF0YQACATEnIQAjAAIADABiUGVyaW9kSG91cgANAHBlcmlvZF9hcnIuMCchACUAAgAOAGJQZXJpb2RNaW51dGUADQBwZXJpb2RfYXJyLjEADQAyAAMADQBleHRlbmRlZERhdGEADQBleHRlbmRlZERhdGEADABiUGVyaW9kSG91cgANADQAAwANAGV4dGVuZGVkRGF0YQANAGV4dGVuZGVkRGF0YQAOAGJQZXJpb2RNaW51dGUAAQANAAEABQMAABMrAAMAUAABAEgBRVJST1I6IFRoZSBwZXJpb2QgdHlwZSBhbmQgdmFsdWUgbXVzdCBjb3JyZXNwb25kLCBhYm9ydGluZyBvcGVyYXRpb24uLi4AAQANAAEABQMAAB5hAAMAZAABAFwBRVJST1I6IEZpZWxkICUyMlBlcmlvZCUyMiBtdXN0IGJlIGEgdmFsdWUgSEg6TU0gMDw9SEg8MjQgJiYgMDw9TU08NjAsIGFib3J0aW5nIG9wZXJhdGlvbi4uLgABAA0AAQAFAwAAHmEAAwBQAAEASAFFUlJPUjogRmllbGQgJTIyQWNjZXNzSW5mbzElMjIgbXVzdCBub3QgYmUgZW1wdHksIGFib3J0aW5nIG9wZXJhdGlvbi4uLgABAA0AAQAFAwAAHmEAAwBWAAEATgFFUlJPUjogRmllbGQgJTIyUGVyaW9kJTIyIG11c3QgYmUgYSB2YWx1ZSAwPD10PE1BWF9JTlQsIGFib3J0aW5nIG9wZXJhdGlvbi4uLgABAA0AAQAFAwAAHmEACwBLAAIACAB3c19hcmdzADkBJTdCJTIyVHJpZ2dlciUyMjolMjIyJTIyLCUyMlR1bm5lbExpZmVUaW1lJTIyOiUyMjAlMjIlN0QnFAAkAAIADQBleHRlbmRlZERhdGEADQBleHRlbmRlZERhdGEAAgAsAAIAFQB3c19hcmdzLkV4dGVuZGVkRGF0YQANAGV4dGVuZGVkRGF0YQAIAD8AAwARAHdzX2dlbmVyYWxfcXVlcnkAIAFBTVRfTWFuYWdlbWVudFByZXNlbmNlUmVtb3RlU0FQAAIALAAQACgAAgANAXdzbWFuX2Fuc3dlcgARAHdzX2dlbmVyYWxfcXVlcnkAAgARAAIAAgBpAAUCAAAAAAACAEUAAgAEAGFycgA3AHdzbWFuX2Fuc3dlci5BTVRfTWFuYWdlbWVudFByZXNlbmNlUmVtb3RlU0FQLnJlc3BvbnNlcwAKABYAAgAIAGFycl9sZW4ABABhcnIAAgAUAAIACABtcHNFcHIxAAIBKgACABQAAgAIAG1wc0VwcjIAAgEqAAIAKwACAA4AY3VyQWNjZXNzSW5mbwATAGFyci57aX0uQWNjZXNzSW5mbwANACoAAwAOAGN1ckFjY2Vzc0luZm8ADgBjdXJBY2Nlc3NJbmZvAAIBOgANADUAAwAOAGN1ckFjY2Vzc0luZm8ADgBjdXJBY2Nlc3NJbmZvAA0AYXJyLntpfS5Qb3J0AAEARQAEAAUDAAAWLwAOAGN1ckFjY2Vzc0luZm8AAwEhPQAhAWRldmJveC5tZXNoLm1lc2hjZW50cmFsLmNvbTo0NDMzAAIAUgACAAgAbXBzRXByMQBAAHdzbWFuX2Fuc3dlci5BTVRfTWFuYWdlbWVudFByZXNlbmNlUmVtb3RlU0FQLnJlc3BvbnNlcy57aX0uTmFtZQADADYAAQAuAUlORk86IEZvdW5kIG1hdGNoaW5nIChwcmltYXJ5KSBtcHM6IHttcHNFcHIxfQABABcABAAFAwAAFxIAAQEAAgE9AAEBAAEAJQAEAAUDAAAW3gAOAGN1ckFjY2Vzc0luZm8AAwEhPQABAQACAFIAAgAIAG1wc0VwcjIAQAB3c21hbl9hbnN3ZXIuQU1UX01hbmFnZW1lbnRQcmVzZW5jZVJlbW90ZVNBUC5yZXNwb25zZXMue2l9Lk5hbWUAAwA4AAEAMAFJTkZPOiBGb3VuZCBtYXRjaGluZyAoc2Vjb25kYXJ5KSBtcHM6IHttcHNFcHIyfQANABUAAwACAGkAAgBpAAUCAAAAAQABAB8ABAAFAwAAFMEAAgBpAAIBPAAIAGFycl9sZW4AAQAgAAQABQMAABerAAgAbXBzRXByMQADASE9AAIBKgADAGwAAQBkAUVSUk9SOiBNUFMgc2VydmVyOiAlMjJkZXZib3gubWVzaC5tZXNoY2VudHJhbC5jb206NDQzMyUyMiBjb3VsZCBub3QgYmUgZm91bmQsIGFib3J0aW5nIG9wZXJhdGlvbi4uLgABAA0AAQAFAwAAHmEAAQAXAAQABQMAABg7AAEBAAIBPQABAQABACAABAAFAwAAGDsACABtcHNFcHIyAAMBIT0AAgEqAAMATAABAEQBRVJST1I6IE1QUyBzZXJ2ZXI6ICUyMiUyMiBjb3VsZCBub3QgYmUgZm91bmQsIGFib3J0aW5nIG9wZXJhdGlvbi4uLgABAA0AAQAFAwAAHmEAAwAgAAEAGAFJTkZPOiBTZXR0aW5nIHBvbGljeS4uLgALACIAAgARAHdzX2FyZ3MuTXBTZXJ2ZXIABwElN0IlN0QAAgJhAAIACQBNcFNlcnZlcgJOASUzQ0FkZHJlc3MlMjB4bWxucz0lMjJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA0LzA4L2FkZHJlc3NpbmclMjIlM0VodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA0LzA4L2FkZHJlc3Npbmcvcm9sZS9hbm9ueW1vdXMlM0MvQWRkcmVzcyUzRSUzQ1JlZmVyZW5jZVBhcmFtZXRlcnMlMjB4bWxucz0lMjJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA0LzA4L2FkZHJlc3NpbmclMjIlM0UlM0NSZXNvdXJjZVVSSSUyMHhtbG5zPSUyMmh0dHA6Ly9zY2hlbWFzLmRtdGYub3JnL3diZW0vd3NtYW4vMS93c21hbi54c2QlMjIlM0VodHRwOi8vaW50ZWwuY29tL3diZW0vd3NjaW0vMS9hbXQtc2NoZW1hLzEvQU1UX01hbmFnZW1lbnRQcmVzZW5jZVJlbW90ZVNBUCUzQy9SZXNvdXJjZVVSSSUzRSUzQ1NlbGVjdG9yU2V0JTIweG1sbnM9JTIyaHR0cDovL3NjaGVtYXMuZG10Zi5vcmcvd2JlbS93c21hbi8xL3dzbWFuLnhzZCUyMiUzRSUzQ1NlbGVjdG9yJTIwTmFtZT0lMjJOYW1lJTIyJTNFe21wc0VwcjF9JTNDL1NlbGVjdG9yJTNFJTNDL1NlbGVjdG9yU2V0JTNFJTNDL1JlZmVyZW5jZVBhcmFtZXRlcnMlM0UAAQAXAAQABQMAAB1iAAEBAAIBPQABAQANAm0AAwAJAE1wU2VydmVyAAkATXBTZXJ2ZXICTwF8JTNDQWRkcmVzcyUyMHhtbG5zPSUyMmh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDQvMDgvYWRkcmVzc2luZyUyMiUzRWh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDQvMDgvYWRkcmVzc2luZy9yb2xlL2Fub255bW91cyUzQy9BZGRyZXNzJTNFJTNDUmVmZXJlbmNlUGFyYW1ldGVycyUyMHhtbG5zPSUyMmh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDQvMDgvYWRkcmVzc2luZyUyMiUzRSUzQ1Jlc291cmNlVVJJJTIweG1sbnM9JTIyaHR0cDovL3NjaGVtYXMuZG10Zi5vcmcvd2JlbS93c21hbi8xL3dzbWFuLnhzZCUyMiUzRWh0dHA6Ly9pbnRlbC5jb20vd2JlbS93c2NpbS8xL2FtdC1zY2hlbWEvMS9BTVRfTWFuYWdlbWVudFByZXNlbmNlUmVtb3RlU0FQJTNDL1Jlc291cmNlVVJJJTNFJTNDU2VsZWN0b3JTZXQlMjB4bWxucz0lMjJodHRwOi8vc2NoZW1hcy5kbXRmLm9yZy93YmVtL3dzbWFuLzEvd3NtYW4ueHNkJTIyJTNFJTNDU2VsZWN0b3IlMjBOYW1lPSUyMk5hbWUlMjIlM0V7bXBzRXByMn0lM0MvU2VsZWN0b3IlM0UlM0MvU2VsZWN0b3JTZXQlM0UlM0MvUmVmZXJlbmNlUGFyYW1ldGVycyUzRQAIACgAAwARAHdzX2FyZ3MuTXBTZXJ2ZXIACQBNcFNlcnZlcgACAXwAFABRAAQAGAFBTVRfUmVtb3RlQWNjZXNzU2VydmljZQAaAUFkZFJlbW90ZUFjY2Vzc1BvbGljeVJ1bGUACAB3c19hcmdzAAkAc2VsZWN0b3IAAQAoAAQABQMAAB4zAA0Ad3NtYW5fcmVzdWx0AAMBIT0ABQIAAADIAAMAIwABABsBUG9saWN5IGFkZGVkZCBzdWNjZXNzZnVsbHkAAQANAAEABQMAAB5hAAMALgABACYBV1NNQU4gY2FsbCBmYWlsZWQ6IHt3c21hbl9yZXN1bHRfc3RyfQACACAAAgARAFB1bGxSZW1vdGVBY2Nlc3MABQIAAAABAAIAEAABAAgAbXBzRXByMQACABAAAQAIAG1wc0VwcjIAAgAKAAEAAgBpAAIAFgABAA4AY3VyQWNjZXNzSW5mbwACABAAAQAIAGFycl9sZW4AAgARAAEACQBNcFNlcnZlcgACAAwAAQAEAGFycgACACAAAQAYAEFNVF9SZW1vdGVBY2Nlc3NTZXJ2aWNlAAIAFQABAA0Ad3NtYW5fcmVzdWx0AAIAGQABABEAd3NtYW5fcmVzdWx0X3N0cgACABAAAQAIAHdzX2FyZ3MAAgAZAAEAEQB3c19nZW5lcmFsX3F1ZXJ5AAIAFQABAA0Ad3NtYW5fYW5zd2VyAAIAEAABAAgAYlBlcmlvZAACABUAAQANAGV4dGVuZGVkRGF0YQACABMAAQALAHBlcmlvZF9hcnIAAgAXAAEADwBwZXJpb2RfYXJyX2xlbgACABQAAQAMAGJQZXJpb2RIb3VyAAIAFgABAA4AYlBlcmlvZE1pbnV0ZU4pABMAAgAEAF9fdAAFAgAAAAUACwA4AAIABwB3c2FyZ3MAJwElN0IlMjJSZXF1ZXN0ZWRTdGF0ZSUyMjolMjIzMjc3MSUyMiU3RAALAJMAAgAKAEVudW1TdGF0ZQB/ASU3QiUyMjMyNzY4JTIyOiUyMkRpc2FibGVkJTIyLCUyMjMyNzY5JTIyOiUyMkJJT1MgRW5hYmxlZCUyMiwlMjIzMjc3MCUyMjolMjJPUyBlbmFibGUlMjIsJTIyMzI3NzElMjI6JTIyQklPUyAmIE9TIEVuYWJlZCUyMiU3RAAUAEwABAAjAUFNVF9Vc2VySW5pdGlhdGVkQ29ubmVjdGlvblNlcnZpY2UAEwFSZXF1ZXN0U3RhdGVDaGFuZ2UABwB3c2FyZ3MAAQEAAQAoAAQABQMAACG7AA0Ad3NtYW5fcmVzdWx0AAMBIT0ABQIAAADIAAMASQABAEEBU1VDQ0VTUzogUmVtb3RlIEFjY2VzcyB1c2VyIGludGVyZmFjZXMgc2V0IHRvOiB7RW51bVN0YXRlLjMyNzcxfQACACAAAgARAFB1bGxSZW1vdGVBY2Nlc3MABQIAAAABAAEADQABAAUDAAAh4wADACgAAQAgAUNhbGwgZmFpbGVkOiB7d3NtYW5fcmVzdWx0X3N0cn0AAgAPAAEABwB3c2FyZ3MAAgAVAAEADQB3c21hbl9yZXN1bHQAAgAZAAEAEQB3c21hbl9yZXN1bHRfc3RyAAIAEgABAAoARW51bVN0YXRlAAIAKwABACMAQU1UX1VzZXJJbml0aWF0ZWRDb25uZWN0aW9uU2VydmljZU4pABMAAgAEAF9fdAAFAgAAAAYAAwAnAAEAHwFJTkZPOiBQYXJzaW5nIGJsb2NrIHBhcmFtZXRlcnMAAQAlAAQABQMAACoLAA8BYWFiYmNjZGRlZWZmZ2cAAgE9AAEBAAgAMQADABQAYXJyRGV0ZWN0aW9uU3RyaW5ncwAPAWFhYmJjY2RkZWVmZmdnAAIBLAAIAC0AAwAeAGFyckRldGVjdGlvbklQdjZMb2NhbFByZWZpeGVzAAEBAAIBLAADACwAAQAkAUlORk86IFNldHRpbmcgRW52aXJvbm1lbnQgRGV0ZWN0aW9uAAgARAADABEAd3NfZ2VuZXJhbF9xdWVyeQAlASpBTVRfRW52aXJvbm1lbnREZXRlY3Rpb25TZXR0aW5nRGF0YQACASwAEAAoAAIADQF3c21hbl9hbnN3ZXIAEQB3c19nZW5lcmFsX3F1ZXJ5AAIAWQACABUAZW52RGV0ZWN0aW9uSW5zdGFuY2UAOgB3c21hbl9hbnN3ZXIuQU1UX0Vudmlyb25tZW50RGV0ZWN0aW9uU2V0dGluZ0RhdGEucmVzcG9uc2UAAQA6AAMABQMAACSWACYAZW52RGV0ZWN0aW9uSW5zdGFuY2UuRGV0ZWN0aW9uU3RyaW5ncwADASE9AAIARAACACYAZW52RGV0ZWN0aW9uSW5zdGFuY2UuRGV0ZWN0aW9uU3RyaW5ncwAUAGFyckRldGVjdGlvblN0cmluZ3MAAQANAAEABQMAACYDAA0ANgADABQAYXJyRGV0ZWN0aW9uU3RyaW5ncwACASwAFABhcnJEZXRlY3Rpb25TdHJpbmdzAA0AbAADACYAZW52RGV0ZWN0aW9uSW5zdGFuY2UuRGV0ZWN0aW9uU3RyaW5ncwAmAGVudkRldGVjdGlvbkluc3RhbmNlLkRldGVjdGlvblN0cmluZ3MAFABhcnJEZXRlY3Rpb25TdHJpbmdzJxkAVgACACYAZW52RGV0ZWN0aW9uSW5zdGFuY2UuRGV0ZWN0aW9uU3RyaW5ncwAmAGVudkRldGVjdGlvbkluc3RhbmNlLkRldGVjdGlvblN0cmluZ3MACgBHAAIAFwBhcnJEZXRlY3Rpb25TdHJpbmdzTGVuACYAZW52RGV0ZWN0aW9uSW5zdGFuY2UuRGV0ZWN0aW9uU3RyaW5ncwABAC4ABAAFAwAAKYMAFwBhcnJEZXRlY3Rpb25TdHJpbmdzTGVuAAIBPgACATUAAQBEAAMABQMAACbDADAAZW52RGV0ZWN0aW9uSW5zdGFuY2UuRGV0ZWN0aW9uSVB2NkxvY2FsUHJlZml4ZXMAAwEhPQABABcABAAFAwAAKAEAAQEAAgE9AAEBAAIAWAACADAAZW52RGV0ZWN0aW9uSW5zdGFuY2UuRGV0ZWN0aW9uSVB2NkxvY2FsUHJlZml4ZXMAHgBhcnJEZXRlY3Rpb25JUHY2TG9jYWxQcmVmaXhlcwABAA0AAQAFAwAAKJQADQBKAAMAHgBhcnJEZXRlY3Rpb25JUHY2TG9jYWxQcmVmaXhlcwACASwAHgBhcnJEZXRlY3Rpb25JUHY2TG9jYWxQcmVmaXhlcwANAIoAAwAwAGVudkRldGVjdGlvbkluc3RhbmNlLkRldGVjdGlvbklQdjZMb2NhbFByZWZpeGVzADAAZW52RGV0ZWN0aW9uSW5zdGFuY2UuRGV0ZWN0aW9uSVB2NkxvY2FsUHJlZml4ZXMAHgBhcnJEZXRlY3Rpb25JUHY2TG9jYWxQcmVmaXhlcycZAGoAAgAwAGVudkRldGVjdGlvbkluc3RhbmNlLkRldGVjdGlvbklQdjZMb2NhbFByZWZpeGVzADAAZW52RGV0ZWN0aW9uSW5zdGFuY2UuRGV0ZWN0aW9uSVB2NkxvY2FsUHJlZml4ZXMACgBbAAIAIQBhcnJEZXRlY3Rpb25JUHY2TG9jYWxQcmVmaXhlc0xlbgAwAGVudkRldGVjdGlvbkluc3RhbmNlLkRldGVjdGlvbklQdjZMb2NhbFByZWZpeGVzAAEAOAAEAAUDAAApyQAhAGFyckRldGVjdGlvbklQdjZMb2NhbFByZWZpeGVzTGVuAAIBPgACATUAEQBDAAIAJAFBTVRfRW52aXJvbm1lbnREZXRlY3Rpb25TZXR0aW5nRGF0YQAVAGVudkRldGVjdGlvbkluc3RhbmNlAAEAKAAEAAUDAAApQQANAHdzbWFuX3Jlc3VsdAADASE9AAUCAAAAyAADADUAAQAtAUlORk86IEVudmlyb25tZW50IERldGVjdGlvbiBzZXQgc3VjY2Vzc2Z1bGx5AAEADQABAAUDAAAqXwADADUAAQAtAUVSUk9SOiBXU01BTiBjYWxsIGZhaWxlZDoge3dzbWFuX3Jlc3VsdF9zdHJ9AAEADQABAAUDAAAqXwADADkAAQAxAUVSUk9SOiBkZXRlY3Rpb24gc3RyaW5ncyBjb3VudCBtdXN0IGJlIGF0IG1vc3QgNQABAA0AAQAFAwAAKl8AAwA1AAEALQFFUlJPUjogSVB2NiBwcmVmaXhlcyBjb3VudCBtdXN0IGJlIGF0IG1vc3QgNQABAA0AAQAFAwAAKl8AAwBUAAEATAFFUlJPUjogJTIyRGV0ZWN0aW9uIFN0cmluZ3MlMjIgZmllbGQgY2Fubm90IGJlIGVtcHR5LCBhYm9ydGluZyBvcGVyYXRpb24uLi4AAgAdAAIAEQBQdWxsUmVtb3RlQWNjZXNzAAIBMQACACwAAQAkAEFNVF9FbnZpcm9ubWVudERldGVjdGlvblNldHRpbmdEYXRhAAIAJgABAB4AYXJyRGV0ZWN0aW9uSVB2NkxvY2FsUHJlZml4ZXMAAgAcAAEAFABhcnJEZXRlY3Rpb25TdHJpbmdzAAIAHQABABUAZW52RGV0ZWN0aW9uSW5zdGFuY2UAAgAZAAEAEQB3c19nZW5lcmFsX3F1ZXJ5AAIAFQABAA0Ad3NtYW5fYW5zd2VyAAIAFQABAA0Ad3NtYW5fcmVzdWx0AAEALAAEAAUDAAArfAARAFB1bGxTeXN0ZW1TdGF0dXMAAwEhPQAFAgAAAAFOIAAGAAAAAQAoAAQABQMAACuqAA0AUHVsbEV2ZW50TG9nAAMBIT0ABQIAAAABTiEABgAAAAEAKAAEAAUDAAAr2AANAFB1bGxBdWRpdExvZwADASE9AAUCAAAAAU4iAAYAAAABACwABAAFAwAALAoAEQBQdWxsQ2VydGlmaWNhdGVzAAMBIT0ABQIAAAABTiMABgAAAAEAKAAEAAUDAAAsOAANAFB1bGxXYXRjaGRvZwADASE9AAUCAAAAAU4kAAYAAAABAC0ABAAFAwAALGsAEgBQdWxsU3lzdGVtRGVmZW5zZQADASE9AAUCAAAAAU4lAAYAAAABACgABAAFAwAALJkADQBQdWxsSGFyZHdhcmUAAwEhPQAFAgAAAAFOJgAGAAAAAQAoAAQABQMAACzHAA0AUHVsbFVzZXJJbmZvAAMBIT0ABQIAAAABTicABgAAAAEALAAEAAUDAAAs+QARAFB1bGxSZW1vdGVBY2Nlc3MAAwEhPQAFAgAAAAFOKAAGAAAAAwAZAAEAEQFTY3JpcHQgQ29tcGxldGVkTikABgAA",
"blocks": {
"_start": {
@@ -523,7 +523,7 @@
"AMT-RemoteAccess-AddMpsServerFqdnCert": {
"name": "Remote - Add MPS FQDN/Cert",
"desc": "Add a new CIRA server (MPS) using the server's hostname and authentication using certificate",
- "code": "# Get the input from user for the CN to look for\r\n# Get available certificates\r\nsplit ws_general_query \"AMT_PublicKeyCertificate\" ,\r\nwsbatchenum \"wsman_answer\" ws_general_query\r\nlength wsman_ans_length wsman_answer.AMT_PublicKeyCertificate.responses\r\nset i 0\r\n:loop_ans-%%%~%%%\r\n# Get the current subject name\r\nset curSubject wsman_answer.AMT_PublicKeyCertificate.responses.{i}.Subject\r\nIndexOf pos curSubject \"CN=%%%CN%%%\" \r\njump :cnFound-%%%~%%% pos \">=\" 0\r\nadd i i 1\r\njump :loop_ans-%%%~%%% i \"<\" wsman_ans_length\r\njump :cnNotFound-%%%~%%%\r\n:cnFound-%%%~%%%\r\n# Set the reference to the certificate\r\nset certInstanceId wsman_answer.AMT_PublicKeyCertificate.responses.{i}.InstanceID\r\nset certHandle \"%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_PublicKeyCertificate%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22InstanceID%22%3E{certInstanceId}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\n# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%FQDN%%%%22,%22InfoFormat%22:%22201%22,%22Port%22:%%%Port%%%,%22AuthMethod%22:%221%22%7D\"\r\nset wsargs.Certificate certHandle\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Prescence Server (MPS) successfully added to the Intel(R) AMT Subsystem\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:cnNotFound-%%%~%%%\r\nprint \"Couldn't find a certificate matching the value of CN=%%%CN%%%\"\r\n:error-%%%~%%%\r\nprint \"Call failed with error {wsman_result}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset certHandle\r\nset curSubject\r\nset i\r\nset pos\r\nset ws_general_query\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset certInstanceId\r\nset wsman_ans_length",
+ "code": "# Get the input from user for the CN to look for\r\n# Get available certificates\r\nsplit ws_general_query \"AMT_PublicKeyCertificate\" ,\r\nwsbatchenum \"wsman_answer\" ws_general_query\r\nlength wsman_ans_length wsman_answer.AMT_PublicKeyCertificate.responses\r\nset i 0\r\n:loop_ans-%%%~%%%\r\n# Get the current subject name\r\nset curSubject wsman_answer.AMT_PublicKeyCertificate.responses.{i}.Subject\r\nIndexOf pos curSubject \"CN=%%%CN%%%\" \r\njump :cnFound-%%%~%%% pos \">=\" 0\r\nadd i i 1\r\njump :loop_ans-%%%~%%% i \"<\" wsman_ans_length\r\njump :cnNotFound-%%%~%%%\r\n:cnFound-%%%~%%%\r\n# Set the reference to the certificate\r\nset certInstanceId wsman_answer.AMT_PublicKeyCertificate.responses.{i}.InstanceID\r\nset certHandle \"%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_PublicKeyCertificate%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22InstanceID%22%3E{certInstanceId}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\n# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%FQDN%%%%22,%22InfoFormat%22:%22201%22,%22Port%22:%%%Port%%%,%22AuthMethod%22:%221%22%7D\"\r\nset wsargs.Certificate certHandle\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Presence Server (MPS) successfully added\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:cnNotFound-%%%~%%%\r\nprint \"Couldn't find a certificate matching the value of CN=%%%CN%%%\"\r\n:error-%%%~%%%\r\nprint \"Call failed with error {wsman_result}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset certHandle\r\nset curSubject\r\nset i\r\nset pos\r\nset ws_general_query\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset certInstanceId\r\nset wsman_ans_length",
"vars": {
"FQDN": {
"name": "MPS Hostname",
@@ -551,7 +551,7 @@
"AMT-RemoteAccess-AddMpsServerFqdnUpa": {
"name": "Remote - Add MPS FQDN/User",
"desc": "Add a new CIRA server (MPS) using the server's hostname authentication using username/password",
- "code": "# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%FQDN%%%%22,%22InfoFormat%22:201,%22Port%22:%%%Port%%%,%22AuthMethod%22:2,%22Username%22:%22%%%username%%%%22,%22Password%22:%22%%%password%%%%22%7D\"\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Prescence Server (MPS) successfully added to the Intel(R) AMT Subsystem\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:error-%%%~%%%\r\nprint \"Call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset certHandle\r\nset curSubject\r\nset i\r\nset pos\r\nset ws_general_query\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset certInstanceId\r\nset wsman_ans_length",
+ "code": "# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%FQDN%%%%22,%22InfoFormat%22:201,%22Port%22:%%%Port%%%,%22AuthMethod%22:2,%22Username%22:%22%%%username%%%%22,%22Password%22:%22%%%password%%%%22%7D\"\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Presence Server (MPS) successfully added\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:error-%%%~%%%\r\nprint \"Call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset certHandle\r\nset curSubject\r\nset i\r\nset pos\r\nset ws_general_query\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset certInstanceId\r\nset wsman_ans_length",
"vars": {
"FQDN": {
"name": "MPS Hostname",
@@ -586,7 +586,7 @@
"AMT-RemoteAccess-AddMpsIpCertServer": {
"name": "Remote - Add MPS IP/Cert",
"desc": "Add a new CIRA server (MPS) using the server's IP address and authentication using certificate",
- "code": "# Get the input from user for the CN to look for\r\n# Get available certificates\r\nsplit ws_general_query \"AMT_PublicKeyCertificate\" ,\r\nwsbatchenum \"wsman_answer\" ws_general_query\r\nlength wsman_ans_length wsman_answer.AMT_PublicKeyCertificate.responses\r\nset i 0\r\n:loop_ans-%%%~%%%\r\n# Get the current subject name\r\nset curSubject wsman_answer.AMT_PublicKeyCertificate.responses.{i}.Subject\r\nIndexOf pos curSubject \"CN=%%%CN%%%\" \r\njump :cnFound-%%%~%%% pos \">=\" 0\r\nadd i i 1\r\njump :loop_ans-%%%~%%% i \"<\" wsman_ans_length\r\njump :cnNotFound-%%%~%%%\r\n:cnFound-%%%~%%%\r\n# Set the reference to the certificate\r\nset certInstanceId wsman_answer.AMT_PublicKeyCertificate.responses.{i}.InstanceID\r\nset certHandle \"%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_PublicKeyCertificate%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22InstanceID%22%3E{certInstanceId}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\n# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%IP%%%%22,%22InfoFormat%22:%223%22,%22Port%22:%%%Port%%%,%22AuthMethod%22:%221%22%7D\"\r\nset wsargs.Certificate certHandle\r\nset wsargs.CN \"%%%ServerName%%%\"\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Prescence Server (MPS) successfully added to the Intel(R) AMT Subsystem\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:cnNotFound-%%%~%%%\r\nprint \"Couldn't find a certificate matching the value of CN=%%%CN%%%\"\r\n:error-%%%~%%%\r\nprint \"Call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset certHandle\r\nset curSubject\r\nset i\r\nset pos\r\nset ws_general_query\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset certInstanceId\r\nset wsman_ans_length",
+ "code": "# Get the input from user for the CN to look for\r\n# Get available certificates\r\nsplit ws_general_query \"AMT_PublicKeyCertificate\" ,\r\nwsbatchenum \"wsman_answer\" ws_general_query\r\nlength wsman_ans_length wsman_answer.AMT_PublicKeyCertificate.responses\r\nset i 0\r\n:loop_ans-%%%~%%%\r\n# Get the current subject name\r\nset curSubject wsman_answer.AMT_PublicKeyCertificate.responses.{i}.Subject\r\nIndexOf pos curSubject \"CN=%%%CN%%%\" \r\njump :cnFound-%%%~%%% pos \">=\" 0\r\nadd i i 1\r\njump :loop_ans-%%%~%%% i \"<\" wsman_ans_length\r\njump :cnNotFound-%%%~%%%\r\n:cnFound-%%%~%%%\r\n# Set the reference to the certificate\r\nset certInstanceId wsman_answer.AMT_PublicKeyCertificate.responses.{i}.InstanceID\r\nset certHandle \"%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_PublicKeyCertificate%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22InstanceID%22%3E{certInstanceId}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\n# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%IP%%%%22,%22InfoFormat%22:%223%22,%22Port%22:%%%Port%%%,%22AuthMethod%22:%221%22%7D\"\r\nset wsargs.Certificate certHandle\r\nset wsargs.CN \"%%%ServerName%%%\"\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Presence Server (MPS) successfully added\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:cnNotFound-%%%~%%%\r\nprint \"Couldn't find a certificate matching the value of CN=%%%CN%%%\"\r\n:error-%%%~%%%\r\nprint \"Call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset certHandle\r\nset curSubject\r\nset i\r\nset pos\r\nset ws_general_query\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset certInstanceId\r\nset wsman_ans_length",
"vars": {
"IP": {
"name": "IPv4 Address",
@@ -621,7 +621,7 @@
"AMT-RemoteAccess-AddMpsIpUpa": {
"name": "Remote - Add MPS IP/User",
"desc": "Add a new CIRA server (MPS) using the servers IP address and authenticating using a username/password",
- "code": "# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%IP%%%%22,%22InfoFormat%22:%223%22,%22Port%22:%%%Port%%%,%22AuthMethod%22:%222%22,%22Username%22:%22%%%username%%%%22,%22Password%22:%22%%%password%%%%22%7D\"\r\nset wsargs.CN \"%%%ServerName%%%\"\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Prescence Server (MPS) successfully added to the Intel(R) AMT Subsystem\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:error-%%%~%%%\r\nprint \"Call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset wsman_ans_length",
+ "code": "# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%IP%%%%22,%22InfoFormat%22:%223%22,%22Port%22:%%%Port%%%,%22AuthMethod%22:%222%22,%22Username%22:%22%%%username%%%%22,%22Password%22:%22%%%password%%%%22%7D\"\r\nset wsargs.CN \"%%%ServerName%%%\"\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Presence Server (MPS) successfully added\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:error-%%%~%%%\r\nprint \"Call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset wsman_ans_length",
"vars": {
"IP": {
"name": "IPv4 Address",
@@ -684,13 +684,13 @@
"AMT-RemoteAccess-RemoveAll-MPS": {
"name": "Remote - Remove All MPS",
"desc": "Remove all MPS",
- "vars": {},
- "code": "split ws_general_query \"AMT_ManagementPresenceRemoteSAP\" ,\nwsbatchenum \"wsman_answer\" ws_general_query\nset i 0\nset arr wsman_answer.AMT_ManagementPresenceRemoteSAP.responses\nLength arr_len arr\n:loop-%%%~%%%\nset instanceName wsman_answer.AMT_ManagementPresenceRemoteSAP.responses.{i}.Name\nset selector \"%3Cw:SelectorSet%3E%3Cw:Selector%20Name=%22Name%22%3E{instanceName}%3C/w:Selector%3E%3C/w:SelectorSet%3E\"\nwsdelete \"AMT_ManagementPresenceRemoteSAP\" selector\nadd i i 1\njump :loop-%%%~%%% i \"<\" arr_len\n:end-%%%~%%%\nset AMT_ManagementPresenceRemoteSAP\nset arr\nset i\nset instanceName\nset selector\nset ws_general_query\nset wsman_answer\nset wsman_result\nset wsman_result_str\nset arr_len\nset PullRemoteAccess 1\n"
+ "vars": { },
+ "code": "split ws_general_query \"AMT_ManagementPresenceRemoteSAP\" ,\nwsbatchenum \"wsman_answer\" ws_general_query\nset i 0\nset arr wsman_answer.AMT_ManagementPresenceRemoteSAP.responses\nLength arr_len arr\njump :end-%%%~%%% arr_len \"=\" 0\n:loop-%%%~%%%\nset instanceName wsman_answer.AMT_ManagementPresenceRemoteSAP.responses.{i}.Name\nset selector \"%3Cw:SelectorSet%3E%3Cw:Selector%20Name=%22Name%22%3E{instanceName}%3C/w:Selector%3E%3C/w:SelectorSet%3E\"\nwsdelete \"AMT_ManagementPresenceRemoteSAP\" selector\nadd i i 1\njump :loop-%%%~%%% i \"<\" arr_len\n:end-%%%~%%%\nset AMT_ManagementPresenceRemoteSAP\nset arr\nset i\nset instanceName\nset selector\nset ws_general_query\nset wsman_answer\nset wsman_result\nset wsman_result_str\nset arr_len\nset PullRemoteAccess 1\n\n"
},
"AMT-RemoteAccess-AddRemoteAccessPolicyRule": {
"name": "Remote - Add Trigger (User / Alert)",
"desc": "Set a remote access trigger policy, used to establish a secure tunnel between a management console and the Intel AMT platform.",
- "code": "# *** Prepare arguments for AMT_RemoteAccessService.AddRemoteAccessPolicyRule ***\r\njsonparse ws_args \"%7B%22Trigger%22:%220%22,%22TunnelLifeTime%22:%22%%%tLifeTime%%%%22%7D\"\r\n# *** Verify valid input ***\r\njump :VALID_INPUT \"%%%AccessInfo1%%%\" \"!=\" \"\"\r\nprint \"ERROR: Field %22AccessInfo1%22 must not be empty, aborting operation...\"\r\njump :end-%%%~%%%\r\n:VALID_INPUT\r\n# *** Set a EPR selector matching user input ***\r\nsplit ws_general_query \"AMT_ManagementPresenceRemoteSAP\" ,\r\nwsbatchenum \"wsman_answer\" ws_general_query\r\nset i 0\r\nset arr wsman_answer.AMT_ManagementPresenceRemoteSAP.responses\r\nLength arr_len arr\r\nset mpsEpr1 \"*\"\r\nset mpsEpr2 \"*\"\r\n:loop-%%%~%%%\r\nset curAccessInfo arr.{i}.AccessInfo\r\nadd curAccessInfo curAccessInfo \":\"\r\nadd curAccessInfo curAccessInfo arr.{i}.Port\r\njump :MPS1_NO_MATCH curAccessInfo \"!=\" \"%%%AccessInfo1%%%\"\r\nset mpsEpr1 wsman_answer.AMT_ManagementPresenceRemoteSAP.responses.{i}.Name\r\nprint \"Found matching (primary) mps: {mpsEpr1}\"\r\njump :MPS2_NOTSET \"%%%AccessInfo2%%%\" \"=\" \"\"\r\n:MPS1_NO_MATCH\r\njump :MPS2_NO_MATCH curAccessInfo \"!=\" \"%%%AccessInfo2%%%\"\r\nset mpsEpr2 wsman_answer.AMT_ManagementPresenceRemoteSAP.responses.{i}.Name\r\nprint \"Found matching (secondary) mps: {mpsEpr2}\"\r\n:MPS2_NO_MATCH\r\nadd i i 1\r\njump :loop-%%%~%%% i \"<\" arr_len\r\n:MPS2_NOTSET\r\njump :MPS1_FOUND mpsEpr1 \"!=\" \"*\"\r\nprint \"ERROR: MPS server: %22%%%AccessInfo1%%%%22 could not be found, aborting operation...\"\r\njump :end-%%%~%%%\r\n:MPS1_FOUND\r\njump :MPS2_FOUND \"%%%AccessInfo2%%%\" \"=\" \"\"\r\njump :MPS2_FOUND mpsEpr2 \"!=\" \"*\"\r\nprint \"ERROR: MPS server: %22%%%AccessInfo2%%%%22 could not be found, aborting operation...\"\r\njump :end-%%%~%%%\r\n:MPS2_FOUND\r\nprint \"Setting policy...\"\r\njsonparse ws_args.MpServer \"%7B%7D\"\r\nset MpServer \"%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_ManagementPresenceRemoteSAP%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22Name%22%3E{mpsEpr1}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\njump :SKIP_ADD_MPS2 \"%%%AccessInfo2%%%\" \"=\" \"\"\r\nadd MpServer MpServer \"|%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_ManagementPresenceRemoteSAP%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22Name%22%3E{mpsEpr2}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\n:SKIP_ADD_MPS2\r\nsplit ws_args.MpServer MpServer \"|\"\r\n# *** Call AMT_RemoteAccessService.AddRemoteAccessPolicyRule with policy details. ***\r\nwsexec \"AMT_RemoteAccessService\" \"AddRemoteAccessPolicyRule\" ws_args selector\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Policy addedd successfully\"\r\njump :end-%%%~%%%\r\n:error-%%%~%%%\r\nprint \"WSMAN call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset PullRemoteAccess 1\r\nset mpsEpr1\r\nset mpsEpr2\r\nset i\r\nset curAccessInfo\r\nset arr_len\r\nset MpServer\r\nset arr\r\nset AMT_RemoteAccessService\r\nset wsman_result\r\nset wsman_result_str\r\nset ws_args\r\nset ws_general_query\r\nset wsman_answer",
+ "code": "# *** Prepare arguments for AMT_RemoteAccessService.AddRemoteAccessPolicyRule ***\r\njsonparse ws_args \"%7B%22Trigger%22:%220%22,%22TunnelLifeTime%22:%22%%%tLifeTime%%%%22%7D\"\r\n# *** Verify valid input ***\r\njump :VALID_INPUT \"%%%AccessInfo1%%%\" \"!=\" \"\"\r\nprint \"ERROR: Field %22AccessInfo1%22 must not be empty, aborting operation...\"\r\njump :end-%%%~%%%\r\n:VALID_INPUT\r\n# *** Set a EPR selector matching user input ***\r\nsplit ws_general_query \"AMT_ManagementPresenceRemoteSAP\" ,\r\nwsbatchenum \"wsman_answer\" ws_general_query\r\nset i 0\r\nset arr wsman_answer.AMT_ManagementPresenceRemoteSAP.responses\r\nLength arr_len arr\r\nset mpsEpr1 \"*\"\r\nset mpsEpr2 \"*\"\r\n:loop-%%%~%%%\r\nset curAccessInfo arr.{i}.AccessInfo\r\nadd curAccessInfo curAccessInfo \":\"\r\nadd curAccessInfo curAccessInfo arr.{i}.Port\r\njump :MPS1_NO_MATCH curAccessInfo \"!=\" \"%%%AccessInfo1%%%\"\r\nset mpsEpr1 wsman_answer.AMT_ManagementPresenceRemoteSAP.responses.{i}.Name\r\nprint \"Found matching (primary) mps: {mpsEpr1}\"\r\njump :MPS2_NOTSET \"%%%AccessInfo2%%%\" \"=\" \"\"\r\n:MPS1_NO_MATCH\r\njump :MPS2_NO_MATCH curAccessInfo \"!=\" \"%%%AccessInfo2%%%\"\r\nset mpsEpr2 wsman_answer.AMT_ManagementPresenceRemoteSAP.responses.{i}.Name\r\nprint \"Found matching (secondary) mps: {mpsEpr2}\"\r\n:MPS2_NO_MATCH\r\nadd i i 1\r\njump :loop-%%%~%%% i \"<\" arr_len\r\n:MPS2_NOTSET\r\njump :MPS1_FOUND mpsEpr1 \"!=\" \"*\"\r\nprint \"ERROR: MPS server: %22%%%AccessInfo1%%%%22 could not be found, aborting operation...\"\r\njump :end-%%%~%%%\r\n:MPS1_FOUND\r\njump :MPS2_FOUND \"%%%AccessInfo2%%%\" \"=\" \"\"\r\njump :MPS2_FOUND mpsEpr2 \"!=\" \"*\"\r\nprint \"ERROR: MPS server: %22%%%AccessInfo2%%%%22 could not be found, aborting operation...\"\r\njump :end-%%%~%%%\r\n:MPS2_FOUND\r\nprint \"Setting policy...\"\r\njsonparse ws_args.MpServer \"%7B%7D\"\r\nset MpServer \"%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_ManagementPresenceRemoteSAP%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22Name%22%3E{mpsEpr1}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\njump :SKIP_ADD_MPS2 \"%%%AccessInfo2%%%\" \"=\" \"\"\r\nadd MpServer MpServer \"|%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_ManagementPresenceRemoteSAP%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22Name%22%3E{mpsEpr2}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\n:SKIP_ADD_MPS2\r\nsplit ws_args.MpServer MpServer \"|\"\r\n# *** Call AMT_RemoteAccessService.AddRemoteAccessPolicyRule with policy details. ***\r\nwsexec \"AMT_RemoteAccessService\" \"AddRemoteAccessPolicyRule\" ws_args selector\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Policy added successfully\"\r\njump :end-%%%~%%%\r\n:error-%%%~%%%\r\nprint \"WSMAN call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset PullRemoteAccess 1\r\nset mpsEpr1\r\nset mpsEpr2\r\nset i\r\nset curAccessInfo\r\nset arr_len\r\nset MpServer\r\nset arr\r\nset AMT_RemoteAccessService\r\nset wsman_result\r\nset wsman_result_str\r\nset ws_args\r\nset ws_general_query\r\nset wsman_answer",
"vars": {
"AccessInfo1": {
"name": "MPS 1 Address",
@@ -728,7 +728,7 @@
"AMT-RemoteAccess-AddRemoteAccessPolicyRule2": {
"name": "Remote - Add Trigger (Periodic)",
"desc": "Set a remote access trigger policy, used to establish a secure tunnel between a management console and the Intel AMT platform.",
- "code": "# *** Verify valid input ***\r\nsplit period_arr \"%%%Period%%%\" \":\"\r\nlength period_arr_len period_arr\r\njump :INVALID_ARG_AccessInfo1 \"%%%AccessInfo1%%%\" \"=\" \"\"\r\njump :DailyPeriod \"%%%PeriodType%%%\" \"!=\" \"0\"\r\njump :INVALID_PeriodType \"%%%PeriodType%%%\" \"!=\" \"0\"\r\njump :INVALID_ARG_Period period_arr.0 \"<=\" \"0\"\r\njump :INVALID_ARG_Period period_arr.0 \">\" \"4294967295\"\r\nIntToStr extendedData \"0\"\r\nIntToStr bPeriod period_arr.0\r\nadd extendedData extendedData bPeriod\r\njump :SET_PERIOD\r\n:DailyPeriod\r\njump :INVALID_PeriodType period_arr_len \"!=\" \"2\"\r\njump :INVALID_ARG_PeriodDaily period_arr.0 \"<=\" \"0\"\r\njump :INVALID_ARG_PeriodDaily period_arr.0 \">\" \"23\"\r\njump :INVALID_ARG_PeriodDaily period_arr.1 \">\" \"59\"\r\njump :INVALID_ARG_PeriodDaily period_arr.1 \"<=\" \"0\"\r\nIntToStr extendedData \"1\"\r\nIntToStr bPeriodHour period_arr.0\r\nIntToStr bPeriodMinute period_arr.1\r\nadd extendedData extendedData bPeriodHour\r\nadd extendedData extendedData bPeriodMinute\r\njump :SET_PERIOD\r\n:INVALID_PeriodType\r\nprint \"ERROR: The period type and value must correspond, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_PeriodDaily\r\nprint \"ERROR: Field %22Period%22 must be a value HH:MM 0<=HH<24 && 0<=MM<60, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_AccessInfo1\r\nprint \"ERROR: Field %22AccessInfo1%22 must not be empty, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_Period\r\nprint \"ERROR: Field %22Period%22 must be a value 0<=t\" \"4294967295\"\r\nIntToStr extendedData \"0\"\r\nIntToStr bPeriod period_arr.0\r\nadd extendedData extendedData bPeriod\r\njump :SET_PERIOD\r\n:DailyPeriod\r\njump :INVALID_PeriodType period_arr_len \"!=\" \"2\"\r\njump :INVALID_ARG_PeriodDaily period_arr.0 \"<=\" \"0\"\r\njump :INVALID_ARG_PeriodDaily period_arr.0 \">\" \"23\"\r\njump :INVALID_ARG_PeriodDaily period_arr.1 \">\" \"59\"\r\njump :INVALID_ARG_PeriodDaily period_arr.1 \"<=\" \"0\"\r\nIntToStr extendedData \"1\"\r\nIntToStr bPeriodHour period_arr.0\r\nIntToStr bPeriodMinute period_arr.1\r\nadd extendedData extendedData bPeriodHour\r\nadd extendedData extendedData bPeriodMinute\r\njump :SET_PERIOD\r\n:INVALID_PeriodType\r\nprint \"ERROR: The period type and value must correspond, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_PeriodDaily\r\nprint \"ERROR: Field %22Period%22 must be a value HH:MM 0<=HH<24 && 0<=MM<60, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_AccessInfo1\r\nprint \"ERROR: Field %22AccessInfo1%22 must not be empty, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_Period\r\nprint \"ERROR: Field %22Period%22 must be a value 0<=t\" \"4294967295\"\r\nIntToStr extendedData \"0\"\r\nIntToStr bPeriod period_arr.0\r\nadd extendedData extendedData bPeriod\r\njump :SET_PERIOD\r\n:DailyPeriod\r\njump :INVALID_PeriodType period_arr_len \"!=\" \"2\"\r\njump :INVALID_ARG_PeriodDaily period_arr.0 \"<=\" \"0\"\r\njump :INVALID_ARG_PeriodDaily period_arr.0 \">\" \"23\"\r\njump :INVALID_ARG_PeriodDaily period_arr.1 \">\" \"59\"\r\njump :INVALID_ARG_PeriodDaily period_arr.1 \"<=\" \"0\"\r\nIntToStr extendedData \"1\"\r\nIntToStr bPeriodHour period_arr.0\r\nIntToStr bPeriodMinute period_arr.1\r\nadd extendedData extendedData bPeriodHour\r\nadd extendedData extendedData bPeriodMinute\r\njump :SET_PERIOD\r\n:INVALID_PeriodType\r\nprint \"ERROR: The period type and value must correspond, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_PeriodDaily\r\nprint \"ERROR: Field %22Period%22 must be a value HH:MM 0<=HH<24 && 0<=MM<60, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_AccessInfo1\r\nprint \"ERROR: Field %22AccessInfo1%22 must not be empty, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_Period\r\nprint \"ERROR: Field %22Period%22 must be a value 0<=t\" \"4294967295\"\r\nIntToStr extendedData \"0\"\r\nIntToStr bPeriod period_arr.0\r\nadd extendedData extendedData bPeriod\r\njump :SET_PERIOD\r\n:DailyPeriod\r\njump :INVALID_PeriodType period_arr_len \"!=\" \"2\"\r\njump :INVALID_ARG_PeriodDaily period_arr.0 \"<=\" \"0\"\r\njump :INVALID_ARG_PeriodDaily period_arr.0 \">\" \"23\"\r\njump :INVALID_ARG_PeriodDaily period_arr.1 \">\" \"59\"\r\njump :INVALID_ARG_PeriodDaily period_arr.1 \"<=\" \"0\"\r\nIntToStr extendedData \"1\"\r\nIntToStr bPeriodHour period_arr.0\r\nIntToStr bPeriodMinute period_arr.1\r\nadd extendedData extendedData bPeriodHour\r\nadd extendedData extendedData bPeriodMinute\r\njump :SET_PERIOD\r\n:INVALID_PeriodType\r\nprint \"ERROR: The period type and value must correspond, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_PeriodDaily\r\nprint \"ERROR: Field %22Period%22 must be a value HH:MM 0<=HH<24 && 0<=MM<60, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_AccessInfo1\r\nprint \"ERROR: Field %22AccessInfo1%22 must not be empty, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_Period\r\nprint \"ERROR: Field %22Period%22 must be a value 0<=t\" \"4294967295\"\nIntToStr extendedData \"0\"\nIntToStr bPeriod period_arr.0\nadd extendedData extendedData bPeriod\njump :SET_PERIOD\n:DailyPeriod\njump :INVALID_PeriodType period_arr_len \"!=\" \"2\"\njump :INVALID_ARG_PeriodDaily period_arr.0 \"<=\" \"0\"\njump :INVALID_ARG_PeriodDaily period_arr.0 \">\" \"23\"\njump :INVALID_ARG_PeriodDaily period_arr.1 \">\" \"59\"\njump :INVALID_ARG_PeriodDaily period_arr.1 \"<=\" \"0\"\nIntToStr extendedData \"1\"\nIntToStr bPeriodHour period_arr.0\nIntToStr bPeriodMinute period_arr.1\nadd extendedData extendedData bPeriodHour\nadd extendedData extendedData bPeriodMinute\njump :SET_PERIOD\n:INVALID_PeriodType\nprint \"ERROR: The period type and value must correspond, aborting operation...\"\njump :end-4\n:INVALID_ARG_PeriodDaily\nprint \"ERROR: Field %22Period%22 must be a value HH:MM 0<=HH<24 && 0<=MM<60, aborting operation...\"\njump :end-4\n:INVALID_ARG_AccessInfo1\nprint \"ERROR: Field %22AccessInfo1%22 must not be empty, aborting operation...\"\njump :end-4\n:INVALID_ARG_Period\nprint \"ERROR: Field %22Period%22 must be a value 0<=t\" \"5\"\n:SET_IPV6_PREFIX-6\njump :IPv6StringsDefined-6 envDetectionInstance.DetectionIPv6LocalPrefixes \"!=\"\njump :EMPTY_IPV6PRFX \"\" \"=\" \"\" \nset envDetectionInstance.DetectionIPv6LocalPrefixes arrDetectionIPv6LocalPrefixes\njump :CALL_WSPUT-6\n:IPv6StringsDefined-6\nadd arrDetectionIPv6LocalPrefixes \",\" arrDetectionIPv6LocalPrefixes\nadd envDetectionInstance.DetectionIPv6LocalPrefixes envDetectionInstance.DetectionIPv6LocalPrefixes arrDetectionIPv6LocalPrefixes\nmaketoarray envDetectionInstance.DetectionIPv6LocalPrefixes envDetectionInstance.DetectionIPv6LocalPrefixes\n:EMPTY_IPV6PRFX\nlength arrDetectionIPv6LocalPrefixesLen envDetectionInstance.DetectionIPv6LocalPrefixes\njump :INVALID_LEN_DetectionIPv6LocalPrefixes-6 arrDetectionIPv6LocalPrefixesLen \">\" \"5\"\n:CALL_WSPUT-6\nwsput \"AMT_EnvironmentDetectionSettingData\" envDetectionInstance\njump :error-6 wsman_result \"!=\" 200\nprint \"Environment Detection set successfully\"\njump :end-6\n:error-6\nprint \"ERROR: WSMAN call failed: {wsman_result_str}\"\njump :end-6\n:INVALID_LEN_DetectionStrings-6\nprint \"ERROR: detection strings count must be at most 5\"\njump :end-6\n:INVALID_LEN_DetectionIPv6LocalPrefixes-6\nprint \"ERROR: IPv6 prefixes count must be at most 5\"\njump :end-6\n:EMPTY_DETECTIONSTR-6\nprint \"ERROR: %22Detection Strings%22 field cannot be empty, aborting operation...\"\n:end-6\n set PullRemoteAccess \"1\"\nset AMT_EnvironmentDetectionSettingData\nset arrDetectionIPv6LocalPrefixes\nset arrDetectionStrings\nset envDetectionInstance\nset ws_general_query\nset wsman_answer \nset wsman_result\n\n##### Ending Block #####\n:end\njump :SkipPullSystemStatus PullSystemStatus \"!=\" 1\nPullSystemStatus\n:SkipPullSystemStatus\njump :SkipPullEventLog PullEventLog \"!=\" 1\nPullEventLog\n:SkipPullEventLog\njump :SkipPullAuditLog PullAuditLog \"!=\" 1\nPullAuditLog\n:SkipPullAuditLog\njump :SkipPullCertificates PullCertificates \"!=\" 1\nPullCertificates\n:SkipPullCertificates\njump :SkipPullWatchdog PullWatchdog \"!=\" 1\nPullWatchdog\n:SkipPullWatchdog\njump :SkipPullSystemDefense PullSystemDefense \"!=\" 1\nPullSystemDefense\n:SkipPullSystemDefense\njump :SkipPullHardware PullHardware \"!=\" 1\nPullHardware\n:SkipPullHardware\njump :SkipPullUserInfo PullUserInfo \"!=\" 1\nPullUserInfo\n:SkipPullUserInfo\njump :SkipPullRemoteAccess PullRemoteAccess \"!=\" 1\nPullRemoteAccess\n:SkipPullRemoteAccess\nprint \"Script Completed\"\nHighlightBlock\n",
+ "scriptText": "##### Starting Block #####\nprint \"Script Started\"\n\n##### Block: Remote - Remove Trigger #####\nHighlightBlock __t 0\njsonparse hMapPolicies \"%7B%220%22:%20%22User%20Initiated%22,%09%221%22:%20%22Alert%22,%20%222%22:%20%22Periodic%22%7D\"\nsplit policiesArr \"0,1,2\" \",\"\nlength policiesArrLen policiesArr\nset i 0\n:loop-0\nset curPolicy hMapPolicies.{policiesArr.{i}}\njsonparse ws_args \"%7B%22PolicyRuleName%22:%22{curPolicy}%22%7D\"\nwsdelete \"AMT_RemoteAccessPolicyRule\" ws_args\nadd i i 1\njump :loop-0 i \"<\" policiesArrLen\nprint \"Policies removed successfully\"\nset PullRemoteAccess 1\nset AMT_RemoteAccessPolicyRule\nset curPolicy\nset hMapPolicies\nset i\nset policiesArr\nset policiesArrLen\nset ws_args\nset wsman_result\n\n##### Block: Remote - Remove All MPS #####\nHighlightBlock __t 1\nsplit ws_general_query \"AMT_ManagementPresenceRemoteSAP\" ,\nwsbatchenum \"wsman_answer\" ws_general_query\nset i 0\nset arr wsman_answer.AMT_ManagementPresenceRemoteSAP.responses\nLength arr_len arr\n:loop-1\nset instanceName wsman_answer.AMT_ManagementPresenceRemoteSAP.responses.{i}.Name\nset selector \"%3Cw:SelectorSet%3E%3Cw:Selector%20Name=%22Name%22%3E{instanceName}%3C/w:Selector%3E%3C/w:SelectorSet%3E\"\nwsdelete \"AMT_ManagementPresenceRemoteSAP\" selector\nadd i i 1\njump :loop-1 i \"<\" arr_len\n:end-1\nset AMT_ManagementPresenceRemoteSAP\nset arr\nset i\nset instanceName\nset selector\nset ws_general_query\nset wsman_answer\nset wsman_result\nset wsman_result_str\nset arr_len\nset PullRemoteAccess 1\n\n\n##### Block: Security - Add Certificate #####\nHighlightBlock __t 2\njsonparse wsargs \"%7B%7D\"\nset wsargs.CertificateBlob \"MIIDKDCCAhCgAwIBAgIDBVZ2MA0GCSqGSIb3DQEBCwUAMEQxHzAdBgNVBAMTFk1lc2hDZW50cmFsUm9vdC1mYWM4NGUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKEwtNZXNoQ2VudHJhbDAeFw0xNTA3MTkxODE3NTVaFw00NjA3MTkxODE3NTVaMEQxHzAdBgNVBAMTFk1lc2hDZW50cmFsUm9vdC1mYWM4NGUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKEwtNZXNoQ2VudHJhbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJyN61TmYjDS8PJQGQ8OB2V0ccJ3kKZ4LkrwPhx+qRpZBqQ1MpUfjhjjMngjiEwVu04t729xekRjamwU6sorNZbp2l1OZNA2TIs5WCg1llXyxTkRqtfim83rwXQNu+6ivz5dAux46zKFGOcVdtMlyKEjZj16zuAQ/2xg6qgyQFYwwArq9Cy5qzWMA5cjqugqA106adkOQRCatdWHYxaMXRJaBJuKQnp1HGPefyITK1UEshEZYqmBKnbD9NwxqsC+Sp/diRWrGIEKkx1GsrepQcEXIzIMSdq7+LApwhl84pgNkzKJXHTPHqQaQSejPj3FprsQh2bgsbRJUwBTWIBru/MCAwEAAaMjMCEwDAYDVR0TBAUwAwEB/zARBglghkgBhvhCAQEEBAMCAAUwDQYJKoZIhvcNAQELBQADggEBAA+eOSMF7b82S3faGV7jKAFzkRwOUoZnCVFV6eGBK1iyPC/xrIbWncSc59DjnHMyXWCmc0OVknTgfeyqIS2OD2DkW1zU1gNuQksDbETzV6Db3ExQyv1BXCasLPop2CkC3WCwLFa2bXG7AEheFFfqwZz1mRwPnr8AiHS2zG6RjepZts+zQvVhTftiW1aFmYVHDWlhHFIVJ4xw2KHPfuufSxyOO7YOosjzGHUYiEP1zOQKmwm1Rcz+QZRmj/O8PfQsiKnUHpHAhx0GTqwgoL7hi2bkbC9IX04pDX8Vd5uABDLfU3+S3vjBvUe+XYSRknDnFiivOtAY6fFwLqu+OnbwiIA=\"\njump :certroot 1 \"=\" 1\nprint \"Adding certificate...\"\nwsexec \"AMT_PublicKeyManagementService\" \"AddCertificate\" wsargs\njump :certdone\n:certroot\nprint \"Adding root certificate...\"\nwsexec \"AMT_PublicKeyManagementService\" \"AddTrustedRootCertificate\" wsargs\n:certdone\nset wsargs\nset AMT_PublicKeyManagementService\nset PullCertificates 1\n\n\n##### Block: Remote - Add MPS IP/User #####\nHighlightBlock __t 3\n# Set method parameters\njsonparse wsargs \"%7B%22AccessInfo%22:%22192.168.2.133%22,%22InfoFormat%22:%223%22,%22Port%22:4433,%22AuthMethod%22:%222%22,%22Username%22:%22B6367516FC563665%22,%22Password%22:%22P@ssw0rd%22%7D\"\nset wsargs.CN \"devbox.mesh.meshcentral.com\"\n# Execute call to AddMpServer\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\njump :error-3 wsman_result \"!=\" 200\nprint \"Management Presence Server (MPS) successfully added\"\nset PullRemoteAccess 1\njump :end-3\n:error-3\nprint \"Call failed: {wsman_result_str}\"\n:end-3\nset AMT_RemoteAccessService\nset wsargs\nset wsman_answer\nset wsman_result\nset wsman_result_str\nset wsman_ans_length\n\n##### Block: Remote - Add Trigger (Periodic) #####\nHighlightBlock __t 4\n# *** Verify valid input ***\nsplit period_arr \"10\" \":\"\nlength period_arr_len period_arr\njump :INVALID_ARG_AccessInfo1 \"192.168.2.133:4433\" \"=\" \"\"\njump :DailyPeriod \"0\" \"!=\" \"0\"\njump :INVALID_PeriodType \"0\" \"!=\" \"0\"\njump :INVALID_ARG_Period period_arr.0 \"<=\" \"0\"\njump :INVALID_ARG_Period period_arr.0 \">\" \"4294967295\"\nIntToStr extendedData \"0\"\nIntToStr bPeriod period_arr.0\nadd extendedData extendedData bPeriod\njump :SET_PERIOD\n:DailyPeriod\njump :INVALID_PeriodType period_arr_len \"!=\" \"2\"\njump :INVALID_ARG_PeriodDaily period_arr.0 \"<=\" \"0\"\njump :INVALID_ARG_PeriodDaily period_arr.0 \">\" \"23\"\njump :INVALID_ARG_PeriodDaily period_arr.1 \">\" \"59\"\njump :INVALID_ARG_PeriodDaily period_arr.1 \"<=\" \"0\"\nIntToStr extendedData \"1\"\nIntToStr bPeriodHour period_arr.0\nIntToStr bPeriodMinute period_arr.1\nadd extendedData extendedData bPeriodHour\nadd extendedData extendedData bPeriodMinute\njump :SET_PERIOD\n:INVALID_PeriodType\nprint \"ERROR: The period type and value must correspond, aborting operation...\"\njump :end-4\n:INVALID_ARG_PeriodDaily\nprint \"ERROR: Field %22Period%22 must be a value HH:MM 0<=HH<24 && 0<=MM<60, aborting operation...\"\njump :end-4\n:INVALID_ARG_AccessInfo1\nprint \"ERROR: Field %22AccessInfo1%22 must not be empty, aborting operation...\"\njump :end-4\n:INVALID_ARG_Period\nprint \"ERROR: Field %22Period%22 must be a value 0<=t\" \"5\"\n:SET_IPV6_PREFIX-6\njump :IPv6StringsDefined-6 envDetectionInstance.DetectionIPv6LocalPrefixes \"!=\"\njump :EMPTY_IPV6PRFX \"\" \"=\" \"\" \nset envDetectionInstance.DetectionIPv6LocalPrefixes arrDetectionIPv6LocalPrefixes\njump :CALL_WSPUT-6\n:IPv6StringsDefined-6\nadd arrDetectionIPv6LocalPrefixes \",\" arrDetectionIPv6LocalPrefixes\nadd envDetectionInstance.DetectionIPv6LocalPrefixes envDetectionInstance.DetectionIPv6LocalPrefixes arrDetectionIPv6LocalPrefixes\nmaketoarray envDetectionInstance.DetectionIPv6LocalPrefixes envDetectionInstance.DetectionIPv6LocalPrefixes\n:EMPTY_IPV6PRFX\nlength arrDetectionIPv6LocalPrefixesLen envDetectionInstance.DetectionIPv6LocalPrefixes\njump :INVALID_LEN_DetectionIPv6LocalPrefixes-6 arrDetectionIPv6LocalPrefixesLen \">\" \"5\"\n:CALL_WSPUT-6\nwsput \"AMT_EnvironmentDetectionSettingData\" envDetectionInstance\njump :error-6 wsman_result \"!=\" 200\nprint \"Environment Detection set successfully\"\njump :end-6\n:error-6\nprint \"ERROR: WSMAN call failed: {wsman_result_str}\"\njump :end-6\n:INVALID_LEN_DetectionStrings-6\nprint \"ERROR: detection strings count must be at most 5\"\njump :end-6\n:INVALID_LEN_DetectionIPv6LocalPrefixes-6\nprint \"ERROR: IPv6 prefixes count must be at most 5\"\njump :end-6\n:EMPTY_DETECTIONSTR-6\nprint \"ERROR: %22Detection Strings%22 field cannot be empty, aborting operation...\"\n:end-6\n set PullRemoteAccess \"1\"\nset AMT_EnvironmentDetectionSettingData\nset arrDetectionIPv6LocalPrefixes\nset arrDetectionStrings\nset envDetectionInstance\nset ws_general_query\nset wsman_answer \nset wsman_result\n\n##### Ending Block #####\n:end\njump :SkipPullSystemStatus PullSystemStatus \"!=\" 1\nPullSystemStatus\n:SkipPullSystemStatus\njump :SkipPullEventLog PullEventLog \"!=\" 1\nPullEventLog\n:SkipPullEventLog\njump :SkipPullAuditLog PullAuditLog \"!=\" 1\nPullAuditLog\n:SkipPullAuditLog\njump :SkipPullCertificates PullCertificates \"!=\" 1\nPullCertificates\n:SkipPullCertificates\njump :SkipPullWatchdog PullWatchdog \"!=\" 1\nPullWatchdog\n:SkipPullWatchdog\njump :SkipPullSystemDefense PullSystemDefense \"!=\" 1\nPullSystemDefense\n:SkipPullSystemDefense\njump :SkipPullHardware PullHardware \"!=\" 1\nPullHardware\n:SkipPullHardware\njump :SkipPullUserInfo PullUserInfo \"!=\" 1\nPullUserInfo\n:SkipPullUserInfo\njump :SkipPullRemoteAccess PullRemoteAccess \"!=\" 1\nPullRemoteAccess\n:SkipPullRemoteAccess\nprint \"Script Completed\"\nHighlightBlock\n",
"mescript": "JH0pRQABAAMAFwABAA8BU2NyaXB0IFN0YXJ0ZWROKQATAAIABABfX3QABQIAAAAAAAsAdgACAA0AaE1hcFBvbGljaWVzAF8BJTdCJTIyMCUyMjolMjAlMjJVc2VyJTIwSW5pdGlhdGVkJTIyLCUwOSUyMjElMjI6JTIwJTIyQWxlcnQlMjIsJTIwJTIyMiUyMjolMjAlMjJQZXJpb2RpYyUyMiU3RAAIACAAAwAMAHBvbGljaWVzQXJyAAYBMCwxLDIAAgEsAAoAJQACAA8AcG9saWNpZXNBcnJMZW4ADABwb2xpY2llc0FycgACABEAAgACAGkABQIAAAAAAAIAMwACAAoAY3VyUG9saWN5AB8AaE1hcFBvbGljaWVzLntwb2xpY2llc0Fyci57aX19AAsAPwACAAgAd3NfYXJncwAtASU3QiUyMlBvbGljeVJ1bGVOYW1lJTIyOiUyMntjdXJQb2xpY3l9JTIyJTdEABMALQACABsBQU1UX1JlbW90ZUFjY2Vzc1BvbGljeVJ1bGUACAB3c19hcmdzAA0AFQADAAIAaQACAGkABQIAAAABAAEAJgAEAAUDAAAA9gACAGkAAgE8AA8AcG9saWNpZXNBcnJMZW4AAwAsAAEAJAFJTkZPOiBQb2xpY2llcyByZW1vdmVkIHN1Y2Nlc3NmdWxseQACACAAAgARAFB1bGxSZW1vdGVBY2Nlc3MABQIAAAABAAIAIwABABsAQU1UX1JlbW90ZUFjY2Vzc1BvbGljeVJ1bGUAAgASAAEACgBjdXJQb2xpY3kAAgAVAAEADQBoTWFwUG9saWNpZXMAAgAKAAEAAgBpAAIAFAABAAwAcG9saWNpZXNBcnIAAgAXAAEADwBwb2xpY2llc0FyckxlbgACABAAAQAIAHdzX2FyZ3MAAgAVAAEADQB3c21hbl9yZXN1bHROKQATAAIABABfX3QABQIAAAABAAgAPwADABEAd3NfZ2VuZXJhbF9xdWVyeQAgAUFNVF9NYW5hZ2VtZW50UHJlc2VuY2VSZW1vdGVTQVAAAgAsABAAKAACAA0Bd3NtYW5fYW5zd2VyABEAd3NfZ2VuZXJhbF9xdWVyeQACABEAAgACAGkABQIAAAAAAAIARQACAAQAYXJyADcAd3NtYW5fYW5zd2VyLkFNVF9NYW5hZ2VtZW50UHJlc2VuY2VSZW1vdGVTQVAucmVzcG9uc2VzAAoAFgACAAgAYXJyX2xlbgAEAGFycgACAFcAAgANAGluc3RhbmNlTmFtZQBAAHdzbWFuX2Fuc3dlci5BTVRfTWFuYWdlbWVudFByZXNlbmNlUmVtb3RlU0FQLnJlc3BvbnNlcy57aX0uTmFtZQACAHwAAgAJAHNlbGVjdG9yAGkBJTNDdzpTZWxlY3RvclNldCUzRSUzQ3c6U2VsZWN0b3IlMjBOYW1lPSUyMk5hbWUlMjIlM0V7aW5zdGFuY2VOYW1lfSUzQy93OlNlbGVjdG9yJTNFJTNDL3c6U2VsZWN0b3JTZXQlM0UAEwAzAAIAIAFBTVRfTWFuYWdlbWVudFByZXNlbmNlUmVtb3RlU0FQAAkAc2VsZWN0b3IADQAVAAMAAgBpAAIAaQAFAgAAAAEAAQAfAAQABQMAAAOmAAIAaQACATwACABhcnJfbGVuAAIAKAABACAAQU1UX01hbmFnZW1lbnRQcmVzZW5jZVJlbW90ZVNBUAACAAwAAQAEAGFycgACAAoAAQACAGkAAgAVAAEADQBpbnN0YW5jZU5hbWUAAgARAAEACQBzZWxlY3RvcgACABkAAQARAHdzX2dlbmVyYWxfcXVlcnkAAgAVAAEADQB3c21hbl9hbnN3ZXIAAgAVAAEADQB3c21hbl9yZXN1bHQAAgAZAAEAEQB3c21hbl9yZXN1bHRfc3RyAAIAEAABAAgAYXJyX2xlbgACACAAAgARAFB1bGxSZW1vdGVBY2Nlc3MABQIAAAABTikAEwACAAQAX190AAUCAAAAAgALABgAAgAHAHdzYXJncwAHASU3QiU3RAACBF4AAgAXAHdzYXJncy5DZXJ0aWZpY2F0ZUJsb2IEPQFNSUlES0RDQ0FoQ2dBd0lCQWdJREJWWjJNQTBHQ1NxR1NJYjNEUUVCQ3dVQU1FUXhIekFkQmdOVkJBTVRGazFsYzJoRFpXNTBjbUZzVW05dmRDMW1ZV000TkdVeEN6QUpCZ05WQkFZVEFsVlRNUlF3RWdZRFZRUUtFd3ROWlhOb1EyVnVkSEpoYkRBZUZ3MHhOVEEzTVRreE9ERTNOVFZhRncwME5qQTNNVGt4T0RFM05UVmFNRVF4SHpBZEJnTlZCQU1URmsxbGMyaERaVzUwY21Gc1VtOXZkQzFtWVdNNE5HVXhDekFKQmdOVkJBWVRBbFZUTVJRd0VnWURWUVFLRXd0TlpYTm9RMlZ1ZEhKaGJEQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUp5TjYxVG1ZakRTOFBKUUdROE9CMlYwY2NKM2tLWjRMa3J3UGh4K3FScFpCcVExTXBVZmpoampNbmdqaUV3VnUwNHQ3Mjl4ZWtSamFtd1U2c29yTlpicDJsMU9aTkEyVElzNVdDZzFsbFh5eFRrUnF0ZmltODNyd1hRTnUrNml2ejVkQXV4NDZ6S0ZHT2NWZHRNbHlLRWpaajE2enVBUS8yeGc2cWd5UUZZd3dBcnE5Q3k1cXpXTUE1Y2pxdWdxQTEwNmFka09RUkNhdGRXSFl4YU1YUkphQkp1S1FucDFIR1BlZnlJVEsxVUVzaEVaWXFtQktuYkQ5Tnd4cXNDK1NwL2RpUldyR0lFS2t4MUdzcmVwUWNFWEl6SU1TZHE3K0xBcHdobDg0cGdOa3pLSlhIVFBIcVFhUVNlalBqM0ZwcnNRaDJiZ3NiUkpVd0JUV0lCcnUvTUNBd0VBQWFNak1DRXdEQVlEVlIwVEJBVXdBd0VCL3pBUkJnbGdoa2dCaHZoQ0FRRUVCQU1DQUFVd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFBK2VPU01GN2I4MlMzZmFHVjdqS0FGemtSd09Vb1puQ1ZGVjZlR0JLMWl5UEMveHJJYlduY1NjNTlEam5ITXlYV0NtYzBPVmtuVGdmZXlxSVMyT0QyRGtXMXpVMWdOdVFrc0RiRVR6VjZEYjNFeFF5djFCWENhc0xQb3AyQ2tDM1dDd0xGYTJiWEc3QUVoZUZGZnF3WnoxbVJ3UG5yOEFpSFMyekc2UmplcFp0cyt6UXZWaFRmdGlXMWFGbVlWSERXbGhIRklWSjR4dzJLSFBmdXVmU3h5T083WU9vc2p6R0hVWWlFUDF6T1FLbXdtMVJjeitRWlJtai9POFBmUXNpS25VSHBIQWh4MEdUcXdnb0w3aGkyYmtiQzlJWDA0cERYOFZkNXVBQkRMZlUzK1MzdmpCdlVlK1hZU1JrbkRuRmlpdk90QVk2ZkZ3THF1K09uYndpSUE9AAEAHwAEAAUDAAAK5AAFAgAAAAEAAgE9AAUCAAAAAQADAB4AAQAWAUFkZGluZyBjZXJ0aWZpY2F0ZS4uLgAUAEEAAwAfAUFNVF9QdWJsaWNLZXlNYW5hZ2VtZW50U2VydmljZQAPAUFkZENlcnRpZmljYXRlAAcAd3NhcmdzAAEADQABAAUDAAALUwADACMAAQAbAUFkZGluZyByb290IGNlcnRpZmljYXRlLi4uABQATAADAB8BQU1UX1B1YmxpY0tleU1hbmFnZW1lbnRTZXJ2aWNlABoBQWRkVHJ1c3RlZFJvb3RDZXJ0aWZpY2F0ZQAHAHdzYXJncwACAA8AAQAHAHdzYXJncwACACcAAQAfAEFNVF9QdWJsaWNLZXlNYW5hZ2VtZW50U2VydmljZQACACAAAgARAFB1bGxDZXJ0aWZpY2F0ZXMABQIAAAABTikAEwACAAQAX190AAUCAAAAAwALAMIAAgAHAHdzYXJncwCxASU3QiUyMkFjY2Vzc0luZm8lMjI6JTIyMTkyLjE2OC4yLjEzMyUyMiwlMjJJbmZvRm9ybWF0JTIyOiUyMjMlMjIsJTIyUG9ydCUyMjo0NDMzLCUyMkF1dGhNZXRob2QlMjI6JTIyMiUyMiwlMjJVc2VybmFtZSUyMjolMjJCNjM2NzUxNkZDNTYzNjY1JTIyLCUyMlBhc3N3b3JkJTIyOiUyMlBAc3N3MHJkJTIyJTdEAAIAMAACAAoAd3NhcmdzLkNOABwBZGV2Ym94Lm1lc2gubWVzaGNlbnRyYWwuY29tABQAOgAEABgBQU1UX1JlbW90ZUFjY2Vzc1NlcnZpY2UADAFBZGRNcFNlcnZlcgAHAHdzYXJncwABAQABACgABAAFAwAADZgADQB3c21hbl9yZXN1bHQAAwEhPQAFAgAAAMgAAwBbAAEAUwFNYW5hZ2VtZW50IFByZXNjZW5jZSBTZXJ2ZXIgKE1QUykgc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIHRoZSBJbnRlbChSKSBBTVQgU3Vic3lzdGVtAAIAIAACABEAUHVsbFJlbW90ZUFjY2VzcwAFAgAAAAEAAQANAAEABQMAAA3AAAMAKAABACABQ2FsbCBmYWlsZWQ6IHt3c21hbl9yZXN1bHRfc3RyfQACACAAAQAYAEFNVF9SZW1vdGVBY2Nlc3NTZXJ2aWNlAAIADwABAAcAd3NhcmdzAAIAFQABAA0Ad3NtYW5fYW5zd2VyAAIAFQABAA0Ad3NtYW5fcmVzdWx0AAIAGQABABEAd3NtYW5fcmVzdWx0X3N0cgACABkAAQARAHdzbWFuX2Fuc19sZW5ndGhOKQATAAIABABfX3QABQIAAAAEAAgAHAADAAsAcGVyaW9kX2FycgADATEwAAIBOgAKACQAAgAPAHBlcmlvZF9hcnJfbGVuAAsAcGVyaW9kX2FycgABACkABAAFAwAAEh0AEwExOTIuMTY4LjIuMTMzOjQ0MzMAAgE9AAEBAAEAGgAEAAUDAAAPwAACATAAAwEhPQACATAAAQAaAAQABQMAABFPAAIBMAADASE9AAIBMAABACUABAAFAwAAEnoADQBwZXJpb2RfYXJyLjAAAwE8PQACATAAAQAtAAQABQMAABJ6AA0AcGVyaW9kX2Fyci4wAAIBPgALATQyOTQ5NjcyOTUnIQAZAAIADQBleHRlbmRlZERhdGEAAgEwJyEAHwACAAgAYlBlcmlvZAANAHBlcmlvZF9hcnIuMAANAC4AAwANAGV4dGVuZGVkRGF0YQANAGV4dGVuZGVkRGF0YQAIAGJQZXJpb2QAAQANAAEABQMAABLdAAEAJwAEAAUDAAARTwAPAHBlcmlvZF9hcnJfbGVuAAMBIT0AAgEyAAEAJQAEAAUDAAARrAANAHBlcmlvZF9hcnIuMAADATw9AAIBMAABACUABAAFAwAAEawADQBwZXJpb2RfYXJyLjAAAgE+AAMBMjMAAQAlAAQABQMAABGsAA0AcGVyaW9kX2Fyci4xAAIBPgADATU5AAEAJQAEAAUDAAARrAANAHBlcmlvZF9hcnIuMQADATw9AAIBMCchABkAAgANAGV4dGVuZGVkRGF0YQACATEnIQAjAAIADABiUGVyaW9kSG91cgANAHBlcmlvZF9hcnIuMCchACUAAgAOAGJQZXJpb2RNaW51dGUADQBwZXJpb2RfYXJyLjEADQAyAAMADQBleHRlbmRlZERhdGEADQBleHRlbmRlZERhdGEADABiUGVyaW9kSG91cgANADQAAwANAGV4dGVuZGVkRGF0YQANAGV4dGVuZGVkRGF0YQAOAGJQZXJpb2RNaW51dGUAAQANAAEABQMAABLdAAMAUAABAEgBRVJST1I6IFRoZSBwZXJpb2QgdHlwZSBhbmQgdmFsdWUgbXVzdCBjb3JyZXNwb25kLCBhYm9ydGluZyBvcGVyYXRpb24uLi4AAQANAAEABQMAAB33AAMAZAABAFwBRVJST1I6IEZpZWxkICUyMlBlcmlvZCUyMiBtdXN0IGJlIGEgdmFsdWUgSEg6TU0gMDw9SEg8MjQgJiYgMDw9TU08NjAsIGFib3J0aW5nIG9wZXJhdGlvbi4uLgABAA0AAQAFAwAAHfcAAwBQAAEASAFFUlJPUjogRmllbGQgJTIyQWNjZXNzSW5mbzElMjIgbXVzdCBub3QgYmUgZW1wdHksIGFib3J0aW5nIG9wZXJhdGlvbi4uLgABAA0AAQAFAwAAHfcAAwBWAAEATgFFUlJPUjogRmllbGQgJTIyUGVyaW9kJTIyIG11c3QgYmUgYSB2YWx1ZSAwPD10PE1BWF9JTlQsIGFib3J0aW5nIG9wZXJhdGlvbi4uLgABAA0AAQAFAwAAHfcACwBLAAIACAB3c19hcmdzADkBJTdCJTIyVHJpZ2dlciUyMjolMjIyJTIyLCUyMlR1bm5lbExpZmVUaW1lJTIyOiUyMjAlMjIlN0QnFAAkAAIADQBleHRlbmRlZERhdGEADQBleHRlbmRlZERhdGEAAgAsAAIAFQB3c19hcmdzLkV4dGVuZGVkRGF0YQANAGV4dGVuZGVkRGF0YQAIAD8AAwARAHdzX2dlbmVyYWxfcXVlcnkAIAFBTVRfTWFuYWdlbWVudFByZXNlbmNlUmVtb3RlU0FQAAIALAAQACgAAgANAXdzbWFuX2Fuc3dlcgARAHdzX2dlbmVyYWxfcXVlcnkAAgARAAIAAgBpAAUCAAAAAAACAEUAAgAEAGFycgA3AHdzbWFuX2Fuc3dlci5BTVRfTWFuYWdlbWVudFByZXNlbmNlUmVtb3RlU0FQLnJlc3BvbnNlcwAKABYAAgAIAGFycl9sZW4ABABhcnIAAgAUAAIACABtcHNFcHIxAAIBKgACABQAAgAIAG1wc0VwcjIAAgEqAAIAKwACAA4AY3VyQWNjZXNzSW5mbwATAGFyci57aX0uQWNjZXNzSW5mbwANACoAAwAOAGN1ckFjY2Vzc0luZm8ADgBjdXJBY2Nlc3NJbmZvAAIBOgANADUAAwAOAGN1ckFjY2Vzc0luZm8ADgBjdXJBY2Nlc3NJbmZvAA0AYXJyLntpfS5Qb3J0AAEANwAEAAUDAAAV0wAOAGN1ckFjY2Vzc0luZm8AAwEhPQATATE5Mi4xNjguMi4xMzM6NDQzMwACAFIAAgAIAG1wc0VwcjEAQAB3c21hbl9hbnN3ZXIuQU1UX01hbmFnZW1lbnRQcmVzZW5jZVJlbW90ZVNBUC5yZXNwb25zZXMue2l9Lk5hbWUAAwA2AAEALgFJTkZPOiBGb3VuZCBtYXRjaGluZyAocHJpbWFyeSkgbXBzOiB7bXBzRXByMX0AAQAXAAQABQMAABa2AAEBAAIBPQABAQABACUABAAFAwAAFoIADgBjdXJBY2Nlc3NJbmZvAAMBIT0AAQEAAgBSAAIACABtcHNFcHIyAEAAd3NtYW5fYW5zd2VyLkFNVF9NYW5hZ2VtZW50UHJlc2VuY2VSZW1vdGVTQVAucmVzcG9uc2VzLntpfS5OYW1lAAMAOAABADABSU5GTzogRm91bmQgbWF0Y2hpbmcgKHNlY29uZGFyeSkgbXBzOiB7bXBzRXByMn0ADQAVAAMAAgBpAAIAaQAFAgAAAAEAAQAfAAQABQMAABRzAAIAaQACATwACABhcnJfbGVuAAEAIAAEAAUDAAAXQQAIAG1wc0VwcjEAAwEhPQACASoAAwBeAAEAVgFFUlJPUjogTVBTIHNlcnZlcjogJTIyMTkyLjE2OC4yLjEzMzo0NDMzJTIyIGNvdWxkIG5vdCBiZSBmb3VuZCwgYWJvcnRpbmcgb3BlcmF0aW9uLi4uAAEADQABAAUDAAAd9wABABcABAAFAwAAF9EAAQEAAgE9AAEBAAEAIAAEAAUDAAAX0QAIAG1wc0VwcjIAAwEhPQACASoAAwBMAAEARAFFUlJPUjogTVBTIHNlcnZlcjogJTIyJTIyIGNvdWxkIG5vdCBiZSBmb3VuZCwgYWJvcnRpbmcgb3BlcmF0aW9uLi4uAAEADQABAAUDAAAd9wADACAAAQAYAUlORk86IFNldHRpbmcgcG9saWN5Li4uAAsAIgACABEAd3NfYXJncy5NcFNlcnZlcgAHASU3QiU3RAACAmEAAgAJAE1wU2VydmVyAk4BJTNDQWRkcmVzcyUyMHhtbG5zPSUyMmh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDQvMDgvYWRkcmVzc2luZyUyMiUzRWh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDQvMDgvYWRkcmVzc2luZy9yb2xlL2Fub255bW91cyUzQy9BZGRyZXNzJTNFJTNDUmVmZXJlbmNlUGFyYW1ldGVycyUyMHhtbG5zPSUyMmh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDQvMDgvYWRkcmVzc2luZyUyMiUzRSUzQ1Jlc291cmNlVVJJJTIweG1sbnM9JTIyaHR0cDovL3NjaGVtYXMuZG10Zi5vcmcvd2JlbS93c21hbi8xL3dzbWFuLnhzZCUyMiUzRWh0dHA6Ly9pbnRlbC5jb20vd2JlbS93c2NpbS8xL2FtdC1zY2hlbWEvMS9BTVRfTWFuYWdlbWVudFByZXNlbmNlUmVtb3RlU0FQJTNDL1Jlc291cmNlVVJJJTNFJTNDU2VsZWN0b3JTZXQlMjB4bWxucz0lMjJodHRwOi8vc2NoZW1hcy5kbXRmLm9yZy93YmVtL3dzbWFuLzEvd3NtYW4ueHNkJTIyJTNFJTNDU2VsZWN0b3IlMjBOYW1lPSUyMk5hbWUlMjIlM0V7bXBzRXByMX0lM0MvU2VsZWN0b3IlM0UlM0MvU2VsZWN0b3JTZXQlM0UlM0MvUmVmZXJlbmNlUGFyYW1ldGVycyUzRQABABcABAAFAwAAHPgAAQEAAgE9AAEBAA0CbQADAAkATXBTZXJ2ZXIACQBNcFNlcnZlcgJPAXwlM0NBZGRyZXNzJTIweG1sbnM9JTIyaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNC8wOC9hZGRyZXNzaW5nJTIyJTNFaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNC8wOC9hZGRyZXNzaW5nL3JvbGUvYW5vbnltb3VzJTNDL0FkZHJlc3MlM0UlM0NSZWZlcmVuY2VQYXJhbWV0ZXJzJTIweG1sbnM9JTIyaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNC8wOC9hZGRyZXNzaW5nJTIyJTNFJTNDUmVzb3VyY2VVUkklMjB4bWxucz0lMjJodHRwOi8vc2NoZW1hcy5kbXRmLm9yZy93YmVtL3dzbWFuLzEvd3NtYW4ueHNkJTIyJTNFaHR0cDovL2ludGVsLmNvbS93YmVtL3dzY2ltLzEvYW10LXNjaGVtYS8xL0FNVF9NYW5hZ2VtZW50UHJlc2VuY2VSZW1vdGVTQVAlM0MvUmVzb3VyY2VVUkklM0UlM0NTZWxlY3RvclNldCUyMHhtbG5zPSUyMmh0dHA6Ly9zY2hlbWFzLmRtdGYub3JnL3diZW0vd3NtYW4vMS93c21hbi54c2QlMjIlM0UlM0NTZWxlY3RvciUyME5hbWU9JTIyTmFtZSUyMiUzRXttcHNFcHIyfSUzQy9TZWxlY3RvciUzRSUzQy9TZWxlY3RvclNldCUzRSUzQy9SZWZlcmVuY2VQYXJhbWV0ZXJzJTNFAAgAKAADABEAd3NfYXJncy5NcFNlcnZlcgAJAE1wU2VydmVyAAIBfAAUAFEABAAYAUFNVF9SZW1vdGVBY2Nlc3NTZXJ2aWNlABoBQWRkUmVtb3RlQWNjZXNzUG9saWN5UnVsZQAIAHdzX2FyZ3MACQBzZWxlY3RvcgABACgABAAFAwAAHckADQB3c21hbl9yZXN1bHQAAwEhPQAFAgAAAMgAAwAjAAEAGwFQb2xpY3kgYWRkZWRkIHN1Y2Nlc3NmdWxseQABAA0AAQAFAwAAHfcAAwAuAAEAJgFXU01BTiBjYWxsIGZhaWxlZDoge3dzbWFuX3Jlc3VsdF9zdHJ9AAIAIAACABEAUHVsbFJlbW90ZUFjY2VzcwAFAgAAAAEAAgAQAAEACABtcHNFcHIxAAIAEAABAAgAbXBzRXByMgACAAoAAQACAGkAAgAWAAEADgBjdXJBY2Nlc3NJbmZvAAIAEAABAAgAYXJyX2xlbgACABEAAQAJAE1wU2VydmVyAAIADAABAAQAYXJyAAIAIAABABgAQU1UX1JlbW90ZUFjY2Vzc1NlcnZpY2UAAgAVAAEADQB3c21hbl9yZXN1bHQAAgAZAAEAEQB3c21hbl9yZXN1bHRfc3RyAAIAEAABAAgAd3NfYXJncwACABkAAQARAHdzX2dlbmVyYWxfcXVlcnkAAgAVAAEADQB3c21hbl9hbnN3ZXIAAgAQAAEACABiUGVyaW9kAAIAFQABAA0AZXh0ZW5kZWREYXRhAAIAEwABAAsAcGVyaW9kX2FycgACABcAAQAPAHBlcmlvZF9hcnJfbGVuAAIAFAABAAwAYlBlcmlvZEhvdXIAAgAWAAEADgBiUGVyaW9kTWludXRlTikAEwACAAQAX190AAUCAAAABQALADgAAgAHAHdzYXJncwAnASU3QiUyMlJlcXVlc3RlZFN0YXRlJTIyOiUyMjMyNzcxJTIyJTdEAAsAkwACAAoARW51bVN0YXRlAH8BJTdCJTIyMzI3NjglMjI6JTIyRGlzYWJsZWQlMjIsJTIyMzI3NjklMjI6JTIyQklPUyBFbmFibGVkJTIyLCUyMjMyNzcwJTIyOiUyMk9TIGVuYWJsZSUyMiwlMjIzMjc3MSUyMjolMjJCSU9TICYgT1MgRW5hYmVkJTIyJTdEABQATAAEACMBQU1UX1VzZXJJbml0aWF0ZWRDb25uZWN0aW9uU2VydmljZQATAVJlcXVlc3RTdGF0ZUNoYW5nZQAHAHdzYXJncwABAQABACgABAAFAwAAIVEADQB3c21hbl9yZXN1bHQAAwEhPQAFAgAAAMgAAwBJAAEAQQFTVUNDRVNTOiBSZW1vdGUgQWNjZXNzIHVzZXIgaW50ZXJmYWNlcyBzZXQgdG86IHtFbnVtU3RhdGUuMzI3NzF9AAIAIAACABEAUHVsbFJlbW90ZUFjY2VzcwAFAgAAAAEAAQANAAEABQMAACF5AAMAKAABACABQ2FsbCBmYWlsZWQ6IHt3c21hbl9yZXN1bHRfc3RyfQACAA8AAQAHAHdzYXJncwACABUAAQANAHdzbWFuX3Jlc3VsdAACABkAAQARAHdzbWFuX3Jlc3VsdF9zdHIAAgASAAEACgBFbnVtU3RhdGUAAgArAAEAIwBBTVRfVXNlckluaXRpYXRlZENvbm5lY3Rpb25TZXJ2aWNlTikAEwACAAQAX190AAUCAAAABgADACcAAQAfAUlORk86IFBhcnNpbmcgYmxvY2sgcGFyYW1ldGVycwABACUABAAFAwAAKaEADwFhYWJiY2NkZGVlZmZnZwACAT0AAQEACAAxAAMAFABhcnJEZXRlY3Rpb25TdHJpbmdzAA8BYWFiYmNjZGRlZWZmZ2cAAgEsAAgALQADAB4AYXJyRGV0ZWN0aW9uSVB2NkxvY2FsUHJlZml4ZXMAAQEAAgEsAAMALAABACQBSU5GTzogU2V0dGluZyBFbnZpcm9ubWVudCBEZXRlY3Rpb24ACABEAAMAEQB3c19nZW5lcmFsX3F1ZXJ5ACUBKkFNVF9FbnZpcm9ubWVudERldGVjdGlvblNldHRpbmdEYXRhAAIBLAAQACgAAgANAXdzbWFuX2Fuc3dlcgARAHdzX2dlbmVyYWxfcXVlcnkAAgBZAAIAFQBlbnZEZXRlY3Rpb25JbnN0YW5jZQA6AHdzbWFuX2Fuc3dlci5BTVRfRW52aXJvbm1lbnREZXRlY3Rpb25TZXR0aW5nRGF0YS5yZXNwb25zZQABADoAAwAFAwAAJCwAJgBlbnZEZXRlY3Rpb25JbnN0YW5jZS5EZXRlY3Rpb25TdHJpbmdzAAMBIT0AAgBEAAIAJgBlbnZEZXRlY3Rpb25JbnN0YW5jZS5EZXRlY3Rpb25TdHJpbmdzABQAYXJyRGV0ZWN0aW9uU3RyaW5ncwABAA0AAQAFAwAAJZkADQA2AAMAFABhcnJEZXRlY3Rpb25TdHJpbmdzAAIBLAAUAGFyckRldGVjdGlvblN0cmluZ3MADQBsAAMAJgBlbnZEZXRlY3Rpb25JbnN0YW5jZS5EZXRlY3Rpb25TdHJpbmdzACYAZW52RGV0ZWN0aW9uSW5zdGFuY2UuRGV0ZWN0aW9uU3RyaW5ncwAUAGFyckRldGVjdGlvblN0cmluZ3MnGQBWAAIAJgBlbnZEZXRlY3Rpb25JbnN0YW5jZS5EZXRlY3Rpb25TdHJpbmdzACYAZW52RGV0ZWN0aW9uSW5zdGFuY2UuRGV0ZWN0aW9uU3RyaW5ncwAKAEcAAgAXAGFyckRldGVjdGlvblN0cmluZ3NMZW4AJgBlbnZEZXRlY3Rpb25JbnN0YW5jZS5EZXRlY3Rpb25TdHJpbmdzAAEALgAEAAUDAAApGQAXAGFyckRldGVjdGlvblN0cmluZ3NMZW4AAgE+AAIBNQABAEQAAwAFAwAAJlkAMABlbnZEZXRlY3Rpb25JbnN0YW5jZS5EZXRlY3Rpb25JUHY2TG9jYWxQcmVmaXhlcwADASE9AAEAFwAEAAUDAAAnlwABAQACAT0AAQEAAgBYAAIAMABlbnZEZXRlY3Rpb25JbnN0YW5jZS5EZXRlY3Rpb25JUHY2TG9jYWxQcmVmaXhlcwAeAGFyckRldGVjdGlvbklQdjZMb2NhbFByZWZpeGVzAAEADQABAAUDAAAoKgANAEoAAwAeAGFyckRldGVjdGlvbklQdjZMb2NhbFByZWZpeGVzAAIBLAAeAGFyckRldGVjdGlvbklQdjZMb2NhbFByZWZpeGVzAA0AigADADAAZW52RGV0ZWN0aW9uSW5zdGFuY2UuRGV0ZWN0aW9uSVB2NkxvY2FsUHJlZml4ZXMAMABlbnZEZXRlY3Rpb25JbnN0YW5jZS5EZXRlY3Rpb25JUHY2TG9jYWxQcmVmaXhlcwAeAGFyckRldGVjdGlvbklQdjZMb2NhbFByZWZpeGVzJxkAagACADAAZW52RGV0ZWN0aW9uSW5zdGFuY2UuRGV0ZWN0aW9uSVB2NkxvY2FsUHJlZml4ZXMAMABlbnZEZXRlY3Rpb25JbnN0YW5jZS5EZXRlY3Rpb25JUHY2TG9jYWxQcmVmaXhlcwAKAFsAAgAhAGFyckRldGVjdGlvbklQdjZMb2NhbFByZWZpeGVzTGVuADAAZW52RGV0ZWN0aW9uSW5zdGFuY2UuRGV0ZWN0aW9uSVB2NkxvY2FsUHJlZml4ZXMAAQA4AAQABQMAAClfACEAYXJyRGV0ZWN0aW9uSVB2NkxvY2FsUHJlZml4ZXNMZW4AAgE+AAIBNQARAEMAAgAkAUFNVF9FbnZpcm9ubWVudERldGVjdGlvblNldHRpbmdEYXRhABUAZW52RGV0ZWN0aW9uSW5zdGFuY2UAAQAoAAQABQMAACjXAA0Ad3NtYW5fcmVzdWx0AAMBIT0ABQIAAADIAAMANQABAC0BSU5GTzogRW52aXJvbm1lbnQgRGV0ZWN0aW9uIHNldCBzdWNjZXNzZnVsbHkAAQANAAEABQMAACn1AAMANQABAC0BRVJST1I6IFdTTUFOIGNhbGwgZmFpbGVkOiB7d3NtYW5fcmVzdWx0X3N0cn0AAQANAAEABQMAACn1AAMAOQABADEBRVJST1I6IGRldGVjdGlvbiBzdHJpbmdzIGNvdW50IG11c3QgYmUgYXQgbW9zdCA1AAEADQABAAUDAAAp9QADADUAAQAtAUVSUk9SOiBJUHY2IHByZWZpeGVzIGNvdW50IG11c3QgYmUgYXQgbW9zdCA1AAEADQABAAUDAAAp9QADAFQAAQBMAUVSUk9SOiAlMjJEZXRlY3Rpb24gU3RyaW5ncyUyMiBmaWVsZCBjYW5ub3QgYmUgZW1wdHksIGFib3J0aW5nIG9wZXJhdGlvbi4uLgACAB0AAgARAFB1bGxSZW1vdGVBY2Nlc3MAAgExAAIALAABACQAQU1UX0Vudmlyb25tZW50RGV0ZWN0aW9uU2V0dGluZ0RhdGEAAgAmAAEAHgBhcnJEZXRlY3Rpb25JUHY2TG9jYWxQcmVmaXhlcwACABwAAQAUAGFyckRldGVjdGlvblN0cmluZ3MAAgAdAAEAFQBlbnZEZXRlY3Rpb25JbnN0YW5jZQACABkAAQARAHdzX2dlbmVyYWxfcXVlcnkAAgAVAAEADQB3c21hbl9hbnN3ZXIAAgAVAAEADQB3c21hbl9yZXN1bHQAAQAsAAQABQMAACsSABEAUHVsbFN5c3RlbVN0YXR1cwADASE9AAUCAAAAAU4gAAYAAAABACgABAAFAwAAK0AADQBQdWxsRXZlbnRMb2cAAwEhPQAFAgAAAAFOIQAGAAAAAQAoAAQABQMAACtuAA0AUHVsbEF1ZGl0TG9nAAMBIT0ABQIAAAABTiIABgAAAAEALAAEAAUDAAAroAARAFB1bGxDZXJ0aWZpY2F0ZXMAAwEhPQAFAgAAAAFOIwAGAAAAAQAoAAQABQMAACvOAA0AUHVsbFdhdGNoZG9nAAMBIT0ABQIAAAABTiQABgAAAAEALQAEAAUDAAAsAQASAFB1bGxTeXN0ZW1EZWZlbnNlAAMBIT0ABQIAAAABTiUABgAAAAEAKAAEAAUDAAAsLwANAFB1bGxIYXJkd2FyZQADASE9AAUCAAAAAU4mAAYAAAABACgABAAFAwAALF0ADQBQdWxsVXNlckluZm8AAwEhPQAFAgAAAAFOJwAGAAAAAQAsAAQABQMAACyPABEAUHVsbFJlbW90ZUFjY2VzcwADASE9AAUCAAAAAU4oAAYAAAADABkAAQARAVNjcmlwdCBDb21wbGV0ZWROKQAGAAA=",
"blocks": {
"_start": {
@@ -517,7 +517,7 @@
"AMT-RemoteAccess-AddMpsServerFqdnCert": {
"name": "Remote - Add MPS FQDN/Cert",
"desc": "Add a new CIRA server (MPS) using the server's hostname and authentication using certificate",
- "code": "# Get the input from user for the CN to look for\r\n# Get available certificates\r\nsplit ws_general_query \"AMT_PublicKeyCertificate\" ,\r\nwsbatchenum \"wsman_answer\" ws_general_query\r\nlength wsman_ans_length wsman_answer.AMT_PublicKeyCertificate.responses\r\nset i 0\r\n:loop_ans-%%%~%%%\r\n# Get the current subject name\r\nset curSubject wsman_answer.AMT_PublicKeyCertificate.responses.{i}.Subject\r\nIndexOf pos curSubject \"CN=%%%CN%%%\" \r\njump :cnFound-%%%~%%% pos \">=\" 0\r\nadd i i 1\r\njump :loop_ans-%%%~%%% i \"<\" wsman_ans_length\r\njump :cnNotFound-%%%~%%%\r\n:cnFound-%%%~%%%\r\n# Set the reference to the certificate\r\nset certInstanceId wsman_answer.AMT_PublicKeyCertificate.responses.{i}.InstanceID\r\nset certHandle \"%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_PublicKeyCertificate%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22InstanceID%22%3E{certInstanceId}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\n# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%FQDN%%%%22,%22InfoFormat%22:%22201%22,%22Port%22:%%%Port%%%,%22AuthMethod%22:%221%22%7D\"\r\nset wsargs.Certificate certHandle\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Prescence Server (MPS) successfully added to the Intel(R) AMT Subsystem\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:cnNotFound-%%%~%%%\r\nprint \"Couldn't find a certificate matching the value of CN=%%%CN%%%\"\r\n:error-%%%~%%%\r\nprint \"Call failed with error {wsman_result}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset certHandle\r\nset curSubject\r\nset i\r\nset pos\r\nset ws_general_query\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset certInstanceId\r\nset wsman_ans_length",
+ "code": "# Get the input from user for the CN to look for\r\n# Get available certificates\r\nsplit ws_general_query \"AMT_PublicKeyCertificate\" ,\r\nwsbatchenum \"wsman_answer\" ws_general_query\r\nlength wsman_ans_length wsman_answer.AMT_PublicKeyCertificate.responses\r\nset i 0\r\n:loop_ans-%%%~%%%\r\n# Get the current subject name\r\nset curSubject wsman_answer.AMT_PublicKeyCertificate.responses.{i}.Subject\r\nIndexOf pos curSubject \"CN=%%%CN%%%\" \r\njump :cnFound-%%%~%%% pos \">=\" 0\r\nadd i i 1\r\njump :loop_ans-%%%~%%% i \"<\" wsman_ans_length\r\njump :cnNotFound-%%%~%%%\r\n:cnFound-%%%~%%%\r\n# Set the reference to the certificate\r\nset certInstanceId wsman_answer.AMT_PublicKeyCertificate.responses.{i}.InstanceID\r\nset certHandle \"%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_PublicKeyCertificate%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22InstanceID%22%3E{certInstanceId}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\n# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%FQDN%%%%22,%22InfoFormat%22:%22201%22,%22Port%22:%%%Port%%%,%22AuthMethod%22:%221%22%7D\"\r\nset wsargs.Certificate certHandle\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Presence Server (MPS) successfully added\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:cnNotFound-%%%~%%%\r\nprint \"Couldn't find a certificate matching the value of CN=%%%CN%%%\"\r\n:error-%%%~%%%\r\nprint \"Call failed with error {wsman_result}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset certHandle\r\nset curSubject\r\nset i\r\nset pos\r\nset ws_general_query\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset certInstanceId\r\nset wsman_ans_length",
"vars": {
"FQDN": {
"name": "MPS Hostname",
@@ -545,7 +545,7 @@
"AMT-RemoteAccess-AddMpsServerFqdnUpa": {
"name": "Remote - Add MPS FQDN/User",
"desc": "Add a new CIRA server (MPS) using the server's hostname authentication using username/password",
- "code": "# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%FQDN%%%%22,%22InfoFormat%22:201,%22Port%22:%%%Port%%%,%22AuthMethod%22:2,%22Username%22:%22%%%username%%%%22,%22Password%22:%22%%%password%%%%22%7D\"\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Prescence Server (MPS) successfully added to the Intel(R) AMT Subsystem\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:error-%%%~%%%\r\nprint \"Call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset certHandle\r\nset curSubject\r\nset i\r\nset pos\r\nset ws_general_query\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset certInstanceId\r\nset wsman_ans_length",
+ "code": "# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%FQDN%%%%22,%22InfoFormat%22:201,%22Port%22:%%%Port%%%,%22AuthMethod%22:2,%22Username%22:%22%%%username%%%%22,%22Password%22:%22%%%password%%%%22%7D\"\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Presence Server (MPS) successfully added\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:error-%%%~%%%\r\nprint \"Call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset certHandle\r\nset curSubject\r\nset i\r\nset pos\r\nset ws_general_query\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset certInstanceId\r\nset wsman_ans_length",
"vars": {
"FQDN": {
"name": "MPS Hostname",
@@ -580,7 +580,7 @@
"AMT-RemoteAccess-AddMpsIpCertServer": {
"name": "Remote - Add MPS IP/Cert",
"desc": "Add a new CIRA server (MPS) using the server's IP address and authentication using certificate",
- "code": "# Get the input from user for the CN to look for\r\n# Get available certificates\r\nsplit ws_general_query \"AMT_PublicKeyCertificate\" ,\r\nwsbatchenum \"wsman_answer\" ws_general_query\r\nlength wsman_ans_length wsman_answer.AMT_PublicKeyCertificate.responses\r\nset i 0\r\n:loop_ans-%%%~%%%\r\n# Get the current subject name\r\nset curSubject wsman_answer.AMT_PublicKeyCertificate.responses.{i}.Subject\r\nIndexOf pos curSubject \"CN=%%%CN%%%\" \r\njump :cnFound-%%%~%%% pos \">=\" 0\r\nadd i i 1\r\njump :loop_ans-%%%~%%% i \"<\" wsman_ans_length\r\njump :cnNotFound-%%%~%%%\r\n:cnFound-%%%~%%%\r\n# Set the reference to the certificate\r\nset certInstanceId wsman_answer.AMT_PublicKeyCertificate.responses.{i}.InstanceID\r\nset certHandle \"%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_PublicKeyCertificate%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22InstanceID%22%3E{certInstanceId}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\n# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%IP%%%%22,%22InfoFormat%22:%223%22,%22Port%22:%%%Port%%%,%22AuthMethod%22:%221%22%7D\"\r\nset wsargs.Certificate certHandle\r\nset wsargs.CN \"%%%ServerName%%%\"\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Prescence Server (MPS) successfully added to the Intel(R) AMT Subsystem\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:cnNotFound-%%%~%%%\r\nprint \"Couldn't find a certificate matching the value of CN=%%%CN%%%\"\r\n:error-%%%~%%%\r\nprint \"Call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset certHandle\r\nset curSubject\r\nset i\r\nset pos\r\nset ws_general_query\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset certInstanceId\r\nset wsman_ans_length",
+ "code": "# Get the input from user for the CN to look for\r\n# Get available certificates\r\nsplit ws_general_query \"AMT_PublicKeyCertificate\" ,\r\nwsbatchenum \"wsman_answer\" ws_general_query\r\nlength wsman_ans_length wsman_answer.AMT_PublicKeyCertificate.responses\r\nset i 0\r\n:loop_ans-%%%~%%%\r\n# Get the current subject name\r\nset curSubject wsman_answer.AMT_PublicKeyCertificate.responses.{i}.Subject\r\nIndexOf pos curSubject \"CN=%%%CN%%%\" \r\njump :cnFound-%%%~%%% pos \">=\" 0\r\nadd i i 1\r\njump :loop_ans-%%%~%%% i \"<\" wsman_ans_length\r\njump :cnNotFound-%%%~%%%\r\n:cnFound-%%%~%%%\r\n# Set the reference to the certificate\r\nset certInstanceId wsman_answer.AMT_PublicKeyCertificate.responses.{i}.InstanceID\r\nset certHandle \"%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_PublicKeyCertificate%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22InstanceID%22%3E{certInstanceId}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\n# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%IP%%%%22,%22InfoFormat%22:%223%22,%22Port%22:%%%Port%%%,%22AuthMethod%22:%221%22%7D\"\r\nset wsargs.Certificate certHandle\r\nset wsargs.CN \"%%%ServerName%%%\"\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Presence Server (MPS) successfully added\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:cnNotFound-%%%~%%%\r\nprint \"Couldn't find a certificate matching the value of CN=%%%CN%%%\"\r\n:error-%%%~%%%\r\nprint \"Call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset certHandle\r\nset curSubject\r\nset i\r\nset pos\r\nset ws_general_query\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset certInstanceId\r\nset wsman_ans_length",
"vars": {
"IP": {
"name": "IPv4 Address",
@@ -615,7 +615,7 @@
"AMT-RemoteAccess-AddMpsIpUpa": {
"name": "Remote - Add MPS IP/User",
"desc": "Add a new CIRA server (MPS) using the servers IP address and authenticating using a username/password",
- "code": "# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%IP%%%%22,%22InfoFormat%22:%223%22,%22Port%22:%%%Port%%%,%22AuthMethod%22:%222%22,%22Username%22:%22%%%username%%%%22,%22Password%22:%22%%%password%%%%22%7D\"\r\nset wsargs.CN \"%%%ServerName%%%\"\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Prescence Server (MPS) successfully added to the Intel(R) AMT Subsystem\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:error-%%%~%%%\r\nprint \"Call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset wsman_ans_length",
+ "code": "# Set method parameters\r\njsonparse wsargs \"%7B%22AccessInfo%22:%22%%%IP%%%%22,%22InfoFormat%22:%223%22,%22Port%22:%%%Port%%%,%22AuthMethod%22:%222%22,%22Username%22:%22%%%username%%%%22,%22Password%22:%22%%%password%%%%22%7D\"\r\nset wsargs.CN \"%%%ServerName%%%\"\r\n# Execute call to AddMpServer\r\nwsexec \"AMT_RemoteAccessService\" \"AddMpServer\" wsargs \"\"\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Management Presence Server (MPS) successfully added\"\r\nset PullRemoteAccess 1\r\njump :end-%%%~%%%\r\n:error-%%%~%%%\r\nprint \"Call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset AMT_RemoteAccessService\r\nset wsargs\r\nset wsman_answer\r\nset wsman_result\r\nset wsman_result_str\r\nset wsman_ans_length",
"vars": {
"IP": {
"name": "IPv4 Address",
@@ -678,13 +678,13 @@
"AMT-RemoteAccess-RemoveAll-MPS": {
"name": "Remote - Remove All MPS",
"desc": "Remove all MPS",
- "vars": {},
- "code": "split ws_general_query \"AMT_ManagementPresenceRemoteSAP\" ,\nwsbatchenum \"wsman_answer\" ws_general_query\nset i 0\nset arr wsman_answer.AMT_ManagementPresenceRemoteSAP.responses\nLength arr_len arr\n:loop-%%%~%%%\nset instanceName wsman_answer.AMT_ManagementPresenceRemoteSAP.responses.{i}.Name\nset selector \"%3Cw:SelectorSet%3E%3Cw:Selector%20Name=%22Name%22%3E{instanceName}%3C/w:Selector%3E%3C/w:SelectorSet%3E\"\nwsdelete \"AMT_ManagementPresenceRemoteSAP\" selector\nadd i i 1\njump :loop-%%%~%%% i \"<\" arr_len\n:end-%%%~%%%\nset AMT_ManagementPresenceRemoteSAP\nset arr\nset i\nset instanceName\nset selector\nset ws_general_query\nset wsman_answer\nset wsman_result\nset wsman_result_str\nset arr_len\nset PullRemoteAccess 1\n"
+ "vars": { },
+ "code": "split ws_general_query \"AMT_ManagementPresenceRemoteSAP\" ,\nwsbatchenum \"wsman_answer\" ws_general_query\nset i 0\nset arr wsman_answer.AMT_ManagementPresenceRemoteSAP.responses\nLength arr_len arr\njump :end-%%%~%%% arr_len \"=\" 0\n:loop-%%%~%%%\nset instanceName wsman_answer.AMT_ManagementPresenceRemoteSAP.responses.{i}.Name\nset selector \"%3Cw:SelectorSet%3E%3Cw:Selector%20Name=%22Name%22%3E{instanceName}%3C/w:Selector%3E%3C/w:SelectorSet%3E\"\nwsdelete \"AMT_ManagementPresenceRemoteSAP\" selector\nadd i i 1\njump :loop-%%%~%%% i \"<\" arr_len\n:end-%%%~%%%\nset AMT_ManagementPresenceRemoteSAP\nset arr\nset i\nset instanceName\nset selector\nset ws_general_query\nset wsman_answer\nset wsman_result\nset wsman_result_str\nset arr_len\nset PullRemoteAccess 1\n\n"
},
"AMT-RemoteAccess-AddRemoteAccessPolicyRule": {
"name": "Remote - Add Trigger (User / Alert)",
"desc": "Set a remote access trigger policy, used to establish a secure tunnel between a management console and the Intel AMT platform.",
- "code": "# *** Prepare arguments for AMT_RemoteAccessService.AddRemoteAccessPolicyRule ***\r\njsonparse ws_args \"%7B%22Trigger%22:%220%22,%22TunnelLifeTime%22:%22%%%tLifeTime%%%%22%7D\"\r\n# *** Verify valid input ***\r\njump :VALID_INPUT \"%%%AccessInfo1%%%\" \"!=\" \"\"\r\nprint \"ERROR: Field %22AccessInfo1%22 must not be empty, aborting operation...\"\r\njump :end-%%%~%%%\r\n:VALID_INPUT\r\n# *** Set a EPR selector matching user input ***\r\nsplit ws_general_query \"AMT_ManagementPresenceRemoteSAP\" ,\r\nwsbatchenum \"wsman_answer\" ws_general_query\r\nset i 0\r\nset arr wsman_answer.AMT_ManagementPresenceRemoteSAP.responses\r\nLength arr_len arr\r\nset mpsEpr1 \"*\"\r\nset mpsEpr2 \"*\"\r\n:loop-%%%~%%%\r\nset curAccessInfo arr.{i}.AccessInfo\r\nadd curAccessInfo curAccessInfo \":\"\r\nadd curAccessInfo curAccessInfo arr.{i}.Port\r\njump :MPS1_NO_MATCH curAccessInfo \"!=\" \"%%%AccessInfo1%%%\"\r\nset mpsEpr1 wsman_answer.AMT_ManagementPresenceRemoteSAP.responses.{i}.Name\r\nprint \"Found matching (primary) mps: {mpsEpr1}\"\r\njump :MPS2_NOTSET \"%%%AccessInfo2%%%\" \"=\" \"\"\r\n:MPS1_NO_MATCH\r\njump :MPS2_NO_MATCH curAccessInfo \"!=\" \"%%%AccessInfo2%%%\"\r\nset mpsEpr2 wsman_answer.AMT_ManagementPresenceRemoteSAP.responses.{i}.Name\r\nprint \"Found matching (secondary) mps: {mpsEpr2}\"\r\n:MPS2_NO_MATCH\r\nadd i i 1\r\njump :loop-%%%~%%% i \"<\" arr_len\r\n:MPS2_NOTSET\r\njump :MPS1_FOUND mpsEpr1 \"!=\" \"*\"\r\nprint \"ERROR: MPS server: %22%%%AccessInfo1%%%%22 could not be found, aborting operation...\"\r\njump :end-%%%~%%%\r\n:MPS1_FOUND\r\njump :MPS2_FOUND \"%%%AccessInfo2%%%\" \"=\" \"\"\r\njump :MPS2_FOUND mpsEpr2 \"!=\" \"*\"\r\nprint \"ERROR: MPS server: %22%%%AccessInfo2%%%%22 could not be found, aborting operation...\"\r\njump :end-%%%~%%%\r\n:MPS2_FOUND\r\nprint \"Setting policy...\"\r\njsonparse ws_args.MpServer \"%7B%7D\"\r\nset MpServer \"%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_ManagementPresenceRemoteSAP%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22Name%22%3E{mpsEpr1}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\njump :SKIP_ADD_MPS2 \"%%%AccessInfo2%%%\" \"=\" \"\"\r\nadd MpServer MpServer \"|%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_ManagementPresenceRemoteSAP%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22Name%22%3E{mpsEpr2}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\n:SKIP_ADD_MPS2\r\nsplit ws_args.MpServer MpServer \"|\"\r\n# *** Call AMT_RemoteAccessService.AddRemoteAccessPolicyRule with policy details. ***\r\nwsexec \"AMT_RemoteAccessService\" \"AddRemoteAccessPolicyRule\" ws_args selector\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Policy addedd successfully\"\r\njump :end-%%%~%%%\r\n:error-%%%~%%%\r\nprint \"WSMAN call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset PullRemoteAccess 1\r\nset mpsEpr1\r\nset mpsEpr2\r\nset i\r\nset curAccessInfo\r\nset arr_len\r\nset MpServer\r\nset arr\r\nset AMT_RemoteAccessService\r\nset wsman_result\r\nset wsman_result_str\r\nset ws_args\r\nset ws_general_query\r\nset wsman_answer",
+ "code": "# *** Prepare arguments for AMT_RemoteAccessService.AddRemoteAccessPolicyRule ***\r\njsonparse ws_args \"%7B%22Trigger%22:%220%22,%22TunnelLifeTime%22:%22%%%tLifeTime%%%%22%7D\"\r\n# *** Verify valid input ***\r\njump :VALID_INPUT \"%%%AccessInfo1%%%\" \"!=\" \"\"\r\nprint \"ERROR: Field %22AccessInfo1%22 must not be empty, aborting operation...\"\r\njump :end-%%%~%%%\r\n:VALID_INPUT\r\n# *** Set a EPR selector matching user input ***\r\nsplit ws_general_query \"AMT_ManagementPresenceRemoteSAP\" ,\r\nwsbatchenum \"wsman_answer\" ws_general_query\r\nset i 0\r\nset arr wsman_answer.AMT_ManagementPresenceRemoteSAP.responses\r\nLength arr_len arr\r\nset mpsEpr1 \"*\"\r\nset mpsEpr2 \"*\"\r\n:loop-%%%~%%%\r\nset curAccessInfo arr.{i}.AccessInfo\r\nadd curAccessInfo curAccessInfo \":\"\r\nadd curAccessInfo curAccessInfo arr.{i}.Port\r\njump :MPS1_NO_MATCH curAccessInfo \"!=\" \"%%%AccessInfo1%%%\"\r\nset mpsEpr1 wsman_answer.AMT_ManagementPresenceRemoteSAP.responses.{i}.Name\r\nprint \"Found matching (primary) mps: {mpsEpr1}\"\r\njump :MPS2_NOTSET \"%%%AccessInfo2%%%\" \"=\" \"\"\r\n:MPS1_NO_MATCH\r\njump :MPS2_NO_MATCH curAccessInfo \"!=\" \"%%%AccessInfo2%%%\"\r\nset mpsEpr2 wsman_answer.AMT_ManagementPresenceRemoteSAP.responses.{i}.Name\r\nprint \"Found matching (secondary) mps: {mpsEpr2}\"\r\n:MPS2_NO_MATCH\r\nadd i i 1\r\njump :loop-%%%~%%% i \"<\" arr_len\r\n:MPS2_NOTSET\r\njump :MPS1_FOUND mpsEpr1 \"!=\" \"*\"\r\nprint \"ERROR: MPS server: %22%%%AccessInfo1%%%%22 could not be found, aborting operation...\"\r\njump :end-%%%~%%%\r\n:MPS1_FOUND\r\njump :MPS2_FOUND \"%%%AccessInfo2%%%\" \"=\" \"\"\r\njump :MPS2_FOUND mpsEpr2 \"!=\" \"*\"\r\nprint \"ERROR: MPS server: %22%%%AccessInfo2%%%%22 could not be found, aborting operation...\"\r\njump :end-%%%~%%%\r\n:MPS2_FOUND\r\nprint \"Setting policy...\"\r\njsonparse ws_args.MpServer \"%7B%7D\"\r\nset MpServer \"%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_ManagementPresenceRemoteSAP%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22Name%22%3E{mpsEpr1}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\njump :SKIP_ADD_MPS2 \"%%%AccessInfo2%%%\" \"=\" \"\"\r\nadd MpServer MpServer \"|%3CAddress%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3Ehttp://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous%3C/Address%3E%3CReferenceParameters%20xmlns=%22http://schemas.xmlsoap.org/ws/2004/08/addressing%22%3E%3CResourceURI%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3Ehttp://intel.com/wbem/wscim/1/amt-schema/1/AMT_ManagementPresenceRemoteSAP%3C/ResourceURI%3E%3CSelectorSet%20xmlns=%22http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd%22%3E%3CSelector%20Name=%22Name%22%3E{mpsEpr2}%3C/Selector%3E%3C/SelectorSet%3E%3C/ReferenceParameters%3E\"\r\n:SKIP_ADD_MPS2\r\nsplit ws_args.MpServer MpServer \"|\"\r\n# *** Call AMT_RemoteAccessService.AddRemoteAccessPolicyRule with policy details. ***\r\nwsexec \"AMT_RemoteAccessService\" \"AddRemoteAccessPolicyRule\" ws_args selector\r\njump :error-%%%~%%% wsman_result \"!=\" 200\r\nprint \"Policy added successfully\"\r\njump :end-%%%~%%%\r\n:error-%%%~%%%\r\nprint \"WSMAN call failed: {wsman_result_str}\"\r\n:end-%%%~%%%\r\nset PullRemoteAccess 1\r\nset mpsEpr1\r\nset mpsEpr2\r\nset i\r\nset curAccessInfo\r\nset arr_len\r\nset MpServer\r\nset arr\r\nset AMT_RemoteAccessService\r\nset wsman_result\r\nset wsman_result_str\r\nset ws_args\r\nset ws_general_query\r\nset wsman_answer",
"vars": {
"AccessInfo1": {
"name": "MPS 1 Address",
@@ -722,7 +722,7 @@
"AMT-RemoteAccess-AddRemoteAccessPolicyRule2": {
"name": "Remote - Add Trigger (Periodic)",
"desc": "Set a remote access trigger policy, used to establish a secure tunnel between a management console and the Intel AMT platform.",
- "code": "# *** Verify valid input ***\r\nsplit period_arr \"%%%Period%%%\" \":\"\r\nlength period_arr_len period_arr\r\njump :INVALID_ARG_AccessInfo1 \"%%%AccessInfo1%%%\" \"=\" \"\"\r\njump :DailyPeriod \"%%%PeriodType%%%\" \"!=\" \"0\"\r\njump :INVALID_PeriodType \"%%%PeriodType%%%\" \"!=\" \"0\"\r\njump :INVALID_ARG_Period period_arr.0 \"<=\" \"0\"\r\njump :INVALID_ARG_Period period_arr.0 \">\" \"4294967295\"\r\nIntToStr extendedData \"0\"\r\nIntToStr bPeriod period_arr.0\r\nadd extendedData extendedData bPeriod\r\njump :SET_PERIOD\r\n:DailyPeriod\r\njump :INVALID_PeriodType period_arr_len \"!=\" \"2\"\r\njump :INVALID_ARG_PeriodDaily period_arr.0 \"<=\" \"0\"\r\njump :INVALID_ARG_PeriodDaily period_arr.0 \">\" \"23\"\r\njump :INVALID_ARG_PeriodDaily period_arr.1 \">\" \"59\"\r\njump :INVALID_ARG_PeriodDaily period_arr.1 \"<=\" \"0\"\r\nIntToStr extendedData \"1\"\r\nIntToStr bPeriodHour period_arr.0\r\nIntToStr bPeriodMinute period_arr.1\r\nadd extendedData extendedData bPeriodHour\r\nadd extendedData extendedData bPeriodMinute\r\njump :SET_PERIOD\r\n:INVALID_PeriodType\r\nprint \"ERROR: The period type and value must correspond, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_PeriodDaily\r\nprint \"ERROR: Field %22Period%22 must be a value HH:MM 0<=HH<24 && 0<=MM<60, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_AccessInfo1\r\nprint \"ERROR: Field %22AccessInfo1%22 must not be empty, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_Period\r\nprint \"ERROR: Field %22Period%22 must be a value 0<=t\" \"4294967295\"\r\nIntToStr extendedData \"0\"\r\nIntToStr bPeriod period_arr.0\r\nadd extendedData extendedData bPeriod\r\njump :SET_PERIOD\r\n:DailyPeriod\r\njump :INVALID_PeriodType period_arr_len \"!=\" \"2\"\r\njump :INVALID_ARG_PeriodDaily period_arr.0 \"<=\" \"0\"\r\njump :INVALID_ARG_PeriodDaily period_arr.0 \">\" \"23\"\r\njump :INVALID_ARG_PeriodDaily period_arr.1 \">\" \"59\"\r\njump :INVALID_ARG_PeriodDaily period_arr.1 \"<=\" \"0\"\r\nIntToStr extendedData \"1\"\r\nIntToStr bPeriodHour period_arr.0\r\nIntToStr bPeriodMinute period_arr.1\r\nadd extendedData extendedData bPeriodHour\r\nadd extendedData extendedData bPeriodMinute\r\njump :SET_PERIOD\r\n:INVALID_PeriodType\r\nprint \"ERROR: The period type and value must correspond, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_PeriodDaily\r\nprint \"ERROR: Field %22Period%22 must be a value HH:MM 0<=HH<24 && 0<=MM<60, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_AccessInfo1\r\nprint \"ERROR: Field %22AccessInfo1%22 must not be empty, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_Period\r\nprint \"ERROR: Field %22Period%22 must be a value 0<=t\" \"4294967295\"\r\nIntToStr extendedData \"0\"\r\nIntToStr bPeriod period_arr.0\r\nadd extendedData extendedData bPeriod\r\njump :SET_PERIOD\r\n:DailyPeriod\r\njump :INVALID_PeriodType period_arr_len \"!=\" \"2\"\r\njump :INVALID_ARG_PeriodDaily period_arr.0 \"<=\" \"0\"\r\njump :INVALID_ARG_PeriodDaily period_arr.0 \">\" \"23\"\r\njump :INVALID_ARG_PeriodDaily period_arr.1 \">\" \"59\"\r\njump :INVALID_ARG_PeriodDaily period_arr.1 \"<=\" \"0\"\r\nIntToStr extendedData \"1\"\r\nIntToStr bPeriodHour period_arr.0\r\nIntToStr bPeriodMinute period_arr.1\r\nadd extendedData extendedData bPeriodHour\r\nadd extendedData extendedData bPeriodMinute\r\njump :SET_PERIOD\r\n:INVALID_PeriodType\r\nprint \"ERROR: The period type and value must correspond, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_PeriodDaily\r\nprint \"ERROR: Field %22Period%22 must be a value HH:MM 0<=HH<24 && 0<=MM<60, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_AccessInfo1\r\nprint \"ERROR: Field %22AccessInfo1%22 must not be empty, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_Period\r\nprint \"ERROR: Field %22Period%22 must be a value 0<=t\" \"4294967295\"\r\nIntToStr extendedData \"0\"\r\nIntToStr bPeriod period_arr.0\r\nadd extendedData extendedData bPeriod\r\njump :SET_PERIOD\r\n:DailyPeriod\r\njump :INVALID_PeriodType period_arr_len \"!=\" \"2\"\r\njump :INVALID_ARG_PeriodDaily period_arr.0 \"<=\" \"0\"\r\njump :INVALID_ARG_PeriodDaily period_arr.0 \">\" \"23\"\r\njump :INVALID_ARG_PeriodDaily period_arr.1 \">\" \"59\"\r\njump :INVALID_ARG_PeriodDaily period_arr.1 \"<=\" \"0\"\r\nIntToStr extendedData \"1\"\r\nIntToStr bPeriodHour period_arr.0\r\nIntToStr bPeriodMinute period_arr.1\r\nadd extendedData extendedData bPeriodHour\r\nadd extendedData extendedData bPeriodMinute\r\njump :SET_PERIOD\r\n:INVALID_PeriodType\r\nprint \"ERROR: The period type and value must correspond, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_PeriodDaily\r\nprint \"ERROR: Field %22Period%22 must be a value HH:MM 0<=HH<24 && 0<=MM<60, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_AccessInfo1\r\nprint \"ERROR: Field %22AccessInfo1%22 must not be empty, aborting operation...\"\r\njump :end-%%%~%%%\r\n:INVALID_ARG_Period\r\nprint \"ERROR: Field %22Period%22 must be a value 0<=t= 0)?'\r\n':'\r'; // On windows, send \r\n, on Linux only \r
terminal.attemptWebRTC = attemptWebRTC;
terminal.onStateChanged = onTerminalStateChange;
terminal.Start(terminalNode._id);
diff --git a/webserver.js b/webserver.js
index 12c0efec..1494ded0 100644
--- a/webserver.js
+++ b/webserver.js
@@ -1104,7 +1104,7 @@ module.exports.CreateWebServer = function (parent, db, args, secret, certificate
});
// If error, do nothing
- ws.on('error', function (err) { console.log(err); });
+ ws.on('error', function (err) { console.log('WEBSERVER WSERR1: ' + err); });
// If the web socket is closed, close the associated TCP connection.
ws.on('close', function (req) {
@@ -1156,7 +1156,7 @@ module.exports.CreateWebServer = function (parent, db, args, secret, certificate
});
// If error, do nothing
- ws.on('error', function (err) { console.log(err); });
+ ws.on('error', function (err) { console.log('WEBSERVER WSERR2: ' + err); });
// If the web socket is closed, close the associated TCP connection.
ws.on('close', function (req) {
@@ -1244,7 +1244,7 @@ module.exports.CreateWebServer = function (parent, db, args, secret, certificate
});
// If error, do nothing
- ws.on('error', function (err) { console.log(err); });
+ ws.on('error', function (err) { console.log('WEBSERVER WSERR3: ' + err); });
// If closed, do nothing
ws.on('close', function (req) { });