<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.netxms.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Borgso</id>
	<title>NetXMS Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.netxms.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Borgso"/>
	<link rel="alternate" type="text/html" href="https://wiki.netxms.org/wiki/Special:Contributions/Borgso"/>
	<updated>2026-04-18T07:45:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.4</generator>
	<entry>
		<id>https://wiki.netxms.org/index.php?title=Web_service_API&amp;diff=1783</id>
		<title>Web service API</title>
		<link rel="alternate" type="text/html" href="https://wiki.netxms.org/index.php?title=Web_service_API&amp;diff=1783"/>
		<updated>2021-09-03T07:21:50Z</updated>

		<summary type="html">&lt;p&gt;Borgso: /* Get Objects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Web service API provides access to NetXMS via HTTP/HTTPS. API calls are REST-like (although not purely RESTful) and uses JSON for data exchange.&lt;br /&gt;
&lt;br /&gt;
= Session Management =&lt;br /&gt;
&lt;br /&gt;
== Login ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;POST&amp;#039;&amp;#039;&amp;#039; /sessions&lt;br /&gt;
&lt;br /&gt;
Create new session. Input object fields:&lt;br /&gt;
&lt;br /&gt;
login&lt;br /&gt;
password&lt;br /&gt;
&lt;br /&gt;
On success server will set cookie &amp;#039;&amp;#039;&amp;#039;session_handle&amp;#039;&amp;#039;&amp;#039; which should be passed on each subsequent request.&lt;br /&gt;
&lt;br /&gt;
== Logout ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DELETE&amp;#039;&amp;#039;&amp;#039; /session/&amp;#039;&amp;#039;sid&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Logout (delete session) with given session ID.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Object Management =&lt;br /&gt;
&lt;br /&gt;
== Get Objects ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; /objects&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; /objects?&amp;#039;&amp;#039;filter&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Get all objects visible to logged in user. Optional filter can define additional criteria for object selection:&lt;br /&gt;
&lt;br /&gt;
area=&amp;#039;&amp;#039;geographical_area&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
class=&amp;#039;&amp;#039;class_list&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
name=&amp;#039;&amp;#039;pattern&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Examples&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Get all objects with name starting with &amp;quot;T&amp;quot;:&lt;br /&gt;
 GET /objects?name=T*&lt;br /&gt;
&lt;br /&gt;
Get all nodes around Riga:&lt;br /&gt;
 GET /objects?class=node&amp;amp;area=57.0592,23.1647,56.8270,24.6025&lt;br /&gt;
&lt;br /&gt;
Get all nodes and containers:&lt;br /&gt;
 GET /objects?class=container,node&lt;br /&gt;
&lt;br /&gt;
Get DCI Summary adHoc&lt;br /&gt;
 POST /summaryTable/adHoc&lt;br /&gt;
&lt;br /&gt;
Post payload:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;baseObject&amp;quot;:&amp;quot;ContainerName&amp;quot;,&lt;br /&gt;
    &amp;quot;multiInstance&amp;quot;:false,&lt;br /&gt;
    &amp;quot;columns&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
        &amp;quot;columnName&amp;quot;:&amp;quot;Free form name that will be used in return table for this column&amp;quot;,&lt;br /&gt;
        &amp;quot;dciName&amp;quot;:&amp;quot;Name of DCI, that will be used for filtering&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
        &amp;quot;columnName&amp;quot;:&amp;quot;Name2&amp;quot;,&lt;br /&gt;
        &amp;quot;dciName&amp;quot;:&amp;quot;DCIName2&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Get Specific Object ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; /objects/&amp;#039;&amp;#039;id&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Get Last Values for Object ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; objects/&amp;#039;&amp;#039;id&amp;#039;&amp;#039;/lastvalues&lt;br /&gt;
&lt;br /&gt;
== CURL Test ==&lt;br /&gt;
&lt;br /&gt;
Test API with Curl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X POST --data &amp;#039;{&amp;quot;login&amp;quot;:&amp;quot;user&amp;quot;,&amp;quot;password&amp;quot;:&amp;quot;pass&amp;quot;}&amp;#039; &amp;quot;http://localhost:8080/netxms-websvc/sessions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;sessionHandle&amp;quot;: &amp;quot;8338e7f3-ba99-46c5-9fd6-84b38cc5d715&amp;quot;,&lt;br /&gt;
  &amp;quot;session&amp;quot;: {&lt;br /&gt;
    &amp;quot;server&amp;quot;: {&lt;br /&gt;
      &amp;quot;address&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
      &amp;quot;version&amp;quot;: &amp;quot;2.2.8&amp;quot;,&lt;br /&gt;
      &amp;quot;color&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;id&amp;quot;: 3283229296059149299,&lt;br /&gt;
      &amp;quot;timeZone&amp;quot;: &amp;quot;CET+02CEST&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;user&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;user&amp;quot;,&lt;br /&gt;
      &amp;quot;id&amp;quot;: 8,&lt;br /&gt;
      &amp;quot;globalAccessRights&amp;quot;: 825439032336&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;encrypted&amp;quot;: false,&lt;br /&gt;
    &amp;quot;objectsSynchronized&amp;quot;: false,&lt;br /&gt;
    &amp;quot;passwordExpired&amp;quot;: false,&lt;br /&gt;
    &amp;quot;zoningEnabled&amp;quot;: false&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$ curl -X GET --cookie &amp;quot;session_handle=8338e7f3-ba99-46c5-9fd6-84b38cc5d715&amp;quot; &amp;quot;http://localhost:8080/netxms-websvc/objects?class=container,node&amp;quot;&lt;br /&gt;
&lt;br /&gt;
.. prints some data ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Java 10 =&lt;br /&gt;
&lt;br /&gt;
If curl test works but grafana returns &amp;quot;Internal error&amp;quot; ({&amp;quot;description&amp;quot;:&amp;quot;Internal error&amp;quot;,&amp;quot;error&amp;quot;:46}&amp;quot;)&amp;lt;br&amp;gt;&lt;br /&gt;
Add &amp;quot;--add-modules java.xml.bind&amp;quot; to JAVA_OPTS in /etc/default/tomcat8&lt;/div&gt;</summary>
		<author><name>Borgso</name></author>
	</entry>
	<entry>
		<id>https://wiki.netxms.org/index.php?title=Web_service_API&amp;diff=1782</id>
		<title>Web service API</title>
		<link rel="alternate" type="text/html" href="https://wiki.netxms.org/index.php?title=Web_service_API&amp;diff=1782"/>
		<updated>2021-09-03T07:21:37Z</updated>

		<summary type="html">&lt;p&gt;Borgso: /* CURL Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Web service API provides access to NetXMS via HTTP/HTTPS. API calls are REST-like (although not purely RESTful) and uses JSON for data exchange.&lt;br /&gt;
&lt;br /&gt;
= Session Management =&lt;br /&gt;
&lt;br /&gt;
== Login ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;POST&amp;#039;&amp;#039;&amp;#039; /sessions&lt;br /&gt;
&lt;br /&gt;
Create new session. Input object fields:&lt;br /&gt;
&lt;br /&gt;
login&lt;br /&gt;
password&lt;br /&gt;
&lt;br /&gt;
On success server will set cookie &amp;#039;&amp;#039;&amp;#039;session_handle&amp;#039;&amp;#039;&amp;#039; which should be passed on each subsequent request.&lt;br /&gt;
&lt;br /&gt;
== Logout ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DELETE&amp;#039;&amp;#039;&amp;#039; /session/&amp;#039;&amp;#039;sid&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Logout (delete session) with given session ID.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Object Management =&lt;br /&gt;
&lt;br /&gt;
== Get Objects ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; /objects&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; /objects?&amp;#039;&amp;#039;filter&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Get all objects visible to logged in user. Optional filter can define additional criteria for object selection:&lt;br /&gt;
&lt;br /&gt;
area=&amp;#039;&amp;#039;geographical_area&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
class=&amp;#039;&amp;#039;class_list&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
name=&amp;#039;&amp;#039;pattern&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Examples&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Get all objects with name starting with &amp;quot;T&amp;quot;:&lt;br /&gt;
 GET /objects?name=T*&lt;br /&gt;
&lt;br /&gt;
Get all nodes around Riga:&lt;br /&gt;
 GET /objects?class=node&amp;amp;area=57.0592,23.1647,56.8270,24.6025&lt;br /&gt;
&lt;br /&gt;
Get all nodes and containers:&lt;br /&gt;
 GET /objects?class=container,node&lt;br /&gt;
&lt;br /&gt;
== Get Specific Object ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; /objects/&amp;#039;&amp;#039;id&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Get Last Values for Object ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; objects/&amp;#039;&amp;#039;id&amp;#039;&amp;#039;/lastvalues&lt;br /&gt;
&lt;br /&gt;
== CURL Test ==&lt;br /&gt;
&lt;br /&gt;
Test API with Curl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X POST --data &amp;#039;{&amp;quot;login&amp;quot;:&amp;quot;user&amp;quot;,&amp;quot;password&amp;quot;:&amp;quot;pass&amp;quot;}&amp;#039; &amp;quot;http://localhost:8080/netxms-websvc/sessions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;sessionHandle&amp;quot;: &amp;quot;8338e7f3-ba99-46c5-9fd6-84b38cc5d715&amp;quot;,&lt;br /&gt;
  &amp;quot;session&amp;quot;: {&lt;br /&gt;
    &amp;quot;server&amp;quot;: {&lt;br /&gt;
      &amp;quot;address&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
      &amp;quot;version&amp;quot;: &amp;quot;2.2.8&amp;quot;,&lt;br /&gt;
      &amp;quot;color&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;id&amp;quot;: 3283229296059149299,&lt;br /&gt;
      &amp;quot;timeZone&amp;quot;: &amp;quot;CET+02CEST&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;user&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;user&amp;quot;,&lt;br /&gt;
      &amp;quot;id&amp;quot;: 8,&lt;br /&gt;
      &amp;quot;globalAccessRights&amp;quot;: 825439032336&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;encrypted&amp;quot;: false,&lt;br /&gt;
    &amp;quot;objectsSynchronized&amp;quot;: false,&lt;br /&gt;
    &amp;quot;passwordExpired&amp;quot;: false,&lt;br /&gt;
    &amp;quot;zoningEnabled&amp;quot;: false&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$ curl -X GET --cookie &amp;quot;session_handle=8338e7f3-ba99-46c5-9fd6-84b38cc5d715&amp;quot; &amp;quot;http://localhost:8080/netxms-websvc/objects?class=container,node&amp;quot;&lt;br /&gt;
&lt;br /&gt;
.. prints some data ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Java 10 =&lt;br /&gt;
&lt;br /&gt;
If curl test works but grafana returns &amp;quot;Internal error&amp;quot; ({&amp;quot;description&amp;quot;:&amp;quot;Internal error&amp;quot;,&amp;quot;error&amp;quot;:46}&amp;quot;)&amp;lt;br&amp;gt;&lt;br /&gt;
Add &amp;quot;--add-modules java.xml.bind&amp;quot; to JAVA_OPTS in /etc/default/tomcat8&lt;/div&gt;</summary>
		<author><name>Borgso</name></author>
	</entry>
	<entry>
		<id>https://wiki.netxms.org/index.php?title=Web_service_API&amp;diff=1781</id>
		<title>Web service API</title>
		<link rel="alternate" type="text/html" href="https://wiki.netxms.org/index.php?title=Web_service_API&amp;diff=1781"/>
		<updated>2021-09-03T07:19:33Z</updated>

		<summary type="html">&lt;p&gt;Borgso: /* CURL Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Web service API provides access to NetXMS via HTTP/HTTPS. API calls are REST-like (although not purely RESTful) and uses JSON for data exchange.&lt;br /&gt;
&lt;br /&gt;
= Session Management =&lt;br /&gt;
&lt;br /&gt;
== Login ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;POST&amp;#039;&amp;#039;&amp;#039; /sessions&lt;br /&gt;
&lt;br /&gt;
Create new session. Input object fields:&lt;br /&gt;
&lt;br /&gt;
login&lt;br /&gt;
password&lt;br /&gt;
&lt;br /&gt;
On success server will set cookie &amp;#039;&amp;#039;&amp;#039;session_handle&amp;#039;&amp;#039;&amp;#039; which should be passed on each subsequent request.&lt;br /&gt;
&lt;br /&gt;
== Logout ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DELETE&amp;#039;&amp;#039;&amp;#039; /session/&amp;#039;&amp;#039;sid&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Logout (delete session) with given session ID.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Object Management =&lt;br /&gt;
&lt;br /&gt;
== Get Objects ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; /objects&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; /objects?&amp;#039;&amp;#039;filter&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Get all objects visible to logged in user. Optional filter can define additional criteria for object selection:&lt;br /&gt;
&lt;br /&gt;
area=&amp;#039;&amp;#039;geographical_area&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
class=&amp;#039;&amp;#039;class_list&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
name=&amp;#039;&amp;#039;pattern&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Examples&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Get all objects with name starting with &amp;quot;T&amp;quot;:&lt;br /&gt;
 GET /objects?name=T*&lt;br /&gt;
&lt;br /&gt;
Get all nodes around Riga:&lt;br /&gt;
 GET /objects?class=node&amp;amp;area=57.0592,23.1647,56.8270,24.6025&lt;br /&gt;
&lt;br /&gt;
Get all nodes and containers:&lt;br /&gt;
 GET /objects?class=container,node&lt;br /&gt;
&lt;br /&gt;
== Get Specific Object ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; /objects/&amp;#039;&amp;#039;id&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Get Last Values for Object ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; objects/&amp;#039;&amp;#039;id&amp;#039;&amp;#039;/lastvalues&lt;br /&gt;
&lt;br /&gt;
== CURL Test ==&lt;br /&gt;
&lt;br /&gt;
Test API with Curl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X POST --data &amp;#039;{&amp;quot;login&amp;quot;:&amp;quot;user&amp;quot;,&amp;quot;password&amp;quot;:&amp;quot;pass&amp;quot;}&amp;#039; &amp;quot;http://localhost:8080/netxms-websvc/sessions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;sessionHandle&amp;quot;: &amp;quot;8338e7f3-ba99-46c5-9fd6-84b38cc5d715&amp;quot;,&lt;br /&gt;
  &amp;quot;session&amp;quot;: {&lt;br /&gt;
    &amp;quot;server&amp;quot;: {&lt;br /&gt;
      &amp;quot;address&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
      &amp;quot;version&amp;quot;: &amp;quot;2.2.8&amp;quot;,&lt;br /&gt;
      &amp;quot;color&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;id&amp;quot;: 3283229296059149299,&lt;br /&gt;
      &amp;quot;timeZone&amp;quot;: &amp;quot;CET+02CEST&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;user&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;user&amp;quot;,&lt;br /&gt;
      &amp;quot;id&amp;quot;: 8,&lt;br /&gt;
      &amp;quot;globalAccessRights&amp;quot;: 825439032336&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;encrypted&amp;quot;: false,&lt;br /&gt;
    &amp;quot;objectsSynchronized&amp;quot;: false,&lt;br /&gt;
    &amp;quot;passwordExpired&amp;quot;: false,&lt;br /&gt;
    &amp;quot;zoningEnabled&amp;quot;: false&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$ curl -X GET --cookie &amp;quot;session_handle=8338e7f3-ba99-46c5-9fd6-84b38cc5d715&amp;quot; &amp;quot;http://localhost:8080/netxms-websvc/objects?class=container,node&amp;quot;&lt;br /&gt;
&lt;br /&gt;
.. prints some data ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get DCI summary Adhoc:&lt;br /&gt;
&lt;br /&gt;
Save this as file, ie netxms.json:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;baseObject&amp;quot;:&amp;quot;ContainerName&amp;quot;,&lt;br /&gt;
    &amp;quot;multiInstance&amp;quot;:false,&lt;br /&gt;
    &amp;quot;columns&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
        &amp;quot;columnName&amp;quot;:&amp;quot;Free form name that will be used in return table for this column&amp;quot;,&lt;br /&gt;
        &amp;quot;dciName&amp;quot;:&amp;quot;Name of DCI, that will be used for filtering&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
        &amp;quot;columnName&amp;quot;:&amp;quot;Name2&amp;quot;,&lt;br /&gt;
        &amp;quot;dciName&amp;quot;:&amp;quot;DCIName2&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
curl -s -X POST --cookie &amp;quot;session_handle=$TOKEN&amp;quot; --data @netxms.json &amp;quot;http://localhost:8080/netxms-websvc/summaryTable/adHoc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= Java 10 =&lt;br /&gt;
&lt;br /&gt;
If curl test works but grafana returns &amp;quot;Internal error&amp;quot; ({&amp;quot;description&amp;quot;:&amp;quot;Internal error&amp;quot;,&amp;quot;error&amp;quot;:46}&amp;quot;)&amp;lt;br&amp;gt;&lt;br /&gt;
Add &amp;quot;--add-modules java.xml.bind&amp;quot; to JAVA_OPTS in /etc/default/tomcat8&lt;/div&gt;</summary>
		<author><name>Borgso</name></author>
	</entry>
	<entry>
		<id>https://wiki.netxms.org/index.php?title=Web_service_API&amp;diff=1730</id>
		<title>Web service API</title>
		<link rel="alternate" type="text/html" href="https://wiki.netxms.org/index.php?title=Web_service_API&amp;diff=1730"/>
		<updated>2019-11-01T10:28:26Z</updated>

		<summary type="html">&lt;p&gt;Borgso: Get Last Values for Object&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Web service API provides access to NetXMS via HTTP/HTTPS. API calls are REST-like (although not purely RESTful) and uses JSON for data exchange.&lt;br /&gt;
&lt;br /&gt;
= Session Management =&lt;br /&gt;
&lt;br /&gt;
== Login ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;POST&amp;#039;&amp;#039;&amp;#039; /sessions&lt;br /&gt;
&lt;br /&gt;
Create new session. Input object fields:&lt;br /&gt;
&lt;br /&gt;
login&lt;br /&gt;
password&lt;br /&gt;
&lt;br /&gt;
On success server will set cookie &amp;#039;&amp;#039;&amp;#039;session_handle&amp;#039;&amp;#039;&amp;#039; which should be passed on each subsequent request.&lt;br /&gt;
&lt;br /&gt;
== Logout ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DELETE&amp;#039;&amp;#039;&amp;#039; /session/&amp;#039;&amp;#039;sid&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Logout (delete session) with given session ID.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Object Management =&lt;br /&gt;
&lt;br /&gt;
== Get Objects ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; /objects&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; /objects?&amp;#039;&amp;#039;filter&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Get all objects visible to logged in user. Optional filter can define additional criteria for object selection:&lt;br /&gt;
&lt;br /&gt;
area=&amp;#039;&amp;#039;geographical_area&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
class=&amp;#039;&amp;#039;class_list&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
name=&amp;#039;&amp;#039;pattern&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Examples&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Get all objects with name starting with &amp;quot;T&amp;quot;:&lt;br /&gt;
 GET /objects?name=T*&lt;br /&gt;
&lt;br /&gt;
Get all nodes around Riga:&lt;br /&gt;
 GET /objects?class=node&amp;amp;area=57.0592,23.1647,56.8270,24.6025&lt;br /&gt;
&lt;br /&gt;
Get all nodes and containers:&lt;br /&gt;
 GET /objects?class=container,node&lt;br /&gt;
&lt;br /&gt;
== Get Specific Object ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; /objects/&amp;#039;&amp;#039;id&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Get Last Values for Object ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; objects/&amp;#039;&amp;#039;id&amp;#039;&amp;#039;/lastvalues&lt;br /&gt;
&lt;br /&gt;
== CURL Test ==&lt;br /&gt;
&lt;br /&gt;
Test API with Curl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X POST --data &amp;#039;{&amp;quot;login&amp;quot;:&amp;quot;user&amp;quot;,&amp;quot;password&amp;quot;:&amp;quot;pass&amp;quot;}&amp;#039; &amp;quot;http://localhost:8080/netxms-websvc/sessions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;sessionHandle&amp;quot;: &amp;quot;8338e7f3-ba99-46c5-9fd6-84b38cc5d715&amp;quot;,&lt;br /&gt;
  &amp;quot;session&amp;quot;: {&lt;br /&gt;
    &amp;quot;server&amp;quot;: {&lt;br /&gt;
      &amp;quot;address&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
      &amp;quot;version&amp;quot;: &amp;quot;2.2.8&amp;quot;,&lt;br /&gt;
      &amp;quot;color&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;id&amp;quot;: 3283229296059149299,&lt;br /&gt;
      &amp;quot;timeZone&amp;quot;: &amp;quot;CET+02CEST&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;user&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;user&amp;quot;,&lt;br /&gt;
      &amp;quot;id&amp;quot;: 8,&lt;br /&gt;
      &amp;quot;globalAccessRights&amp;quot;: 825439032336&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;encrypted&amp;quot;: false,&lt;br /&gt;
    &amp;quot;objectsSynchronized&amp;quot;: false,&lt;br /&gt;
    &amp;quot;passwordExpired&amp;quot;: false,&lt;br /&gt;
    &amp;quot;zoningEnabled&amp;quot;: false&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$ curl -X GET --cookie &amp;quot;session_handle=8338e7f3-ba99-46c5-9fd6-84b38cc5d715&amp;quot; &amp;quot;http://localhost:8080/netxms-websvc/objects?class=container,node&amp;quot;&lt;br /&gt;
&lt;br /&gt;
.. prints some data ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Java 10 =&lt;br /&gt;
&lt;br /&gt;
If curl test works but grafana returns &amp;quot;Internal error&amp;quot; ({&amp;quot;description&amp;quot;:&amp;quot;Internal error&amp;quot;,&amp;quot;error&amp;quot;:46}&amp;quot;)&amp;lt;br&amp;gt;&lt;br /&gt;
Add &amp;quot;--add-modules java.xml.bind&amp;quot; to JAVA_OPTS in /etc/default/tomcat8&lt;/div&gt;</summary>
		<author><name>Borgso</name></author>
	</entry>
	<entry>
		<id>https://wiki.netxms.org/index.php?title=Using_APT_Repository&amp;diff=1728</id>
		<title>Using APT Repository</title>
		<link rel="alternate" type="text/html" href="https://wiki.netxms.org/index.php?title=Using_APT_Repository&amp;diff=1728"/>
		<updated>2019-09-19T11:35:00Z</updated>

		<summary type="html">&lt;p&gt;Borgso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We provide deb packages for Debian and Ubuntu users at http://packages.netxms.org/, which is our public APT repository.&lt;br /&gt;
Packages are signed, so you&amp;#039;ll need to install additional encryption key for signature verification.&lt;br /&gt;
&lt;br /&gt;
== Automated configuration ==&lt;br /&gt;
&lt;br /&gt;
Install netxms-release_1.5_all.deb (this package should support all Debian and Ubuntu systems):&lt;br /&gt;
&lt;br /&gt;
 wget http://packages.netxms.org/netxms-release_1.5_all.deb&lt;br /&gt;
 dpkg -i netxms-release_1.5_all.deb&lt;br /&gt;
&lt;br /&gt;
== Manual configuration ==&lt;br /&gt;
&lt;br /&gt;
Add the repository to your sources.list (change &amp;quot;jessie&amp;quot; to correct distro name):&lt;br /&gt;
&lt;br /&gt;
Debian:&lt;br /&gt;
&lt;br /&gt;
 deb http://packages.netxms.org/debian/ jessie main&lt;br /&gt;
&lt;br /&gt;
Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 deb http://packages.netxms.org/ubuntu/ xenial main&lt;br /&gt;
&lt;br /&gt;
Fetch and install the GnuPG key:&lt;br /&gt;
&lt;br /&gt;
 wget -q -O - http://packages.netxms.org/netxms.gpg | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
== Beta and milestone releases ==&lt;br /&gt;
&lt;br /&gt;
If you feel a bit adventurous, pre-release builds are available in &amp;quot;beta&amp;quot; repository. We do our best not to break anything -- but proceed with caution.&lt;br /&gt;
&lt;br /&gt;
Add to the sources.list (change &amp;quot;jessie&amp;quot; to correct distro name):&lt;br /&gt;
&lt;br /&gt;
 deb http://packages.netxms.org/debian/ jessie beta&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
Most common error is missing public key:&lt;br /&gt;
&lt;br /&gt;
 W: GPG error: http://packages.netxms.org wheezy Release: The following signatures couldn&amp;#039;t be verified&lt;br /&gt;
 because the public key is not available: NO_PUBKEY 179C0A80CDFADDB1&lt;br /&gt;
&lt;br /&gt;
Import our public key to fix it:&lt;br /&gt;
&lt;br /&gt;
 wget -q -O - http://packages.netxms.org/netxms.gpg | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
== Public key ==&lt;br /&gt;
 -----BEGIN PGP PUBLIC KEY BLOCK-----&lt;br /&gt;
 &lt;br /&gt;
 mQINBFUYHt8BEADE0pv4XFJH870zz567in6AeTZbNElLEmpU6VZD4xZg+fBFL2yU&lt;br /&gt;
 Zvn16c1NALt4XPETkSWNHs3p+VKLLemAvt/o9i0xC3NsKClrJjuUHhbCbueUepm9&lt;br /&gt;
 7e1XWTgCuCBpjVzQ9WM7y6GkHkIdyH5qoWVxrwGDiIa9/APsgKqcshYoQb/GqOWe&lt;br /&gt;
 T/f4Pk7giyOtMKIE+E1xGGb5dAHpPDJxeOSqRcDayJzB1HJq/k5Oojdd8Sfdh3pc&lt;br /&gt;
 Ah3q76qSUdEGpO9o8ZlywiDn0lJT7BDaHp3uUrUYK+Z68qfBz4IwFNqOxcR/JWuI&lt;br /&gt;
 MLFna6zJ373ep0LyYSzEzXWWjVT+hybXFbBvCZX7jOThot5THW1e/Me/YXdvQZwN&lt;br /&gt;
 EISGZr7i0jgEIQGexEcCsRtkIzcYYpg0AmXq/JRGtlY5tjqxb6Cc/YMbbTD6sHiR&lt;br /&gt;
 X8GfhCG9dfsbGLQLvJ9jMYFQnV8kvIB4FjzSrWSuMT1wVg9fPuWVBnnaAHCbcVLF&lt;br /&gt;
 TJ7vLT9NZU/hPaRp5qiSnLj97nsJ9JKPDiEqaUOXubb7dS8Qs9NaKHG0XSM63aTp&lt;br /&gt;
 F8sZoS5XTI/JltDcUuZDSK31CyP+gVd+55vgy1eGPvsETHDrR0/DD5nn0OUtzTzM&lt;br /&gt;
 73cgfmfdrEZZGRsl3c8fy4bfoemcVeRSLt0BvCTPRFCMjgluDzB/8ABxiQARAQAB&lt;br /&gt;
 tC5OZXRYTVMgQXV0b21hdGljIFNpZ25pbmcgS2V5IDxpbmZvQG5ldHhtcy5vcmc+&lt;br /&gt;
 iQJUBBMBCgA+AhsDBQsJCAcDBRUKCQgLBRYDAgEAAh4BAheAFiEExy9VSYsxpScY&lt;br /&gt;
 HZHZF5wKgM363bEFAlq3mtAFCQlh4vEACgkQF5wKgM363bFNMg/+MJZf/lPiCOpa&lt;br /&gt;
 roGt6Cl2OCsFMaZ2CSvWN9UGMVRXpVtVIFEH57OjUMbT0IUgdihm2oy9pE6lD91k&lt;br /&gt;
 GMopfKsKcw/W7Sae7+d3sXB3yn7ht+d1G6r8pId30YeclwIxAtGU7TunoKnh1DVN&lt;br /&gt;
 y0q1s/BSihg28TixUkHIyz6h1Y0nsBxYCo48RhyXTbVteGTtMBJr3FH8GroAce1b&lt;br /&gt;
 K0wmFkNCrWAxdTk6D8mx3uASnd261a6Rcbw3kSToWfGtOd0PYP7L/MdPr+ZEdoPF&lt;br /&gt;
 vxtR31D0NGfB9LLCpxtFtzgj/NjLSJGHXPMjlQGWxGNKf9553qSHeJRQFCAR22YC&lt;br /&gt;
 M3UIHZS7CUq0c20dkahp49aqorH5n3wMza36rt34i5x5ij7xF9VV9okVZmntwK/4&lt;br /&gt;
 g+diGxfcvAIft01Xel6T7IPoUG713doOpdwxIhK2Z8sS2DG1kIB8F2zRRl7LLehl&lt;br /&gt;
 aALpzyVepzZcjkpKrVCygiKypi6AATe/56fPckUVPcH3iUdPQxRPCsrN68Ixwuyw&lt;br /&gt;
 kdJZ4AjjsOVlHl5aiYN26ulIMlHEeB/0pSai8Ig94qOBby5e0/rUk4zLBwNL6vBA&lt;br /&gt;
 VtZ3D+HHVaI+XR3m9N/SCuLaGAIo6Rtp7qVo2OsGzyr1m8frwa7gHstUKZfy2XVV&lt;br /&gt;
 uqoINYozk9ArEsjiYLPNnhmm10LBNYS5Ag0EVRge3wEQANJxkuTiFGYO/hdSaBXe&lt;br /&gt;
 yzI6bTJ7zH+ek1QXXVeVymIGqgIk0CslJ70FCetwEkX/3Glox+Kpk912fYMopaqm&lt;br /&gt;
 QdZ6hohs5geUX4N1KUYel4WXlpXuR2T+sYfCLxziX6JGFxm9howrB5o+ZY1Jwpj1&lt;br /&gt;
 bWxqEfgN//Yca5KYZM9wyiZvxkePhhgkS1tSp+ubupD4mvkDutA/hVBJ6BCGNK+P&lt;br /&gt;
 EqVyfTtZbi3NBrTicpUlvlPmRoYYRitWKQXniD73IlvV/Zi8K6Rzl4ZiM0YW7Uhz&lt;br /&gt;
 bKl7GNU1qpF52kl9e1goupeyQpHgoSjREGmzCaxQs/DRn4/sqzo9G3j+5Xxd/AnB&lt;br /&gt;
 LaNxESkD+o4LX+zYsL81lwUC+75Onc4KgEbY0JX58fbAoTym6tnXbz9SHyhz7jxS&lt;br /&gt;
 0ojV3Fbbu82I575dy7kEUp+9QY7i9zlE1HqxGpQui1JAx4r7RBlgdBge4EDoHHM5&lt;br /&gt;
 WOqqzAtPSd3Dcv23xCjMzjHnH760Cyu0hVMVdDca9KxhKk2mwdaispPcOK8URzKx&lt;br /&gt;
 oR7/Uvfg9ll0Oi9gtBDGXouIXT5F2dIfvHCoEBgg6XTXMMZ4RFQ7K3Mpe+ts/RrB&lt;br /&gt;
 YMTn36eG6p2usiExIMO9/4kNKfoN591moiw738sf5Oh6wCzNpzqUf/VdkEZxPfyM&lt;br /&gt;
 KlmyaUaQQN3o5uIVQpLthU65ABEBAAGJAjwEGAEKACYCGwwWIQTHL1VJizGlJxgd&lt;br /&gt;
 kdkXnAqAzfrdsQUCWrea6AUJCWHjCQAKCRAXnAqAzfrdsamYD/0f+f20vTqu7rOe&lt;br /&gt;
 cHzn5dxpAI+whfdCvCBQ+6ZDXk7U/z9Ufwbev/RbspFIdDQ+yPP5Nu1A4fAwLjMj&lt;br /&gt;
 tA99r5Lcj3qbF0HrFmIe3o6jp1gZwr4Z21Q+j+tFWE4YUHp4kIZF03jh0G21P5bN&lt;br /&gt;
 BI2FbV8Ai/0vg5X8zc3CJbNbdykTwo4UA0oXdurVJnT7YxYslwtOhTMCm/+31r5u&lt;br /&gt;
 WgdYe3R6+RLVJEYXI6omcp1V03JECL9fZy/TRYm2jDoRUwOjqr8ReiMwAgDR2It9&lt;br /&gt;
 FTiSpt+0KuayUq35QugojzTm1txifucSbjfrVIusGipczQpz4fzPvGanWN8aBFy6&lt;br /&gt;
 PafJacW3bWIsNd4buQ2IvOC3oc5keQMy8jljOIS3tA+j7O6UZ3BCDL0iC5jkXOP3&lt;br /&gt;
 /kXseN/p+5zIab9vzLhKydzZJnM6fUHG2CHwSZn4n7fBYUNXOVN2SnnUPMozihxC&lt;br /&gt;
 i4KdiBfKLHgd1buBzogqGt8GwevhEUdelRYaI9Vx6tW7T5qkQ1cwZ+GdTUPztpb2&lt;br /&gt;
 8kDu31izYtu24pd83d89Ws4mYOiqtDm9HZVnZ6ZJ1LWQOQKFp6LmQUi1RL9DSAip&lt;br /&gt;
 YXw0Uk24F7FJdE7UvjXMR2iz8X5bTQiSiRsZCAdmhNuxOjFNRB2h4snD6yvVHvWS&lt;br /&gt;
 j2CD5y1aFRZEJ+u6xUUNfLayQo3VIQ==&lt;br /&gt;
 =+zlN&lt;br /&gt;
 -----END PGP PUBLIC KEY BLOCK-----&lt;/div&gt;</summary>
		<author><name>Borgso</name></author>
	</entry>
	<entry>
		<id>https://wiki.netxms.org/index.php?title=Using_nxshell_to_automate_bulk_operations&amp;diff=1720</id>
		<title>Using nxshell to automate bulk operations</title>
		<link rel="alternate" type="text/html" href="https://wiki.netxms.org/index.php?title=Using_nxshell_to_automate_bulk_operations&amp;diff=1720"/>
		<updated>2019-02-04T12:44:08Z</updated>

		<summary type="html">&lt;p&gt;Borgso: /* List Inventory Software for all nodes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
NxShell is based on Jython and provide access to NetXMS Java API using interactive shell. NxShell is build as single jar file, which includes all required libraries.&lt;br /&gt;
&lt;br /&gt;
Download: http://www.netxms.org/download/nxshell-1.2.13.jar (change 1.2.13 to required version)&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
Start as interactive shell:&lt;br /&gt;
 java -jar nxshell-{{version}}.jar&lt;br /&gt;
&lt;br /&gt;
Execute script &amp;quot;test.py&amp;quot;:&lt;br /&gt;
 java -jar nxshell-{{version}}.jar test.py&lt;br /&gt;
&lt;br /&gt;
When NxShell is started, it tries to get server IP, login and password from command line parameters. In interactive mode, user will be asked for details, otherwise default values will be used.&lt;br /&gt;
&lt;br /&gt;
Start as interactive shell, with IP and Login provided (password will be asked):&lt;br /&gt;
 java -Dnetxms.server=127.0.0.1 -Dnetxms.login=admin -jar nxshell-{{version}}.jar&lt;br /&gt;
&lt;br /&gt;
= Properties =&lt;br /&gt;
These properties should be set with JVM&amp;#039;s &amp;quot;-D&amp;quot; option. Please make sure that all &amp;quot;-D&amp;quot; options are &amp;#039;&amp;#039;before&amp;#039;&amp;#039; &amp;quot;-jar&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Default Value&lt;br /&gt;
|-&lt;br /&gt;
| netxms.server || 127.0.0.1&lt;br /&gt;
|-&lt;br /&gt;
| netxms.login || admin&lt;br /&gt;
|-&lt;br /&gt;
| netxms.password || netxms&lt;br /&gt;
|-&lt;br /&gt;
| netxms.encryptSession || true&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Scripting =&lt;br /&gt;
For details on API please refer to javadoc at http://www.netxms.org/documentation/javadoc/latest/.&lt;br /&gt;
&lt;br /&gt;
NxShell provide user with already connected and synchronised session to simplify scripting. Most required packages are imported as well to minimize typing.&lt;br /&gt;
&lt;br /&gt;
== Global Variables ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable !! Type !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| session || org.netxms.client.NXCSession ||&lt;br /&gt;
|-&lt;br /&gt;
| s || org.netxms.client.NXCSession || Alias for &amp;quot;session&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helper Functions ==&lt;br /&gt;
&lt;br /&gt;
= Sample Scripts =&lt;br /&gt;
== Create Container and some nodes ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
parentId = objects.GenericObject.SERVICEROOT # Infrastructure Services root&lt;br /&gt;
cd = NXCObjectCreationData(objects.GenericObject.OBJECT_CONTAINER, &amp;quot;Sample Container&amp;quot;, parentId);&lt;br /&gt;
containerId = session.createObject(cd) # createObject return ID of newly created object&lt;br /&gt;
print &amp;#039;&amp;quot;Sample Container&amp;quot; created, id=%d&amp;#039; % (containerId, )&lt;br /&gt;
&lt;br /&gt;
flags = NXCObjectCreationData.CF_DISABLE_ICMP | \&lt;br /&gt;
        NXCObjectCreationData.CF_DISABLE_NXCP | \&lt;br /&gt;
        NXCObjectCreationData.CF_DISABLE_SNMP&lt;br /&gt;
for i in xrange(0, 5):&lt;br /&gt;
    name = &amp;quot;Node %d&amp;quot; % (i + 1, )&lt;br /&gt;
    cd = NXCObjectCreationData(objects.GenericObject.OBJECT_NODE, name, containerId);&lt;br /&gt;
    cd.setCreationFlags(flags);&lt;br /&gt;
    cd.setPrimaryName(&amp;quot;0.0.0.0&amp;quot;) # Create node without IP address&lt;br /&gt;
    nodeId = session.createObject(cd)&lt;br /&gt;
    print &amp;#039;&amp;quot;%s&amp;quot; created, id=%d&amp;#039; % (name, nodeId)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Change Object comments ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for name in open(&amp;quot;nodes.txt&amp;quot;).readlines():&lt;br /&gt;
    node = session.findObjectByName(name.strip())&lt;br /&gt;
    if node:&lt;br /&gt;
        comments = &amp;quot;New Comment&amp;quot;&lt;br /&gt;
        existingComments = node.getComments() # will return null if there are no comments&lt;br /&gt;
        if existingComments:&lt;br /&gt;
            comments += &amp;quot;\n&amp;quot; + existingComments&lt;br /&gt;
        session.updateObjectComments(node.getObjectId(), comments)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Manage / Unmanage interfaces based on the name ==&lt;br /&gt;
(works for any Object).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from org.netxms.client.objects import GenericObject, Node, Interface&lt;br /&gt;
&lt;br /&gt;
for name in open(&amp;quot;nodes.txt&amp;quot;).readlines():&lt;br /&gt;
    node = session.findObjectByName(name.strip())&lt;br /&gt;
    if node:&lt;br /&gt;
        for interface in node.getAllChilds(GenericObject.OBJECT_INTERFACE): # 3 == interface&lt;br /&gt;
            name = interface.getObjectName()&lt;br /&gt;
            if name.startswith(&amp;#039;lo&amp;#039;):&lt;br /&gt;
                session.setObjectManaged(interface.getObjectId(), True)&lt;br /&gt;
            else:&lt;br /&gt;
                session.setObjectManaged(interface.getObjectId(), False)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Disable SNMP polling for node ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from org.netxms.client.objects import Node&lt;br /&gt;
&lt;br /&gt;
for name in open(&amp;quot;nodes.txt&amp;quot;).readlines():&lt;br /&gt;
    node = session.findObjectByName(name.strip())&lt;br /&gt;
    if node:&lt;br /&gt;
        md = NXCObjectModificationData(node.getObjectId())&lt;br /&gt;
        newFlags = node.getFlags() | Node.NF_DISABLE_SNMP&lt;br /&gt;
        md.setObjectFlags(newFlags)&lt;br /&gt;
        session.modifyObject(md)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Export list of interfaces to CSV file ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import csv, sys&lt;br /&gt;
&lt;br /&gt;
w = csv.writer(sys.stdout, dialect=&amp;#039;excel&amp;#039;)&lt;br /&gt;
w.writerow([&amp;#039;node_id&amp;#039;, &amp;#039;interface_id&amp;#039;, &amp;#039;name&amp;#039;, &amp;#039;ip&amp;#039;, &amp;#039;mask&amp;#039;]) # Header&lt;br /&gt;
&lt;br /&gt;
for node in [o for o in s.getAllObjects() if isinstance(o, objects.Node)]: # filter all objects for objects.Node&lt;br /&gt;
    for interface in node.getAllChilds(objects.GenericObject.OBJECT_INTERFACE):&lt;br /&gt;
        w.writerow([&lt;br /&gt;
            node.getObjectId(),&lt;br /&gt;
            interface.getObjectId(),&lt;br /&gt;
            node.getObjectName(),&lt;br /&gt;
            interface.getPrimaryIP().getHostAddress(),&lt;br /&gt;
            interface.getSubnetMask().getHostAddress()&lt;br /&gt;
        ])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== List free(administratively down) ethernet ports on switches ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import csv&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
w = csv.writer(sys.stdout, dialect=&amp;#039;excel&amp;#039;)&lt;br /&gt;
w.writerow([&amp;#039;node_id&amp;#039;, &amp;#039;interface_id&amp;#039;, &amp;#039;name&amp;#039;, &amp;#039;ip&amp;#039;, &amp;#039;mask&amp;#039;]) # Header&lt;br /&gt;
&lt;br /&gt;
for node in filter(lambda x: isinstance(x, objects.Node), s.getAllObjects()):&lt;br /&gt;
    allInterfaces = node.getAllChilds(objects.GenericObject.OBJECT_INTERFACE)&lt;br /&gt;
    # iftype=6 - ethernetCsmacd, http://www.net-snmp.org/docs/mibs/interfaces.html#IANAifType&lt;br /&gt;
    #            or check IFTYPE_* constants in src/nms_common.h&lt;br /&gt;
    interfaces = filter(lambda i: i.getIfType==6 and i.getOperState() == objects.Interface.ADMIN_STATE_DOWN, allInterfaces)&lt;br /&gt;
    for interface in interfaces:&lt;br /&gt;
        w.writerow([&lt;br /&gt;
            node.getObjectId(),&lt;br /&gt;
            interface.getObjectId(),&lt;br /&gt;
            node.getObjectName(),&lt;br /&gt;
            interface.getPrimaryIP().getHostAddress(),&lt;br /&gt;
            interface.getSubnetMask().getHostAddress()&lt;br /&gt;
        ])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Set expected interface state ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import org.netxms.client.NXCObjectModificationData&lt;br /&gt;
&lt;br /&gt;
newExpectedState=0 # 0..UP&lt;br /&gt;
&lt;br /&gt;
for node in [o for o in s.getAllObjects() if isinstance(o, objects.Node)]: # filter all objects for objects.Node&lt;br /&gt;
	for interface in node.getAllChilds(objects.GenericObject.OBJECT_INTERFACE):&lt;br /&gt;
		currentExpectedState = interface.getExpectedState()&lt;br /&gt;
		print &amp;#039;Node &amp;quot;%s&amp;quot; interface &amp;quot;%s&amp;quot; had expected state %d, setting to %d&amp;#039; % (node.getObjectName(), interface.getObjectName(), currentExpectedState, newExpectedState)&lt;br /&gt;
		data = NXCObjectModificationData(interface.getObjectId())&lt;br /&gt;
		data.setExpectedState(newExpectedState)&lt;br /&gt;
		session.modifyObject(data)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Show all alarms ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for alarm in session.getAlarms().values():&lt;br /&gt;
 print &amp;#039;%s (%d): %s&amp;#039; % (session.getObjectName(alarm.getSourceObjectId()), alarm.getCurrentSeverity(), alarm.getMessage())&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Show all nodes with matching SNMP OID ==&lt;br /&gt;
OID mask is either passed as command line parameter, or hardcoded value used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
from fnmatch import fnmatch&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv) &amp;gt; 1:&lt;br /&gt;
  mask = sys.argv[1]&lt;br /&gt;
else:&lt;br /&gt;
  mask = &amp;quot;.1.3.6.1.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
nodes = filter(lambda x: isinstance(x, objects.Node), s.getAllObjects())&lt;br /&gt;
matched = filter(lambda x: fnmatch(x.getSnmpOID(), mask), nodes)&lt;br /&gt;
for node in matched:&lt;br /&gt;
  print node.getObjectId(), node.getObjectName(), node.getPrimaryIP().getHostAddress()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Find MAC address ==&lt;br /&gt;
MAC address to find passed as parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
mac = MacAddress.parseMacAddress(sys.argv[1].upper())&lt;br /&gt;
if not mac:&lt;br /&gt;
    print &amp;#039;Cannot parse MAC address&amp;#039;&lt;br /&gt;
else:&lt;br /&gt;
    print &amp;#039;Parsed MAC:&amp;#039;, mac&lt;br /&gt;
    cp = s.findConnectionPoint(mac)&lt;br /&gt;
    if not cp:&lt;br /&gt;
        &amp;#039;No connection found&amp;#039;&lt;br /&gt;
    else:&lt;br /&gt;
        host = s.findObjectById(cp.getLocalNodeId())&lt;br /&gt;
        bridge = session.findObjectById(cp.getNodeId())&lt;br /&gt;
        iface = s.findObjectById(cp.getInterfaceId())&lt;br /&gt;
&lt;br /&gt;
        if bridge and iface:&lt;br /&gt;
            if cp.getType() == ConnectionPointType.WIRELESS:&lt;br /&gt;
                if host:&lt;br /&gt;
                    print &amp;quot;Node %s is connected to wireless access point %s/%s&amp;quot; % (host.getObjectName(), bridge.getObjectName(), iface.getObjectName())&lt;br /&gt;
                else:&lt;br /&gt;
                    if cp.getLocalIpAddress():&lt;br /&gt;
                        print &amp;quot;Node with IP address %s and MAC address %s is connected to wireless access point %s/%s&amp;quot; % (cp.getLocalIpAddress().getHostAddress(), cp.getLocalMacAddress(), bridge.getObjectName(), iface.getObjectName())&lt;br /&gt;
                    else:&lt;br /&gt;
                        print &amp;quot;Node with MAC address %s is connected to wireless access point %s/%s&amp;quot; % (cp.getLocalMacAddress(), bridge.getObjectName(), iface.getObjectName())&lt;br /&gt;
            else:&lt;br /&gt;
                if host:&lt;br /&gt;
                    print &amp;quot;Node %s is %s connected to network switch %s port %s&amp;quot; % (host.getObjectName(), &amp;quot;directly&amp;quot; if cp.getType() == ConnectionPointType.DIRECT else &amp;quot;indirectly&amp;quot;, bridge.getObjectName(), iface.getObjectName())&lt;br /&gt;
                else:&lt;br /&gt;
                    if cp.getLocalIpAddress():&lt;br /&gt;
                        print &amp;quot;Node with IP address %s and MAC address %s is %s connected to network switch %s port %s&amp;quot; % (cp.getLocalIpAddress().getHostAddress(), cp.getLocalMacAddress(), &amp;quot;directly&amp;quot; if cp.getType() == ConnectionPointType.DIRECT else &amp;quot;indirectly&amp;quot;, bridge.getObjectName(), iface.getObjectName())&lt;br /&gt;
                    else:&lt;br /&gt;
                        print &amp;quot;Node with MAC address %s is %s connected to network switch %s port %s&amp;quot; % (cp.getLocalMacAddress(), &amp;quot;directly&amp;quot; if cp.getType() == ConnectionPointType.DIRECT else &amp;quot;indirectly&amp;quot;, bridge.getObjectName(), iface.getObjectName())&lt;br /&gt;
        else:&lt;br /&gt;
            print &amp;#039;No connection found&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reset retention time for all DCIs on all nodes to default ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from org.netxms.client.datacollection import DataCollectionConfiguration, DataCollectionObject&lt;br /&gt;
from org.netxms.client.objects import Node, Template&lt;br /&gt;
&lt;br /&gt;
for o in filter(lambda x: (isinstance(x, Node) or isinstance(x, Template)), session.getAllObjects()):&lt;br /&gt;
   config = session.openDataCollectionConfiguration(o.getObjectId())&lt;br /&gt;
   for dc in config.getItems():&lt;br /&gt;
      if dc.getTemplateId() == 0:&lt;br /&gt;
         dc.setRetentionTime(0)&lt;br /&gt;
         config.modifyObject(dc)&lt;br /&gt;
   config.close()&lt;br /&gt;
   print &amp;quot;%s %s updated&amp;quot; % (&amp;quot;Node&amp;quot; if isinstance(o, Node) else &amp;quot;Template&amp;quot;, o.getObjectName())&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== List Inventory Software for all nodes ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for node in [o for o in s.getAllObjects() if isinstance(o, objects.Node)]:&lt;br /&gt;
  print &amp;#039;Node: &amp;#039;, node.getObjectName()&lt;br /&gt;
  try:&lt;br /&gt;
    for package in s.getNodeSoftwarePackages(node.getObjectId()):&lt;br /&gt;
        print package.getName()&lt;br /&gt;
  except:&lt;br /&gt;
    print &amp;quot;No package found&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Enter/Leave Maintenance for node ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from org.netxms.client.objects import Node&lt;br /&gt;
import org.netxms.client.NXCSession&lt;br /&gt;
&lt;br /&gt;
NETXMS_NODE = &amp;quot;__NodeName__&amp;quot;&lt;br /&gt;
STATE = False or True&lt;br /&gt;
&lt;br /&gt;
node = session.findObjectByName(NETXMS_NODE.strip())&lt;br /&gt;
if node:&lt;br /&gt;
  session.setObjectMaintenanceMode(node.getObjectId(), STATE)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Borgso</name></author>
	</entry>
	<entry>
		<id>https://wiki.netxms.org/index.php?title=Using_nxshell_to_automate_bulk_operations&amp;diff=1713</id>
		<title>Using nxshell to automate bulk operations</title>
		<link rel="alternate" type="text/html" href="https://wiki.netxms.org/index.php?title=Using_nxshell_to_automate_bulk_operations&amp;diff=1713"/>
		<updated>2018-10-01T11:04:45Z</updated>

		<summary type="html">&lt;p&gt;Borgso: /* Reset retention time for all DCIs on all nodes to default */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
