Script error at automatic apply rule - Bad arithmetic conversion

Started by Spheron, October 16, 2017, 12:26:37 PM

Previous topic - Next topic

Spheron

Hello @all,

i use the following script as automatic apply rule in a template (NetXMS V2.1.2):


if ( (! $node->isAgent) && (! $node->platformName ~= "windows.*") ) return false;

table = AgentReadTable($node, "System.Services");
if ( table == null ) return false;

colName = table->getColumnIndex("NAME");
for (currentRow = 0; currentRow < table->rowCount; currentRow++)
{
if ( table->get(currentRow, colName) == "DNS" ) return true;
}

return false;



Everytime the script is processed automaticly at a node the following event is thrown:

   Script (Template::Server Service DNS::730) execution error: Error 4 in line 1: Bad arithmetic conversion

but the script is proccessed correctly.


If i create this script in script library and test the script with "Execute Server Script" with a node, there is no error...

Where is my fault?  Thanks for helping me...


Greets
Marco


Victor Kirhenshtein

Hi!

"logical not" operation (!) has higher priority than "match" operation (~=). So your script actually does logical not on text string ($node->platformName) which causes runtime error. It only happens on nodes without agent. You should get match operation in brackets:

(!($node->platformName ~= "windows.*"))

Also, I suspect you have logical error here. You probably want to return false if there is no agent OR platform is not Windows - but current condition uses AND which is pointless - if node has no agent platform name will be empty anyway and won't match anyway.

Best regards,
Victor

Spheron