I want to use confluence to automate some auditing of our enviroments but am running into errors when I try and upload data via the API.
Honestly i think i may be approaching this the wrong way so please feel free to correct me.
I am collecting data from AD then using the built in Convertto-html command. After a litle clean up my data looks like bellow
<head>
<title>HTML TABLE</title>
</head><body>
<table>
<colgroup><col/><col/><col/></colgroup>
<tr><th>SamAccountName</th><th>LastLogonDate</th><th>Description</th></tr>
<tr><td>Usern.nme1</td><td>13/10/2019 10:05:05</td><td>Fleet</td></tr>
<tr><td>Usern.nme2</td><td>18/09/2018 15:40:12</td><td>CSR Team
</table>
</body>
I then add this with some other data to a variable calle $body, which looks like the following:
{"type":"page","title":"90 day inactivity report", "version":{"number":7},"body":{"storage":{"value":"<head>
<title>HTML TABLE</title>
</head><body>
<table>
<colgroup><col/><col/><col/></colgroup>
<tr><th>SamAccountName</th><th>LastLogonDate</th><th>Description</th></tr>
<tr><td>Usern.nme1</td><td>13/10/2019 10:05:05</td><td>Fleet</td></tr>
<tr><td>Usern.nme2</td><td>18/09/2018 15:40:12</td><td>CSR Team
<tr><td>Usern.nme1</td><td>16/06/2018 17:54:21</td><td>CSR</td></tr>
</table>
</body>","representation":"storage"}}}
And then issue the following to upload the data
Invoke-RestMethod https://jira.domain.co.uk/confluence/rest/api/content/45056041?expand=body.storage -Method Put -Headers $Headers -Body $body
and get this error
Invoke-RestMethod : The remote server returned an error: (500) Internal Server Error.
At line:1 char:1
My feeling is it doesnt like a character in the data, as i tried this with just "test" as the payload and it works without issue. but the error is so vague.
Can anyone tell me how could i:
Thanks in advance
Hi,
Your HTML code appears to be missing a end of column and end of row tag </td></tr> on the CSR Team section. Also when posting HTML to Confluence I have found you don't need the HTML <Header><Title><Body> elements as well, Confluence over-rides these with it's own HTML Page elements.
Here is my code that I have used to update a page :-)
The code also reads the current page version and auto increments the version number every time run the script.
Remember to update your Confluence Page URL and ID number
clear-host
clear-history
write-host -ForegroundColor Cyan "Requesting Login ID and password to authenticate with confluence."
if(-not($Credentials))
{
$Credentials = Get-Credential
}
$ConfluenceURL = "https://confluence.site/rest/api/"
$ConfluencePageID = "123456"
$Headers = @{"Authorization" = "Basic "+[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(($Credentials.UserName+":" `
+[System.Runtime.InteropServices.marshal]::PtrToStringAuto([System.Runtime.InteropServices.marshal]::SecureStringToBSTR($Credentials.Password)) )))
"Accept"="application/json"
"ContentType"="application/json"
'X-Atlassian-Token' = 'nocheck'
}
$Call = "content/{0}?expand=version,body.storage,ancestors,space,results,contenttype" -f $ConfluencePageID
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
write-host -ForegroundColor Cyan "Logging into the confluence page that requires updating"
$CurrentConfluence = Invoke-WebRequest -Method GET -Headers $Headers -Uri ($ConfluenceURL + $Call) -UseBasicParsing | ConvertFrom-Json
$HTMLVersion = $($CurrentConfluence.version.number + 1)
Write-Host -ForegroundColor Cyan "obtaining HTML input data."
$HTMLBody = '<div><p><table><colgroup><col/><col/><col/></colgroup><tr><th>SamAccountName</th><th>LastLogonDate</th><th>Description</th></tr><tr><td>User.Name1</td><td>13/10/2019 10:05:05</td><td>Fleet</td></tr><tr><td>User.Name2</td><td>18/09/2018 15:40:12</td><td>CSR Team </td></tr><tr><td>User.Name1</td><td>16//06//2018 17:54:21</td><td>CSR</td></tr></table></p></div>'
$Body = '{{"type":"{0}","title":"{1}","version":{{"number":"{2}" }},"body":{{"storage":{{"value":"{3}","representation":"storage"}}}}}}' -f $CurrentConfluence.type, $CurrentConfluence.title, $HTMLVersion, $HTMLBody
[void][System.Text.Encoding]::UTF8.GetBytes($Body)
$Call = "content/$($ConfluencePageID)"
Write-Host -ForegroundColor Yellow "Updated the body contents with new information."
$Error.Clear()
read-host “Press ENTER to publish the update...”
try
{
$UpdateConfluence = Invoke-WebRequest -Method Put -Uri ($ConfluenceURL + $Call) -Body $Body -Headers $Headers -ContentType "application/json;" -UseBasicParsing | convertfrom-json
Write-Host -ForegroundColor Green "Update published"
}
catch
{
$Error
}
Some further investigation suggests that this is caused by my table being a array..
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.