NxShell is based on Jython and provide access to NetXMS Java API using interactive shell. NxShell is build as single jar file, which includes all required libraries.&lt;br /&gt;
&lt;br /&gt;
Download: http://www.netxms.org/download/nxshell-1.2.13.jar (change 1.2.13 to required version)&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
Start as interactive shell:&lt;br /&gt;
 java -jar nxshell-{{version}}.jar&lt;br /&gt;
&lt;br /&gt;
Execute script &amp;quot;test.py&amp;quot;:&lt;br /&gt;
 java -jar nxshell-{{version}}.jar test.py&lt;br /&gt;
&lt;br /&gt;
When NxShell is started, it tries to get server IP, login and password from command line parameters. In interactive mode, user will be asked for details, otherwise default values will be used.&lt;br /&gt;
&lt;br /&gt;
Start as interactive shell, with IP and Login provided (password will be asked):&lt;br /&gt;
 java -Dnetxms.server=127.0.0.1 -Dnetxms.login=admin -jar nxshell-{{version}}.jar&lt;br /&gt;
&lt;br /&gt;
= Properties =&lt;br /&gt;
These properties should be set with JVM&amp;#039;s &amp;quot;-D&amp;quot; option. Please make sure that all &amp;quot;-D&amp;quot; options are &amp;#039;&amp;#039;before&amp;#039;&amp;#039; &amp;quot;-jar&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Default Value&lt;br /&gt;
|-&lt;br /&gt;
| netxms.server || 127.0.0.1&lt;br /&gt;
|-&lt;br /&gt;
| netxms.login || admin&lt;br /&gt;
|-&lt;br /&gt;
| netxms.password || netxms&lt;br /&gt;
|-&lt;br /&gt;
| netxms.encryptSession || true&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Scripting =&lt;br /&gt;
For details on API please refer to javadoc at http://www.netxms.org/documentation/javadoc/latest/.&lt;br /&gt;
&lt;br /&gt;
NxShell provide user with already connected and synchronised session to simplify scripting. Most required packages are imported as well to minimize typing.&lt;br /&gt;
&lt;br /&gt;
== Global Variables ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable !! Type !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| session || org.netxms.client.NXCSession ||&lt;br /&gt;
|-&lt;br /&gt;
| s || org.netxms.client.NXCSession || Alias for &amp;quot;session&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helper Functions ==&lt;br /&gt;
&lt;br /&gt;
= Sample Scripts =&lt;br /&gt;
== Create Container and some nodes ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
parentId = objects.GenericObject.SERVICEROOT # Infrastructure Services root&lt;br /&gt;
cd = NXCObjectCreationData(objects.GenericObject.OBJECT_CONTAINER, &amp;quot;Sample Container&amp;quot;, parentId);&lt;br /&gt;
containerId = session.createObject(cd) # createObject return ID of newly created object&lt;br /&gt;
print &amp;#039;&amp;quot;Sample Container&amp;quot; created, id=%d&amp;#039; % (containerId, )&lt;br /&gt;
&lt;br /&gt;
flags = NXCObjectCreationData.CF_DISABLE_ICMP | \&lt;br /&gt;
        NXCObjectCreationData.CF_DISABLE_NXCP | \&lt;br /&gt;
        NXCObjectCreationData.CF_DISABLE_SNMP&lt;br /&gt;
