PATCH website custom property via API
Anyone have some PowerShell that will update the custom properties of a Website (ping check)?
I have been fiddling around and the following code will update properties like name or host (for example), but will not add a custom property. The code runs without error and returns the website as expected, but the change is not reflected in the portal.
<span class="pun">[</span><span class="pln">string</span><span class="pun">]</span><span class="pln">$AccessId </span><span class="pun">=</span><span class="pln"> </span><span class="str">''</span><span class="pln">
</span><span class="pun">[</span><span class="pln">securestring</span><span class="pun">]</span><span class="pln">$AccessKey </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="str">''</span><span class="pln"> </span><span class="pun">|</span><span class="pln"> </span><span class="typ">ConvertTo</span><span class="pun">-</span><span class="typ">SecureString</span><span class="pln"> </span><span class="pun">-</span><span class="typ">AsPlainText</span><span class="pln"> </span><span class="pun">-</span><span class="typ">Force</span><span class="pun">)</span><span class="pln">
</span><span class="pun">[</span><span class="pln">string</span><span class="pun">]</span><span class="pln">$AccountName </span><span class="pun">=</span><span class="pln"> </span><span class="str">''</span><span class="pln">
</span><span class="pun">[</span><span class="pln">int</span><span class="pun">]</span><span class="pln">$Id </span><span class="pun">=</span><span class="pln"> </span><span class="str">''</span><span class="pln"> </span><span class="com">#website id</span><span class="pln">
</span><span class="pun">[</span><span class="pln">hashtable</span><span class="pun">]</span><span class="pln">$PropertyTable </span><span class="pun">=</span><span class="pln"> </span><span class="pun">@{</span><span class="pln"> </span><span class="str">'propertyName'</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'test'</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
</span><span class="pun">[</span><span class="pln">string</span><span class="pun">]</span><span class="pln">$httpVerb </span><span class="pun">=</span><span class="pln"> </span><span class="str">'PATCH'</span><span class="pln">
</span><span class="pun">[</span><span class="pln">string</span><span class="pun">]</span><span class="pln">$resourcePath </span><span class="pun">=</span><span class="pln"> </span><span class="str">"/website/websites"</span><span class="pln">
$AllProtocols </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="typ">System</span><span class="pun">.</span><span class="typ">Net</span><span class="pun">.</span><span class="typ">SecurityProtocolType</span><span class="pun">]</span><span class="str">'Tls11,Tls12'</span><span class="pln">
</span><span class="pun">[</span><span class="typ">System</span><span class="pun">.</span><span class="typ">Net</span><span class="pun">.</span><span class="typ">ServicePointManager</span><span class="pun">]::</span><span class="typ">SecurityProtocol</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> $AllProtocols
$resourcePath </span><span class="pun">+=</span><span class="pln"> </span><span class="str">"/$Id"</span><span class="pln">
$data </span><span class="pun">=</span><span class="pln"> $PropertyTable </span><span class="pun">|</span><span class="pln"> </span><span class="typ">ConvertTo</span><span class="pun">-</span><span class="typ">Json</span><span class="pln"> </span><span class="pun">-</span><span class="typ">Depth</span><span class="pln"> </span><span class="lit">6</span><span class="pln">
$enc </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="typ">System</span><span class="pun">.</span><span class="typ">Text</span><span class="pun">.</span><span class="typ">Encoding</span><span class="pun">]::</span><span class="pln">UTF8
$encdata </span><span class="pun">=</span><span class="pln"> $enc</span><span class="pun">.</span><span class="typ">GetBytes</span><span class="pun">(</span><span class="pln">$data</span><span class="pun">)</span><span class="pln">
$url </span><span class="pun">=</span><span class="pln"> </span><span class="str">"https://$AccountName.logicmonitor.com/santaba/rest$resourcePath"</span><span class="pln">
$epoch </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="typ">Math</span><span class="pun">]::</span><span class="typ">Round</span><span class="pun">((</span><span class="typ">New</span><span class="pun">-</span><span class="typ">TimeSpan</span><span class="pln"> </span><span class="pun">-</span><span class="pln">start </span><span class="pun">(</span><span class="typ">Get</span><span class="pun">-</span><span class="typ">Date</span><span class="pln"> </span><span class="pun">-</span><span class="typ">Date</span><span class="pln"> </span><span class="str">"1/1/1970"</span><span class="pun">)</span><span class="pln"> </span><span class="pun">-</span><span class="pln">end </span><span class="pun">(</span><span class="typ">Get</span><span class="pun">-</span><span class="typ">Date</span><span class="pun">).</span><span class="typ">ToUniversalTime</span><span class="pun">()).</span><span class="typ">TotalMilliseconds</span><span class="pun">)</span><span class="pln">
$requestVars </span><span class="pun">=</span><span class="pln"> $httpVerb </span><span class="pun">+</span><span class="pln"> $epoch </span><span class="pun">+</span><span class="pln"> $data </span><span class="pun">+</span><span class="pln"> $resourcePath
$hmac </span><span class="pun">=</span><span class="pln"> </span><span class="typ">New</span><span class="pun">-</span><span class="typ">Object</span><span class="pln"> </span><span class="typ">System</span><span class="pun">.</span><span class="typ">Security</span><span class="pun">.</span><span class="typ">Cryptography</span><span class="pun">.</span><span class="pln">HMACSHA256
$hmac</span><span class="pun">.</span><span class="typ">Key</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="typ">Text</span><span class="pun">.</span><span class="typ">Encoding</span><span class="pun">]::</span><span class="pln">UTF8</span><span class="pun">.</span><span class="typ">GetBytes</span><span class="pun">([</span><span class="typ">System</span><span class="pun">.</span><span class="typ">Runtime</span><span class="pun">.</span><span class="typ">InteropServices</span><span class="pun">.</span><span class="typ">Marshal</span><span class="pun">]::</span><span class="typ">PtrToStringAuto</span><span class="pun">(([</span><span class="typ">System</span><span class="pun">.</span><span class="typ">Runtime</span><span class="pun">.</span><span class="typ">InteropServices</span><span class="pun">.</span><span class="typ">Marshal</span><span class="pun">]::</span><span class="typ">SecureStringToBSTR</span><span class="pun">(</span><span class="pln">$AccessKey</span><span class="pun">))))</span><span class="pln">
$signatureBytes </span><span class="pun">=</span><span class="pln"> $hmac</span><span class="pun">.</span><span class="typ">ComputeHash</span><span class="pun">([</span><span class="typ">Text</span><span class="pun">.</span><span class="typ">Encoding</span><span class="pun">]::</span><span class="pln">UTF8</span><span class="pun">.</span><span class="typ">GetBytes</span><span class="pun">(</span><span class="pln">$requestVars</span><span class="pun">))</span><span class="pln">
$signatureHex </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="typ">System</span><span class="pun">.</span><span class="typ">BitConverter</span><span class="pun">]::</span><span class="typ">ToString</span><span class="pun">(</span><span class="pln">$signatureBytes</span><span class="pun">)</span><span class="pln"> </span><span class="pun">-</span><span class="pln">replace </span><span class="str">'-'</span><span class="pln">
$signature </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="typ">System</span><span class="pun">.</span><span class="typ">Convert</span><span class="pun">]::</span><span class="typ">ToBase64String</span><span class="pun">([</span><span class="typ">System</span><span class="pun">.</span><span class="typ">Text</span><span class="pun">.</span><span class="typ">Encoding</span><span class="pun">]::</span><span class="pln">UTF8</span><span class="pun">.</span><span class="typ">GetBytes</span><span class="pun">(</span><span class="pln">$signatureHex</span><span class="pun">.</span><span class="typ">ToLower</span><span class="pun">()))</span><span class="pln">
$headers </span><span class="pun">=</span><span class="pln"> </span><span class="pun">@{</span><span class="pln">
</span><span class="str">"Authorization"</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"LMv1 $accessId`:$signature`:$epoch"</span><span class="pln">
</span><span class="str">"Content-Type"</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"application/json"</span><span class="pln">
</span><span class="str">"X-Version"</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">3</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
$response </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Invoke</span><span class="pun">-</span><span class="typ">RestMethod</span><span class="pln"> </span><span class="pun">-</span><span class="typ">Uri</span><span class="pln"> $url </span><span class="pun">-</span><span class="typ">Method</span><span class="pln"> $httpVerb </span><span class="pun">-</span><span class="typ">Header</span><span class="pln"> $headers </span><span class="pun">-</span><span class="typ">Body</span><span class="pln"> $encdata </span><span class="pun">-</span><span class="typ">ErrorAction</span><span class="pln"> </span><span class="typ">Stop</span><span class="pln">
$response</span>
mhashemi
Posted 4 years ago·Last reply 2 years ago
4 comments
JonG
·2 years agoVery good to know, thank you!
Michael Baker
·2 years agoThe UI is API driven.. when in doubt fire up Dev Tools in your browser and modify anything and see the payload it uses..
I have had to do this several times for undocumented API endpoints works a treat!
JonG
·2 years agoAny chance you got this working? Trying to figure out how to add a custom property to a website via API as well. I’m actually not sure that the API supports it as it isn’t mentioned in the documentation.
Edit: Nevermind, I just got it working. It looks like it has to be set in the “properties” object, not “customProperties” like you would use on a device record. For example:
LM User
·4 years agoI'd have to look into the documentation, but i think the problem is that you're trying to set 'propertyName' at the root of the device, when it should go under the "customProperties" object. Also, when patching, I think you have to add a query parameter that specifies which fields you are attempting to patch. Don't have access to a LM portal so i can't test at the moment.