Поступила задача, держать в актуальном состояние определенный список ресурсов.
В качестве системы был выбран Confluence Rest Api. Инструмент автоматизации PowerShell.
Ниже, приведен скрипт который грузит готовый HTML файл, на определенную страницу.
Стоит заметить, что Confluence, в чистом виде не понимает разметку html. Пример синтаксиса разметки, рекомендую посмотреть создав нужную страницу и запросив её содержимое через все тот же api.
К сожалению,в новых версиях в API отсутствует возможность авторизовываться с помощю токена. Я исользую обычный Basic. Первые три строчки кода, отвечают за формирование кредов. Первой строкой, выгружаем в секюр-формате пароль в файл 🙂
Стоит обращать внимание, на передачи правильного числа ревизии страницы:
1 |
($CurrentConfluence.version.number + 1) |
Ниже, представлен весь код. Это первая версия кода, которая совершено не оптимальна по многим параметрам.
Но, предельна проста для понимания.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
#read-host -assecurestring| convertfrom-securestring | out-file C:\tasks\wiki_RoomList\c.txt $password = get-content C:\tasks\wiki_RoomList\c.txt | convertto-securestring $credentials = new-object -typename System.Management.Automation.PSCredential -argumentlist "ad_wiki",$password $Headers = @{"User-Agent"="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"; "Accept"="text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"; "Accept-Encoding"="gzip, deflate, br"; "Accept-Language"="ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7"; ;"Authorization" = "Basic "+[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(($Credentials.UserName+":"+[System.Runtime.InteropServices.marshal]::PtrToStringAuto([System.Runtime.InteropServices.marshal]::SecureStringToBSTR($Credentials.Password)) )))} $z2 = Invoke-WebRequest -uri "https://wiki.win13.ru/rest/api/content/29909268000?expand=body.storage,version,space,ancestor" -Method Get -Headers $Headers $MaxJsonLength = 67108864 $JSONSerial = New-Object -TypeName System.Web.Script.Serialization.JavaScriptSerializer $JSONSerial.MaxJsonLength = $MaxJsonLength $CurrentConfluence = ($JSONSerial.DeserializeObject($z2)) $CurrentConfluence = $z2|ConvertFrom-Json $value = Get-Content C:\tasks\wiki_RoomList\jira_table_room.html $Body = @{ "id" = ($CurrentConfluence.id) "type" = "page" "title" = ($CurrentConfluence.title) "version" = @{ "number" = ($CurrentConfluence.version.number + 1) } "status" = "current" "space" = @{ "id" = ($CurrentConfluence.space.id) "key" = ($CurrentConfluence.space.key) "type" = ($CurrentConfluence.space.type) } "body" = @{ "storage" = @{ "value" = "$value" "representation" = "storage" } } } $Body = $Body | ConvertTo-Json $ContentType = "application/json" Invoke-RestMethod -Method PUT -Uri "https://wiki.win13.ru/rest/api/content/29909268000" -Body $Body -ContentType $ContentType -Headers $Headers del C:\tasks\Jira_RoomList\jira_table_room.html |
Привет.
PermalinkСпасибо за статью.
Скрипт рабочий.