for i in xrange(0, 5):&lt;br /&gt;
    name = &amp;quot;Node %d&amp;quot; % (i + 1, )&lt;br /&gt;
    cd = NXCObjectCreationData(objects.GenericObject.OBJECT_NODE, name, containerId);&lt;br /&gt;
    cd.setCreationFlags(flags);&lt;br /&gt;
    cd.setPrimaryName(&amp;quot;0.0.0.0&amp;quot;) # Create node without IP address&lt;br /&gt;
    nodeId = session.createObject(cd)&lt;br /&gt;
    print &amp;#039;&amp;quot;%s&amp;quot; created, id=%d&amp;#039; % (name, nodeId)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Change Object comments ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for name in open(&amp;quot;nodes.txt&amp;quot;).readlines():&lt;br /&gt;
    node = session.findObjectByName(name.strip())&lt;br /&gt;
    if node:&lt;br /&gt;
        comments = &amp;quot;New Comment&amp;quot;&lt;br /&gt;
        existingComments = node.getComments() # will return null if there are no comments&lt;br /&gt;
        if existingComments:&lt;br /&gt;
            comments += &amp;quot;\n&amp;quot; + existingComments&lt;br /&gt;
        session.updateObjectComments(node.getObjectId(), comments)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Manage / Unmanage interfaces based on the name ==&lt;br /&gt;
(works for any Object).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from org.netxms.client.objects import GenericObject, Node, Interface&lt;br /&gt;
&lt;br /&gt;
for name in open(&amp;quot;nodes.txt&amp;quot;).readlines():&lt;br /&gt;
    node = session.findObjectByName(name.strip())&lt;br /&gt;
    if node:&lt;br /&gt;
        for interface in node.getAllChilds(GenericObject.OBJECT_INTERFACE): # 3 == interface&lt;br /&gt;
            name = interface.getObjectName()&lt;br /&gt;
            if name.startswith(&amp;#039;lo&amp;#039;):&lt;br /&gt;
                session.setObjectManaged(interface.getObjectId(), True)&lt;br /&gt;
            else:&lt;br /&gt;
                session.setObjectManaged(interface.getObjectId(), False)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Disable SNMP polling for node ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from org.netxms.client.objects import Node&lt;br /&gt;
&lt;br /&gt;
for name in open(&amp;quot;nodes.txt&amp;quot;).readlines():&lt;br /&gt;
    node = session.findObjectByName(name.strip())&lt;br /&gt;
    if node:&lt;br /&gt;
        md = NXCObjectModificationData(node.getObjectId())&lt;br /&gt;
        newFlags = node.getFlags() | Node.NF_DISABLE_SNMP&lt;br /&gt;
        md.setObjectFlags(newFlags)&lt;br /&gt;
        session.modifyObject(md)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Export list of interfaces to CSV file ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import csv, sys&lt;br /&gt;
&lt;br /&gt;
w = csv.writer(sys.stdout, dialect=&amp;#039;excel&amp;#039;)&lt;br /&gt;
w.writerow([&amp;#039;node_id&amp;#039;, &amp;#039;interface_id&amp;#039;, &amp;#039;name&amp;#039;, &amp;#039;ip&amp;#039;, &amp;#039;mask&amp;#039;]) # Header&lt;br /&gt;
&lt;br /&gt;
for node in [o for o in s.getAllObjects() if isinstance(o, objects.Node)]: # filter all objects for objects.Node&lt;br /&gt;
    for interface in node.getAllChilds(objects.GenericObject.OBJECT_INTERFACE):&lt;br /&gt;
        w.writerow([&lt;br /&gt;
            node.getObjectId(),&lt;br /&gt;
            interface.getObjectId(),&lt;br /&gt;
            node.getObjectName(),&lt;br /&gt;
            interface.getPrimaryIP().getHostAddress(),&lt;br /&gt;
            interface.getSubnetMask().getHostAddress()&lt;br /&gt;
        ])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== List free(administratively down) ethernet ports on switches ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import csv&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
w = csv.writer(sys.stdout, dialect=&amp;#039;excel&amp;#039;)&lt;br /&gt;
w.writerow([&amp;#039;node_id&amp;#039;, &amp;#039;interface_id&amp;#039;, &amp;#039;name&amp;#039;, &amp;#039;ip&amp;#039;, &amp;#039;mask&amp;#039;]) # Header&lt;br /&gt;
&lt;br /&gt;
for node in filter(lambda x: isinstance(x, objects.Node), s.getAllObjects()):&lt;br /&gt;
    allInterfaces = node.getAllChilds(objects.GenericObject.OBJECT_INTERFACE)&lt;br /&gt;
    # iftype=6 - ethernetCsmacd, http://www.net-snmp.org/docs/mibs/interfaces.html#IANAifType&lt;br /&gt;
    #            or check IFTYPE_* constants in src/nms_common.h&lt;br /&gt;
    interfaces = filter(lambda i: i.getIfType==6 and i.getOperState() == objects.Interface.ADMIN_STATE_DOWN, allInterfaces)&lt;br /&gt;
    for interface in interfaces:&lt;br /&gt;
        w.writerow([&lt;br /&gt;
            node.getObjectId(),&lt;br /&gt;
            interface.getObjectId(),&lt;br /&gt;
            node.getObjectName(),&lt;br /&gt;
            interface.getPrimaryIP().getHostAddress(),&lt;br /&gt;
            interface.getSubnetMask().getHostAddress()&lt;br /&gt;
        ])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Set expected interface state ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import org.netxms.client.NXCObjectModificationData&lt;br /&gt;
&lt;br /&gt;
newExpectedState=0 # 0..UP&lt;br /&gt;
&lt;br /&gt;
for node in [o for o in s.getAllObjects() if isinstance(o, objects.Node)]: # filter all objects for objects.Node&lt;br /&gt;
	for interface in node.getAllChilds(objects.GenericObject.OBJECT_INTERFACE):&lt;br /&gt;
		currentExpectedState = interface.getExpectedState()&lt;br /&gt;
		print &amp;#039;Node &amp;quot;%s&amp;quot; interface &amp;quot;%s&amp;quot; had expected state %d, setting to %d&amp;#039; % (node.getObjectName(), interface.getObjectName(), currentExpectedState, newExpectedState)&lt;br /&gt;
		data = NXCObjectModificationData(interface.getObjectId())&lt;br /&gt;
		data.setExpectedState(newExpectedState)&lt;br /&gt;
		session.modifyObject(data)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Show all alarms ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for alarm in session.getAlarms().values():&lt;br /&gt;
 print &amp;#039;%s (%d): %s&amp;#039; % (session.getObjectName(alarm.getSourceObjectId()), alarm.getCurrentSeverity(), alarm.getMessage())&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Show all nodes with matching SNMP OID ==&lt;br /&gt;
OID mask is either passed as command line parameter, or hardcoded value used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
from fnmatch import fnmatch&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv) &amp;gt; 1:&lt;br /&gt;
  mask = sys.argv[1]&lt;br /&gt;
else:&lt;br /&gt;
  mask = &amp;quot;.1.3.6.1.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
nodes = filter(lambda x: isinstance(x, objects.Node), s.getAllObjects())&lt;br /&gt;
matched = filter(lambda x: fnmatch(x.getSnmpOID(), mask), nodes)&lt;br /&gt;
for node in matched:&lt;br /&gt;
  print node.getObjectId(), node.getObjectName(), node.getPrimaryIP().getHostAddress()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Find MAC address ==&lt;br /&gt;
MAC address to find passed as parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
mac = MacAddress.parseMacAddress(sys.argv[1].upper())&lt;br /&gt;
if not mac:&lt;br /&gt;
    print &amp;#039;Cannot parse MAC address&amp;#039;&lt;br /&gt;
else:&lt;br /&gt;
    print &amp;#039;Parsed MAC:&amp;#039;, mac&lt;br /&gt;
    cp = s.findConnectionPoint(mac)&lt;br /&gt;
    if not cp:&lt;br /&gt;
        &amp;#039;No connection found&amp;#039;&lt;br /&gt;
    else:&lt;br /&gt;
        host = s.findObjectById(cp.getLocalNodeId())&lt;br /&gt;
        bridge = session.findObjectById(cp.getNodeId())&lt;br /&gt;
        iface = s.findObjectById(cp.getInterfaceId())&lt;br /&gt;
&lt;br /&gt;
        if bridge and iface:&lt;br /&gt;
            if cp.getType() == ConnectionPointType.WIRELESS:&lt;br /&gt;
                if host:&lt;br /&gt;
                    print &amp;quot;Node %s is connected to wireless access point %s/%s&amp;quot; % (host.getObjectName(), bridge.getObjectName(), iface.getObjectName())&lt;br /&gt;
                else:&lt;br /&gt;
                    if cp.getLocalIpAddress():&lt;br /&gt;
                        print &amp;quot;Node with IP address %s and MAC address %s is connected to wireless access point %s/%s&amp;quot; % (cp.getLocalIpAddress().getHostAddress(), cp.getLocalMacAddress(), bridge.getObjectName(), iface.getObjectName())&lt;br /&gt;
                    else:&lt;br /&gt;
                        print &amp;quot;Node with MAC address %s is connected to wireless access point %s/%s&amp;quot; % (cp.getLocalMacAddress(), bridge.getObjectName(), iface.getObjectName())&lt;br /&gt;
            else:&lt;br /&gt;
                if host:&lt;br /&gt;
                    print &amp;quot;Node %s is %s connected to network switch %s port %s&amp;quot; % (host.getObjectName(), &amp;quot;directly&amp;quot; if cp.getType() == ConnectionPointType.DIRECT else &amp;quot;indirectly&amp;quot;, bridge.getObjectName(), iface.getObjectName())&lt;br /&gt;
                else:&lt;br /&gt;
                    if cp.getLocalIpAddress():&lt;br /&gt;
                        print &amp;quot;Node with IP address %s and MAC address %s is %s connected to network switch %s port %s&amp;quot; % (cp.getLocalIpAddress().getHostAddress(), cp.getLocalMacAddress(), &amp;quot;directly&amp;quot; if cp.getType() == ConnectionPointType.DIRECT else &amp;quot;indirectly&amp;quot;, bridge.getObjectName(), iface.getObjectName())&lt;br /&gt;
                    else:&lt;br /&gt;
                        print &amp;quot;Node with MAC address %s is %s connected to network switch %s port %s&amp;quot; % (cp.getLocalMacAddress(), &amp;quot;directly&amp;quot; if cp.getType() == ConnectionPointType.DIRECT else &amp;quot;indirectly&amp;quot;, bridge.getObjectName(), iface.getObjectName())&lt;br /&gt;
        else:&lt;br /&gt;
            print &amp;#039;No connection found&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reset retention time for all DCIs on all nodes to default ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from org.netxms.client.datacollection import DataCollectionConfiguration, DataCollectionObject&lt;br /&gt;
from org.netxms.client.objects import Node, Template&lt;br /&gt;
&lt;br /&gt;
for o in filter(lambda x: (isinstance(x, Node) or isinstance(x, Template)), session.getAllObjects()):&lt;br /&gt;
   config = session.openDataCollectionConfiguration(o.getObjectId())&lt;br /&gt;
   for dc in config.getItems():&lt;br /&gt;
      if dc.getTemplateId() == 0:&lt;br /&gt;
         dc.setRetentionTime(0)&lt;br /&gt;
         config.modifyObject(dc)&lt;br /&gt;
   config.close()&lt;br /&gt;
   print &amp;quot;%s %s updated&amp;quot; % (&amp;quot;Node&amp;quot; if isinstance(o, Node) else &amp;quot;Template&amp;quot;, o.getObjectName())&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== List Inventory Software for all nodes ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for node in [o for o in s.getAllObjects() if isinstance(o, objects.Node)]:&lt;br /&gt;
  print &amp;#039;Node: &amp;#039;, node.getObjectName()&lt;br /&gt;
  try:&lt;br /&gt;
    for package in s.getNodeSoftwarePackages(node.getObjectId()):&lt;br /&gt;
        print package.getName()&lt;br /&gt;
  except:&lt;br /&gt;
    print &amp;quot;No package found&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Borgso</name></author>
	</entry>
	<entry>
		<id>https://wiki.netxms.org/index.php?title=Web_service_API&amp;diff=1712</id>
		<title>Web service API</title>
		<link rel="alternate" type="text/html" href="https://wiki.netxms.org/index.php?title=Web_service_API&amp;diff=1712"/>
		<updated>2018-09-26T18:17:13Z</updated>

		<summary type="html">&lt;p&gt;Borgso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Web service API provides access to NetXMS via HTTP/HTTPS. API calls are REST-like (although not purely RESTful) and uses JSON for data exchange.&lt;br /&gt;
&lt;br /&gt;
= Session Management =&lt;br /&gt;
&lt;br /&gt;
== Login ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;POST&amp;#039;&amp;#039;&amp;#039; /sessions&lt;br /&gt;
&lt;br /&gt;
Create new session. Input object fields:&lt;br /&gt;
&lt;br /&gt;
login&lt;br /&gt;
password&lt;br /&gt;
&lt;br /&gt;
On success server will set cookie &amp;#039;&amp;#039;&amp;#039;session_handle&amp;#039;&amp;#039;&amp;#039; which should be passed on each subsequent request.&lt;br /&gt;
&lt;br /&gt;
== Logout ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DELETE&amp;#039;&amp;#039;&amp;#039; /session/&amp;#039;&amp;#039;sid&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Logout (delete session) with given session ID.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Object Management =&lt;br /&gt;
&lt;br /&gt;
== Get Objects ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; /objects&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; /objects?&amp;#039;&amp;#039;filter&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Get all objects visible to logged in user. Optional filter can define additional criteria for object selection:&lt;br /&gt;
&lt;br /&gt;
area=&amp;#039;&amp;#039;geographical_area&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
class=&amp;#039;&amp;#039;class_list&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
name=&amp;#039;&amp;#039;pattern&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Examples&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Get all objects with name starting with &amp;quot;T&amp;quot;:&lt;br /&gt;
 GET /objects?name=T*&lt;br /&gt;
&lt;br /&gt;
Get all nodes around Riga:&lt;br /&gt;
 GET /objects?class=node&amp;amp;area=57.0592,23.1647,56.8270,24.6025&lt;br /&gt;
&lt;br /&gt;
Get all nodes and containers:&lt;br /&gt;
 GET /objects?class=container,node&lt;br /&gt;
&lt;br /&gt;
== Get Specific Object ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; /objects/&amp;#039;&amp;#039;id&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CURL Test ==&lt;br /&gt;
&lt;br /&gt;
Test API with Curl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X POST --data &amp;#039;{&amp;quot;login&amp;quot;:&amp;quot;user&amp;quot;,&amp;quot;password&amp;quot;:&amp;quot;pass&amp;quot;}&amp;#039; &amp;quot;http://localhost:8080/netxms-websvc/sessions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;sessionHandle&amp;quot;: &amp;quot;8338e7f3-ba99-46c5-9fd6-84b38cc5d715&amp;quot;,&lt;br /&gt;
  &amp;quot;session&amp;quot;: {&lt;br /&gt;
    &amp;quot;server&amp;quot;: {&lt;br /&gt;
      &amp;quot;address&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
      &amp;quot;version&amp;quot;: &amp;quot;2.2.8&amp;quot;,&lt;br /&gt;
      &amp;quot;color&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;id&amp;quot;: 3283229296059149299,&lt;br /&gt;
      &amp;quot;timeZone&amp;quot;: &amp;quot;CET+02CEST&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;user&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;user&amp;quot;,&lt;br /&gt;
      &amp;quot;id&amp;quot;: 8,&lt;br /&gt;
      &amp;quot;globalAccessRights&amp;quot;: 825439032336&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;encrypted&amp;quot;: false,&lt;br /&gt;
    &amp;quot;objectsSynchronized&amp;quot;: false,&lt;br /&gt;
    &amp;quot;passwordExpired&amp;quot;: false,&lt;br /&gt;
    &amp;quot;zoningEnabled&amp;quot;: false&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$ curl -X GET --cookie &amp;quot;session_handle=8338e7f3-ba99-46c5-9fd6-84b38cc5d715&amp;quot; &amp;quot;http://localhost:8080/netxms-websvc/objects?class=container,node&amp;quot;&lt;br /&gt;
&lt;br /&gt;
.. prints some data ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Java 10 =&lt;br /&gt;
&lt;br /&gt;
If curl test works but grafana returns &amp;quot;Internal error&amp;quot; ({&amp;quot;description&amp;quot;:&amp;quot;Internal error&amp;quot;,&amp;quot;error&amp;quot;:46}&amp;quot;)&amp;lt;br&amp;gt;&lt;br /&gt;
Add &amp;quot;--add-modules java.xml.bind&amp;quot; to JAVA_OPTS in /etc/default/tomcat8&lt;/div&gt;</summary>
		<author><name>Borgso</name></author>
	</entry>
	<entry>
		<id>https://wiki.netxms.org/index.php?title=Web_service_API&amp;diff=1711</id>
		<title>Web service API</title>
		<link rel="alternate" type="text/html" href="https://wiki.netxms.org/index.php?title=Web_service_API&amp;diff=1711"/>
		<updated>2018-09-26T18:16:32Z</updated>

		<summary type="html">&lt;p&gt;Borgso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Web service API provides access to NetXMS via HTTP/HTTPS. API calls are REST-like (although not purely RESTful) and uses JSON for data exchange.&lt;br /&gt;
&lt;br /&gt;
= Session Management =&lt;br /&gt;
&lt;br /&gt;
== Login ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;POST&amp;#039;&amp;#039;&amp;#039; /sessions&lt;br /&gt;
&lt;br /&gt;
Create new session. Input object fields:&lt;br /&gt;
&lt;br /&gt;
login&lt;br /&gt;
password&lt;br /&gt;
&lt;br /&gt;
On success server will set cookie &amp;#039;&amp;#039;&amp;#039;session_handle&amp;#039;&amp;#039;&amp;#039; which should be passed on each subsequent request.&lt;br /&gt;
&lt;br /&gt;
== Logout ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DELETE&amp;#039;&amp;#039;&amp;#039; /session/&amp;#039;&amp;#039;sid&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Logout (delete session) with given session ID.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Object Management =&lt;br /&gt;
&lt;br /&gt;
== Get Objects ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; /objects&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; /objects?&amp;#039;&amp;#039;filter&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Get all objects visible to logged in user. Optional filter can define additional criteria for object selection:&lt;br /&gt;
&lt;br /&gt;
area=&amp;#039;&amp;#039;geographical_area&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
class=&amp;#039;&amp;#039;class_list&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
name=&amp;#039;&amp;#039;pattern&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Examples&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Get all objects with name starting with &amp;quot;T&amp;quot;:&lt;br /&gt;
 GET /objects?name=T*&lt;br /&gt;
&lt;br /&gt;
Get all nodes around Riga:&lt;br /&gt;
 GET /objects?class=node&amp;amp;area=57.0592,23.1647,56.8270,24.6025&lt;br /&gt;
&lt;br /&gt;
Get all nodes and containers:&lt;br /&gt;
 GET /objects?class=container,node&lt;br /&gt;
&lt;br /&gt;
== Get Specific Object ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; /objects/&amp;#039;&amp;#039;id&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CURL Test ==&lt;br /&gt;
&lt;br /&gt;
Test API with Curl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X POST --data &amp;#039;{&amp;quot;login&amp;quot;:&amp;quot;user&amp;quot;,&amp;quot;password&amp;quot;:&amp;quot;pass&amp;quot;}&amp;#039; &amp;quot;http://localhost:8080/netxms-websvc/sessions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;sessionHandle&amp;quot;: &amp;quot;8338e7f3-ba99-46c5-9fd6-84b38cc5d715&amp;quot;,&lt;br /&gt;
  &amp;quot;session&amp;quot;: {&lt;br /&gt;
    &amp;quot;server&amp;quot;: {&lt;br /&gt;
      &amp;quot;address&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
      &amp;quot;version&amp;quot;: &amp;quot;2.2.8&amp;quot;,&lt;br /&gt;
      &amp;quot;color&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;id&amp;quot;: 3283229296059149299,&lt;br /&gt;
      &amp;quot;timeZone&amp;quot;: &amp;quot;CET+02CEST&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;user&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;user&amp;quot;,&lt;br /&gt;
      &amp;quot;id&amp;quot;: 8,&lt;br /&gt;
      &amp;quot;globalAccessRights&amp;quot;: 825439032336&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;encrypted&amp;quot;: false,&lt;br /&gt;
    &amp;quot;objectsSynchronized&amp;quot;: false,&lt;br /&gt;
    &amp;quot;passwordExpired&amp;quot;: false,&lt;br /&gt;
    &amp;quot;zoningEnabled&amp;quot;: false&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$ curl -X GET --cookie &amp;quot;session_handle=8338e7f3-ba99-46c5-9fd6-84b38cc5d715&amp;quot; &amp;quot;http://localhost:8080/netxms-websvc/objects?class=container,node&amp;quot;&lt;br /&gt;
&lt;br /&gt;
.. prints some data ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Java 10 ===&lt;br /&gt;
&lt;br /&gt;
If curl test works but grafana returns &amp;quot;Internal error&amp;quot; ({&amp;quot;description&amp;quot;:&amp;quot;Internal error&amp;quot;,&amp;quot;error&amp;quot;:46}&amp;quot;)&amp;lt;br&amp;gt;&lt;br /&gt;
Add &amp;quot;--add-modules java.xml.bind&amp;quot; to JAVA_OPTS in /etc/default/tomcat8&lt;/div&gt;</summary>
		<author><name>Borgso</name></author>
	</entry>
	<entry>
		<id>https://wiki.netxms.org/index.php?title=Web_service_API&amp;diff=1709</id>
		<title>Web service API</title>
		<link rel="alternate" type="text/html" href="https://wiki.netxms.org/index.php?title=Web_service_API&amp;diff=1709"/>
		<updated>2018-09-17T12:11:24Z</updated>

		<summary type="html">&lt;p&gt;Borgso: /* CURL Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Web service API provides access to NetXMS via HTTP/HTTPS. API calls are REST-like (although not purely RESTful) and uses JSON for data exchange.&lt;br /&gt;
&lt;br /&gt;
= Session Management =&lt;br /&gt;
&lt;br /&gt;
== Login ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;POST&amp;#039;&amp;#039;&amp;#039; /sessions&lt;br /&gt;
&lt;br /&gt;
Create new session. Input object fields:&lt;br /&gt;
&lt;br /&gt;
login&lt;br /&gt;
password&lt;br /&gt;
&lt;br /&gt;
On success server will set cookie &amp;#039;&amp;#039;&amp;#039;session_handle&amp;#039;&amp;#039;&amp;#039; which should be passed on each subsequent request.&lt;br /&gt;
&lt;br /&gt;
== Logout ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DELETE&amp;#039;&amp;#039;&amp;#039; /session/&amp;#039;&amp;#039;sid&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Logout (delete session) with given session ID.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Object Management =&lt;br /&gt;
&lt;br /&gt;
== Get Objects ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; /objects&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; /objects?&amp;#039;&amp;#039;filter&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Get all objects visible to logged in user. Optional filter can define additional criteria for object selection:&lt;br /&gt;
&lt;br /&gt;
area=&amp;#039;&amp;#039;geographical_area&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
class=&amp;#039;&amp;#039;class_list&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
name=&amp;#039;&amp;#039;pattern&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Examples&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Get all objects with name starting with &amp;quot;T&amp;quot;:&lt;br /&gt;
 GET /objects?name=T*&lt;br /&gt;
&lt;br /&gt;
Get all nodes around Riga:&lt;br /&gt;
 GET /objects?class=node&amp;amp;area=57.0592,23.1647,56.8270,24.6025&lt;br /&gt;
&lt;br /&gt;
Get all nodes and containers:&lt;br /&gt;
 GET /objects?class=container,node&lt;br /&gt;
&lt;br /&gt;
== Get Specific Object ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; /objects/&amp;#039;&amp;#039;id&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CURL Test ==&lt;br /&gt;
&lt;br /&gt;
Test API with Curl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X POST --data &amp;#039;{&amp;quot;login&amp;quot;:&amp;quot;user&amp;quot;,&amp;quot;password&amp;quot;:&amp;quot;pass&amp;quot;}&amp;#039; &amp;quot;http://localhost:8080/netxms-websvc/sessions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;sessionHandle&amp;quot;: &amp;quot;8338e7f3-ba99-46c5-9fd6-84b38cc5d715&amp;quot;,&lt;br /&gt;
  &amp;quot;session&amp;quot;: {&lt;br /&gt;
    &amp;quot;server&amp;quot;: {&lt;br /&gt;
      &amp;quot;address&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
      &amp;quot;version&amp;quot;: &amp;quot;2.2.8&amp;quot;,&lt;br /&gt;
      &amp;quot;color&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;id&amp;quot;: 3283229296059149299,&lt;br /&gt;
      &amp;quot;timeZone&amp;quot;: &amp;quot;CET+02CEST&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;user&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;user&amp;quot;,&lt;br /&gt;
      &amp;quot;id&amp;quot;: 8,&lt;br /&gt;
      &amp;quot;globalAccessRights&amp;quot;: 825439032336&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;encrypted&amp;quot;: false,&lt;br /&gt;
    &amp;quot;objectsSynchronized&amp;quot;: false,&lt;br /&gt;
    &amp;quot;passwordExpired&amp;quot;: false,&lt;br /&gt;
    &amp;quot;zoningEnabled&amp;quot;: false&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$ curl -X GET --cookie &amp;quot;session_handle=8338e7f3-ba99-46c5-9fd6-84b38cc5d715&amp;quot; &amp;quot;http://localhost:8080/netxms-websvc/objects?class=container,node&amp;quot;&lt;br /&gt;
&lt;br /&gt;
.. prints some data ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Borgso</name></author>
	</entry>
	<entry>
		<id>https://wiki.netxms.org/index.php?title=Web_service_API&amp;diff=1708</id>
		<title>Web service API</title>
		<link rel="alternate" type="text/html" href="https://wiki.netxms.org/index.php?title=Web_service_API&amp;diff=1708"/>
		<updated>2018-09-17T12:10:47Z</updated>

		<summary type="html">&lt;p&gt;Borgso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Web service API provides access to NetXMS via HTTP/HTTPS. API calls are REST-like (although not purely RESTful) and uses JSON for data exchange.&lt;br /&gt;
&lt;br /&gt;
= Session Management =&lt;br /&gt;
&lt;br /&gt;
== Login ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;POST&amp;#039;&amp;#039;&amp;#039; /sessions&lt;br /&gt;
&lt;br /&gt;
Create new session. Input object fields:&lt;br /&gt;
&lt;br /&gt;
login&lt;br /&gt;
password&lt;br /&gt;
&lt;br /&gt;
On success server will set cookie &amp;#039;&amp;#039;&amp;#039;session_handle&amp;#039;&amp;#039;&amp;#039; which should be passed on each subsequent request.&lt;br /&gt;
&lt;br /&gt;
== Logout ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DELETE&amp;#039;&amp;#039;&amp;#039; /session/&amp;#039;&amp;#039;sid&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Logout (delete session) with given session ID.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Object Management =&lt;br /&gt;
&lt;br /&gt;
== Get Objects ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; /objects&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; /objects?&amp;#039;&amp;#039;filter&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Get all objects visible to logged in user. Optional filter can define additional criteria for object selection:&lt;br /&gt;
&lt;br /&gt;
area=&amp;#039;&amp;#039;geographical_area&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
class=&amp;#039;&amp;#039;class_list&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
name=&amp;#039;&amp;#039;pattern&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Examples&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Get all objects with name starting with &amp;quot;T&amp;quot;:&lt;br /&gt;
 GET /objects?name=T*&lt;br /&gt;
&lt;br /&gt;
Get all nodes around Riga:&lt;br /&gt;
 GET /objects?class=node&amp;amp;area=57.0592,23.1647,56.8270,24.6025&lt;br /&gt;
&lt;br /&gt;
Get all nodes and containers:&lt;br /&gt;
 GET /objects?class=container,node&lt;br /&gt;
&lt;br /&gt;
== Get Specific Object ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; /objects/&amp;#039;&amp;#039;id&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CURL Test ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X POST --data &amp;#039;{&amp;quot;login&amp;quot;:&amp;quot;user&amp;quot;,&amp;quot;password&amp;quot;:&amp;quot;pass&amp;quot;}&amp;#039; &amp;quot;http://localhost:8080/netxms-websvc/sessions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;sessionHandle&amp;quot;: &amp;quot;8338e7f3-ba99-46c5-9fd6-84b38cc5d715&amp;quot;,&lt;br /&gt;
  &amp;quot;session&amp;quot;: {&lt;br /&gt;
    &amp;quot;server&amp;quot;: {&lt;br /&gt;
      &amp;quot;address&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
      &amp;quot;version&amp;quot;: &amp;quot;2.2.8&amp;quot;,&lt;br /&gt;
      &amp;quot;color&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;id&amp;quot;: 3283229296059149299,&lt;br /&gt;
      &amp;quot;timeZone&amp;quot;: &amp;quot;CET+02CEST&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;user&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;user&amp;quot;,&lt;br /&gt;
      &amp;quot;id&amp;quot;: 8,&lt;br /&gt;
      &amp;quot;globalAccessRights&amp;quot;: 825439032336&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;encrypted&amp;quot;: false,&lt;br /&gt;
    &amp;quot;objectsSynchronized&amp;quot;: false,&lt;br /&gt;
    &amp;quot;passwordExpired&amp;quot;: false,&lt;br /&gt;
    &amp;quot;zoningEnabled&amp;quot;: false&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$ curl -X GET --cookie &amp;quot;session_handle=8338e7f3-ba99-46c5-9fd6-84b38cc5d715&amp;quot; &amp;quot;http://localhost:8080/netxms-websvc/objects?class=container,node&amp;quot;&lt;br /&gt;
&lt;br /&gt;
.. prints some data ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Borgso</name></author>
	</entry>
	<entry>
		<id>https://wiki.netxms.org/index.php?title=NXSL&amp;diff=1295</id>
		<title>NXSL</title>
		<link rel="alternate" type="text/html" href="https://wiki.netxms.org/index.php?title=NXSL&amp;diff=1295"/>
		<updated>2014-11-05T14:11:02Z</updated>

		<summary type="html">&lt;p&gt;Borgso: Created page with &amp;quot;Node&amp;lt;br&amp;gt; Node runtimeFlags&amp;lt;br&amp;gt; NetXMS_Scripting_Language_(NXSL)&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[NXSL:Node|Node]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[NXSL:Node:runtimeFlags|Node runtimeFlags]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[UM:NetXMS_Scripting_Language_(NXSL)|NetXMS_Scripting_Language_(NXSL)]]&lt;/div&gt;</summary>
		<author><name>Borgso</name></author>
	</entry>
	<entry>
		<id>https://wiki.netxms.org/index.php?title=Using_nxshell_to_automate_bulk_operations&amp;diff=1144</id>
		<title>Using nxshell to automate bulk operations</title>
		<link rel="alternate" type="text/html" href="https://wiki.netxms.org/index.php?title=Using_nxshell_to_automate_bulk_operations&amp;diff=1144"/>
		<updated>2014-03-21T15:29:21Z</updated>

		<summary type="html">&lt;p&gt;Borgso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
NxShell is based on Jython and provide access to NetXMS Java API using interactive shell. NxShell is build as single jar file, which includes all required libraries.&lt;br /&gt;
&lt;br /&gt;
Download: http://www.netxms.org/download/nxshell-1.2.13.jar (change 1.2.13 to required version)&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
Start as interactive shell:&lt;br /&gt;
 java -jar nxshell-1.2.13.jar&lt;br /&gt;
&lt;br /&gt;
Execute script &amp;quot;test.py&amp;quot;:&lt;br /&gt;
 java -jar nxshell-1.2.13.jar test.py&lt;br /&gt;
&lt;br /&gt;
When NxShell is started, it tries to get server IP, login and password from command line parameters. In interactive mode, user will be asked for details, otherwise default values will be used.&lt;br /&gt;
&lt;br /&gt;
Start as interactive shell, with IP and Login provided (password will be asked):&lt;br /&gt;
 java -Dnetxms.server=127.0.0.1 -Dnetxms.login=admin -jar nxshell-1.2.13.jar&lt;br /&gt;
&lt;br /&gt;
= Properties =&lt;br /&gt;
These properties should be set with JVM&amp;#039;s &amp;quot;-D&amp;quot; option. Please make sure that all &amp;quot;-D&amp;quot; options are &amp;#039;&amp;#039;before&amp;#039;&amp;#039; &amp;quot;-jar&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Default Value&lt;br /&gt;
|-&lt;br /&gt;
| netxms.server || 127.0.0.1&lt;br /&gt;
|-&lt;br /&gt;
| netxms.login || admin&lt;br /&gt;
|-&lt;br /&gt;
| netxms.password || netxms&lt;br /&gt;
|-&lt;br /&gt;
| netxms.encryptSession || true&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Scripting =&lt;br /&gt;
For details on API please refer to javadoc at http://www.netxms.org/documentation/javadoc/latest/.&lt;br /&gt;
&lt;br /&gt;
NxShell provide user with already connected and synchronised session to simplify scripting. Most required packages are imported as well to minimize typing.&lt;br /&gt;
&lt;br /&gt;
== Global Variables ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable !! Type !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| session || org.netxms.client.NXCSession ||&lt;br /&gt;
|-&lt;br /&gt;
| s || org.netxms.client.NXCSession || Alias for &amp;quot;session&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helper Functions ==&lt;br /&gt;
&lt;br /&gt;
= Sample Scripts =&lt;br /&gt;
== Create Container and some nodes ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
parentId = objects.GenericObject.SERVICEROOT # Infrastructure Services root&lt;br /&gt;
cd = NXCObjectCreationData(objects.GenericObject.OBJECT_CONTAINER, &amp;quot;Sample Container&amp;quot;, parentId);&lt;br /&gt;
containerId = session.createObject(cd) # createObject return ID of newly created object&lt;br /&gt;
print &amp;#039;&amp;quot;Sample Container&amp;quot; created, id=%d&amp;#039; % (containerId, )&lt;br /&gt;
&lt;br /&gt;
flags = NXCObjectCreationData.CF_DISABLE_ICMP | \&lt;br /&gt;
        NXCObjectCreationData.CF_DISABLE_NXCP | \&lt;br /&gt;
        NXCObjectCreationData.CF_DISABLE_SNMP&lt;br /&gt;
for i in xrange(0, 5):&lt;br /&gt;
    name = &amp;quot;Node %d&amp;quot; % (i + 1, )&lt;br /&gt;
    cd = NXCObjectCreationData(objects.GenericObject.OBJECT_NODE, name, containerId);&lt;br /&gt;
    cd.setCreationFlags(flags);&lt;br /&gt;
    cd.setPrimaryName(&amp;quot;0.0.0.0&amp;quot;) # Create node without IP address&lt;br /&gt;
    nodeId = session.createObject(cd)&lt;br /&gt;
    print &amp;#039;&amp;quot;%s&amp;quot; created, id=%d&amp;#039; % (name, nodeId)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Change Object comments ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for name in open(&amp;quot;nodes.txt&amp;quot;).readlines():&lt;br /&gt;
    node = session.findObjectByName(name.strip())&lt;br /&gt;
    if node:&lt;br /&gt;
        comments = &amp;quot;New Comment&amp;quot;&lt;br /&gt;
        existingComments = node.getComments() # will return null if there are no comments&lt;br /&gt;
        if existingComments:&lt;br /&gt;
            comments += &amp;quot;\n&amp;quot; + existingComments&lt;br /&gt;
        session.updateObjectComments(node.getObjectId(), comments)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Manage / Unmanage interfaces based on the name ==&lt;br /&gt;
(works for any Object).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from org.netxms.client.objects import GenericObject, Node, Interface&lt;br /&gt;
&lt;br /&gt;
for name in open(&amp;quot;nodes.txt&amp;quot;).readlines():&lt;br /&gt;
    node = session.findObjectByName(name.strip())&lt;br /&gt;
    if node:&lt;br /&gt;
        for interface in node.getAllChilds(GenericObject.OBJECT_INTERFACE): # 3 == interface&lt;br /&gt;
            name = interface.getObjectName()&lt;br /&gt;
            if name.startswith(&amp;#039;lo&amp;#039;):&lt;br /&gt;
                session.setObjectManaged(interface.getObjectId(), True)&lt;br /&gt;
            else:&lt;br /&gt;
                session.setObjectManaged(interface.getObjectId(), False)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Disable SNMP polling for node ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from org.netxms.client.objects import Node&lt;br /&gt;
&lt;br /&gt;
for name in open(&amp;quot;nodes.txt&amp;quot;).readlines():&lt;br /&gt;
    node = session.findObjectByName(name.strip())&lt;br /&gt;
    if node:&lt;br /&gt;
        md = NXCObjectModificationData(node.getObjectId())&lt;br /&gt;
        newFlags = node.getFlags() | Node.NF_DISABLE_SNMP&lt;br /&gt;
        md.setObjectFlags(newFlags)&lt;br /&gt;
        session.modifyObject(md)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Export list of interfaces to CSV file ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import csv, sys&lt;br /&gt;
&lt;br /&gt;
w = csv.writer(sys.stdout, dialect=&amp;#039;excel&amp;#039;)&lt;br /&gt;
w.writerow([&amp;#039;node_id&amp;#039;, &amp;#039;interface_id&amp;#039;, &amp;#039;name&amp;#039;, &amp;#039;ip&amp;#039;, &amp;#039;mask&amp;#039;]) # Header&lt;br /&gt;
&lt;br /&gt;
for node in [o for o in s.getAllObjects() if isinstance(o, objects.Node)]: # filter all objects for objects.Node&lt;br /&gt;
    for interface in node.getAllChilds(objects.GenericObject.OBJECT_INTERFACE):&lt;br /&gt;
        w.writerow([&lt;br /&gt;
            node.getObjectId(),&lt;br /&gt;
            interface.getObjectId(),&lt;br /&gt;
            node.getObjectName(),&lt;br /&gt;
            interface.getPrimaryIP().getHostAddress(),&lt;br /&gt;
            interface.getSubnetMask().getHostAddress()&lt;br /&gt;
        ])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== List free(administratively down) ethernet ports on switches ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import csv&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
w = csv.writer(sys.stdout, dialect=&amp;#039;excel&amp;#039;)&lt;br /&gt;
w.writerow([&amp;#039;node_id&amp;#039;, &amp;#039;interface_id&amp;#039;, &amp;#039;name&amp;#039;, &amp;#039;ip&amp;#039;, &amp;#039;mask&amp;#039;]) # Header&lt;br /&gt;
&lt;br /&gt;
for node in filter(lambda x: isinstance(x, objects.Node), s.getAllObjects()):&lt;br /&gt;
    allInterfaces = node.getAllChilds(objects.GenericObject.OBJECT_INTERFACE)&lt;br /&gt;
    # iftype=6 - ethernetCsmacd, http://www.net-snmp.org/docs/mibs/interfaces.html#IANAifType&lt;br /&gt;
    #            or check IFTYPE_* constants in src/nms_common.h&lt;br /&gt;
    interfaces = filter(lambda i: i.getIfType==6 and i.getOperState() == objects.Interface.ADMIN_STATE_DOWN, allInterfaces)&lt;br /&gt;
    for interface in interfaces:&lt;br /&gt;
        w.writerow([&lt;br /&gt;
            node.getObjectId(),&lt;br /&gt;
            interface.getObjectId(),&lt;br /&gt;
            node.getObjectName(),&lt;br /&gt;
            interface.getPrimaryIP().getHostAddress(),&lt;br /&gt;
            interface.getSubnetMask().getHostAddress()&lt;br /&gt;
        ])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Set expected interface state ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import org.netxms.client.NXCObjectModificationData&lt;br /&gt;
&lt;br /&gt;
newExpectedState=0 # 0..UP&lt;br /&gt;
&lt;br /&gt;
for node in [o for o in s.getAllObjects() if isinstance(o, objects.Node)]: # filter all objects for objects.Node&lt;br /&gt;
	for interface in node.getAllChilds(objects.GenericObject.OBJECT_INTERFACE):&lt;br /&gt;
		currentExpectedState = interface.getExpectedState()&lt;br /&gt;
		print &amp;#039;Node &amp;quot;%s&amp;quot; interface &amp;quot;%s&amp;quot; had expected state %d, setting to %d&amp;#039; % (node.getObjectName(), interface.getObjectName(), currentExpectedState, newExpectedState)&lt;br /&gt;
		data = NXCObjectModificationData(interface.getObjectId())&lt;br /&gt;
		data.setExpectedState(newExpectedState)&lt;br /&gt;
		session.modifyObject(data)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Show all alarms ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for alarm in session.getAlarms().values():&lt;br /&gt;
 print &amp;#039;%s (%d): %s&amp;#039; % (session.getObjectName(alarm.getSourceObjectId()), alarm.getCurrentSeverity(), alarm.getMessage())&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Show all nodes with matching SNMP OID ==&lt;br /&gt;
OID mask is either passed as command line parameter, or hardcoded value used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
from fnmatch import fnmatch&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv) &amp;gt; 1:&lt;br /&gt;
  mask = sys.argv[1]&lt;br /&gt;
else:&lt;br /&gt;
  mask = &amp;quot;.1.3.6.1.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
nodes = filter(lambda x: isinstance(x, objects.Node), s.getAllObjects())&lt;br /&gt;
matched = filter(lambda x: fnmatch(x.getSnmpOID(), mask), nodes)&lt;br /&gt;
for node in matched:&lt;br /&gt;
  print node.getObjectId(), node.getObjectName(), node.getPrimaryIP().getHostAddress()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Borgso</name></author>
	</entry>
	<entry>
		<id>https://wiki.netxms.org/index.php?title=Using_nxshell_to_automate_bulk_operations&amp;diff=1143</id>
		<title>Using nxshell to automate bulk operations</title>
		<link rel="alternate" type="text/html" href="https://wiki.netxms.org/index.php?title=Using_nxshell_to_automate_bulk_operations&amp;diff=1143"/>
		<updated>2014-03-21T15:28:55Z</updated>

		<summary type="html">&lt;p&gt;Borgso: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
NxShell is based on Jython and provide access to NetXMS Java API using interactive shell. NxShell is build as single jar file, which includes all required libraries.&lt;br /&gt;
&lt;br /&gt;
Download: http://www.netxms.org/download/nxshell-1.2.13.jar (change 1.2.13 to required version)&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
Start as interactive shell:&lt;br /&gt;
 java -jar nxshell-1.2.5.jar&lt;br /&gt;
&lt;br /&gt;
Execute script &amp;quot;test.py&amp;quot;:&lt;br /&gt;
 java -jar nxshell-1.2.5.jar test.py&lt;br /&gt;
&lt;br /&gt;
When NxShell is started, it tries to get server IP, login and password from command line parameters. In interactive mode, user will be asked for details, otherwise default values will be used.&lt;br /&gt;
&lt;br /&gt;
Start as interactive shell, with IP and Login provided (password will be asked):&lt;br /&gt;
 java -Dnetxms.server=127.0.0.1 -Dnetxms.login=admin -jar nxshell-1.2.5.jar&lt;br /&gt;
&lt;br /&gt;
= Properties =&lt;br /&gt;
These properties should be set with JVM&amp;#039;s &amp;quot;-D&amp;quot; option. Please make sure that all &amp;quot;-D&amp;quot; options are &amp;#039;&amp;#039;before&amp;#039;&amp;#039; &amp;quot;-jar&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Default Value&lt;br /&gt;
|-&lt;br /&gt;
| netxms.server || 127.0.0.1&lt;br /&gt;
|-&lt;br /&gt;
| netxms.login || admin&lt;br /&gt;
|-&lt;br /&gt;
| netxms.password || netxms&lt;br /&gt;
|-&lt;br /&gt;
| netxms.encryptSession || true&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Scripting =&lt;br /&gt;
For details on API please refer to javadoc at http://www.netxms.org/documentation/javadoc/latest/.&lt;br /&gt;
&lt;br /&gt;
NxShell provide user with already connected and synchronised session to simplify scripting. Most required packages are imported as well to minimize typing.&lt;br /&gt;
&lt;br /&gt;
== Global Variables ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable !! Type !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| session || org.netxms.client.NXCSession ||&lt;br /&gt;
|-&lt;br /&gt;
| s || org.netxms.client.NXCSession || Alias for &amp;quot;session&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helper Functions ==&lt;br /&gt;
&lt;br /&gt;
= Sample Scripts =&lt;br /&gt;
== Create Container and some nodes ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
parentId = objects.GenericObject.SERVICEROOT # Infrastructure Services root&lt;br /&gt;
cd = NXCObjectCreationData(objects.GenericObject.OBJECT_CONTAINER, &amp;quot;Sample Container&amp;quot;, parentId);&lt;br /&gt;
containerId = session.createObject(cd) # createObject return ID of newly created object&lt;br /&gt;
print &amp;#039;&amp;quot;Sample Container&amp;quot; created, id=%d&amp;#039; % (containerId, )&lt;br /&gt;
&lt;br /&gt;
flags = NXCObjectCreationData.CF_DISABLE_ICMP | \&lt;br /&gt;
        NXCObjectCreationData.CF_DISABLE_NXCP | \&lt;br /&gt;
        NXCObjectCreationData.CF_DISABLE_SNMP&lt;br /&gt;
for i in xrange(0, 5):&lt;br /&gt;
    name = &amp;quot;Node %d&amp;quot; % (i + 1, )&lt;br /&gt;
    cd = NXCObjectCreationData(objects.GenericObject.OBJECT_NODE, name, containerId);&lt;br /&gt;
    cd.setCreationFlags(flags);&lt;br /&gt;
    cd.setPrimaryName(&amp;quot;0.0.0.0&amp;quot;) # Create node without IP address&lt;br /&gt;
    nodeId = session.createObject(cd)&lt;br /&gt;
    print &amp;#039;&amp;quot;%s&amp;quot; created, id=%d&amp;#039; % (name, nodeId)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Change Object comments ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for name in open(&amp;quot;nodes.txt&amp;quot;).readlines():&lt;br /&gt;
    node = session.findObjectByName(name.strip())&lt;br /&gt;
    if node:&lt;br /&gt;
        comments = &amp;quot;New Comment&amp;quot;&lt;br /&gt;
        existingComments = node.getComments() # will return null if there are no comments&lt;br /&gt;
        if existingComments:&lt;br /&gt;
            comments += &amp;quot;\n&amp;quot; + existingComments&lt;br /&gt;
        session.updateObjectComments(node.getObjectId(), comments)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Manage / Unmanage interfaces based on the name ==&lt;br /&gt;
(works for any Object).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from org.netxms.client.objects import GenericObject, Node, Interface&lt;br /&gt;
&lt;br /&gt;
for name in open(&amp;quot;nodes.txt&amp;quot;).readlines():&lt;br /&gt;
    node = session.findObjectByName(name.strip())&lt;br /&gt;
    if node:&lt;br /&gt;
        for interface in node.getAllChilds(GenericObject.OBJECT_INTERFACE): # 3 == interface&lt;br /&gt;
            name = interface.getObjectName()&lt;br /&gt;
            if name.startswith(&amp;#039;lo&amp;#039;):&lt;br /&gt;
                session.setObjectManaged(interface.getObjectId(), True)&lt;br /&gt;
            else:&lt;br /&gt;
                session.setObjectManaged(interface.getObjectId(), False)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Disable SNMP polling for node ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from org.netxms.client.objects import Node&lt;br /&gt;
&lt;br /&gt;
for name in open(&amp;quot;nodes.txt&amp;quot;).readlines():&lt;br /&gt;
    node = session.findObjectByName(name.strip())&lt;br /&gt;
    if node:&lt;br /&gt;
        md = NXCObjectModificationData(node.getObjectId())&lt;br /&gt;
        newFlags = node.getFlags() | Node.NF_DISABLE_SNMP&lt;br /&gt;
        md.setObjectFlags(newFlags)&lt;br /&gt;
        session.modifyObject(md)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Export list of interfaces to CSV file ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import csv, sys&lt;br /&gt;
&lt;br /&gt;
w = csv.writer(sys.stdout, dialect=&amp;#039;excel&amp;#039;)&lt;br /&gt;
w.writerow([&amp;#039;node_id&amp;#039;, &amp;#039;interface_id&amp;#039;, &amp;#039;name&amp;#039;, &amp;#039;ip&amp;#039;, &amp;#039;mask&amp;#039;]) # Header&lt;br /&gt;
&lt;br /&gt;
for node in [o for o in s.getAllObjects() if isinstance(o, objects.Node)]: # filter all objects for objects.Node&lt;br /&gt;
    for interface in node.getAllChilds(objects.GenericObject.OBJECT_INTERFACE):&lt;br /&gt;
        w.writerow([&lt;br /&gt;
            node.getObjectId(),&lt;br /&gt;
            interface.getObjectId(),&lt;br /&gt;
            node.getObjectName(),&lt;br /&gt;
            interface.getPrimaryIP().getHostAddress(),&lt;br /&gt;
            interface.getSubnetMask().getHostAddress()&lt;br /&gt;
        ])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== List free(administratively down) ethernet ports on switches ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import csv&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
w = csv.writer(sys.stdout, dialect=&amp;#039;excel&amp;#039;)&lt;br /&gt;
w.writerow([&amp;#039;node_id&amp;#039;, &amp;#039;interface_id&amp;#039;, &amp;#039;name&amp;#039;, &amp;#039;ip&amp;#039;, &amp;#039;mask&amp;#039;]) # Header&lt;br /&gt;
&lt;br /&gt;
for node in filter(lambda x: isinstance(x, objects.Node), s.getAllObjects()):&lt;br /&gt;
    allInterfaces = node.getAllChilds(objects.GenericObject.OBJECT_INTERFACE)&lt;br /&gt;
    # iftype=6 - ethernetCsmacd, http://www.net-snmp.org/docs/mibs/interfaces.html#IANAifType&lt;br /&gt;
    #            or check IFTYPE_* constants in src/nms_common.h&lt;br /&gt;
    interfaces = filter(lambda i: i.getIfType==6 and i.getOperState() == objects.Interface.ADMIN_STATE_DOWN, allInterfaces)&lt;br /&gt;
    for interface in interfaces:&lt;br /&gt;
        w.writerow([&lt;br /&gt;
            node.getObjectId(),&lt;br /&gt;
            interface.getObjectId(),&lt;br /&gt;
            node.getObjectName(),&lt;br /&gt;
            interface.getPrimaryIP().getHostAddress(),&lt;br /&gt;
            interface.getSubnetMask().getHostAddress()&lt;br /&gt;
        ])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Set expected interface state ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import org.netxms.client.NXCObjectModificationData&lt;br /&gt;
&lt;br /&gt;
newExpectedState=0 # 0..UP&lt;br /&gt;
&lt;br /&gt;
for node in [o for o in s.getAllObjects() if isinstance(o, objects.Node)]: # filter all objects for objects.Node&lt;br /&gt;
	for interface in node.getAllChilds(objects.GenericObject.OBJECT_INTERFACE):&lt;br /&gt;
		currentExpectedState = interface.getExpectedState()&lt;br /&gt;
		print &amp;#039;Node &amp;quot;%s&amp;quot; interface &amp;quot;%s&amp;quot; had expected state %d, setting to %d&amp;#039; % (node.getObjectName(), interface.getObjectName(), currentExpectedState, newExpectedState)&lt;br /&gt;
		data = NXCObjectModificationData(interface.getObjectId())&lt;br /&gt;
		data.setExpectedState(newExpectedState)&lt;br /&gt;
		session.modifyObject(data)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Show all alarms ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for alarm in session.getAlarms().values():&lt;br /&gt;
 print &amp;#039;%s (%d): %s&amp;#039; % (session.getObjectName(alarm.getSourceObjectId()), alarm.getCurrentSeverity(), alarm.getMessage())&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Show all nodes with matching SNMP OID ==&lt;br /&gt;
OID mask is either passed as command line parameter, or hardcoded value used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
from fnmatch import fnmatch&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv) &amp;gt; 1:&lt;br /&gt;
  mask = sys.argv[1]&lt;br /&gt;
else:&lt;br /&gt;
  mask = &amp;quot;.1.3.6.1.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
nodes = filter(lambda x: isinstance(x, objects.Node), s.getAllObjects())&lt;br /&gt;
matched = filter(lambda x: fnmatch(x.getSnmpOID(), mask), nodes)&lt;br /&gt;
for node in matched:&lt;br /&gt;
  print node.getObjectId(), node.getObjectName(), node.getPrimaryIP().getHostAddress()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Borgso</name></author>
	</entry>
</feed>