Symbio REST access using Powershell
Pre-requisites
- Authentication token that is active and valid
- Required parameters:
- Server name
- Storage collection name
- Storage name
- REST authentication token
Executing a REST command using Powershell
The Invoke-RestMethod cmdlet sends HTTP and HTTPS requests to Representational State Transfer (REST) web services that returns richly structured data.
PowerShell formats the response based to the data type.
For more information please have a look at the documentation on Microsoft: Microsoft documentation
Example script to get released processes or documents
function Fetch_Data {
[CmdletBinding()]
# Parameters for collecting data
param(
# Server address parameter
[Parameter(Mandatory=$true, HelpMessage="Please enter the server address!", Position=1)]
[ValidateNotNullOrEmpty()]
[string]$address,
# Collection name parameter
[Parameter(Mandatory=$true, HelpMessage="Please enter the collection name!", Position=2)]
[ValidateNotNullOrEmpty()]
[string]$collection,
# Storage name parameter
[Parameter(Mandatory=$true, HelpMessage="Please enter the storage name!", Position=3)]
[ValidateNotNullOrEmpty()]
[string]$storage,
# REST API Token parameter
[Parameter(Mandatory=$true, HelpMessage="Please enter the REST API token!", Position=4)]
[ValidateNotNullOrEmpty()]
[string]$token,
# Export data to file parameter. False is default. Parameter is not mandatory
[Parameter(Mandatory=$false, HelpMessage="Export result in json file?", Position=5)]
[bool]$fileExport = $false
)
Process
{
try
{
$params = @{
Uri = "https://$($address)/$($collection)/$($storage)/_api/rest/facets/processes/views/lastReleasedProcesses/elements"
Headers = @{ 'symbio-auth-token' = $token; 'api-version' = '2.0' }
Method = 'GET'
ContentType = 'application/json'
}
# Response of the API request. Data will be taken with depth of 10 levels
$result = Invoke-RestMethod @params | ConvertTo-Json -Depth 10
# Converting from JSON to table data (Easier for customization of fields and ordering)
$tableResult = $result | ConvertFrom-Json
$valuesResult = ''
# All data is putting to one table object
$hash = @{}
foreach($row in $tableResult.PSObject.Properties){
if($row.Value -is [int]) { continue }
$hash[$row.Name] = $row.Value
$valuesResult = $hash[$row.Name]
}
$arrayOfElements = New-Object System.Collections.ArrayList
# Mapping all data to fields which will be shown to the final data
foreach($element in $valuesResult)
{
$parameters = [ordered]@{
Name = $element.attributes.Name
State = $element.attributes.state1
Type = $element.type
LinkAddress = $element.attributes.links.'127'.fullAddress
LinkTitle = $element.attributes.links.'127'.title
}
[void]$arrayOfElements.Add($parameters)
}
# Checking if the data is not empty
if($arrayOfElements.Count -lt 1)
{
Write-Host "Response returned 0 elements. Please check input parameters, and try again..."
}
else
{
# If the data isn't empty, it's checking if parameter export to file is True
$file_export = $fileExport
$today = Get-Date -Format yyyy-MM-ddTHH-mm-ss-ff
if($file_export -eq $true)
{
$arrayOfElements | ConvertTo-Json | Out-File ".\processes$($today).json"
}
else { $arrayOfElements | ConvertTo-Json }
}
}
catch [System.Management.Automation.CommandNotFoundException]
{
Write-Host "Command not found. Please execute again..."
Write-Host $_.ScriptStackTrace
}
catch [System.Net.WebException],[System.SystemException]
{
Write-Host "Web error. Please check input parameters and try again."
Write-Host $_.ScriptStackTrace
}
}
}
Example output
The script can output the json directly, or create a file with the same content, depending on the $fileExport parameter.
[
{
"Name": {
"1033": "Sub Process 1",
"1031": "Teilprozess 1"
},
"State": null,
"Type": "subProcess",
"LinkAddress": null,
"LinkTitle": null
},
{
"Name": {
"1033": "Sub Process 2",
"1031": "Teilprozess 2"
},
"State": "InProgress",
"Type": "subProcess",
"LinkAddress": null,
"LinkTitle": null
},
{
"Name": {
"1033": "Sub Process 3",
"1031": "Teilprozess 3"
},
"State": null,
"Type": "subProcess",
"LinkAddress": null,
"LinkTitle": null
},
]
How to call the Powershell script
You can save the script in a ****.ps file. The parameters are: 1. Server name 1. Storage collection name 1. Storage name 1. Authentication token 1. File export (true/false) (Optional parameter)
Running it with user input
When running the the script file without parameters, the script will prompt you to enter the required values. Using !? at that point will give you a hint on the required value.
Running inline
You can also run the script and provide the required parameters at runtime. Example:
run.ps -address <servername> -collection <collection-name> -storage <storage-name> -token <auth-token> -dataType 1 -fileExport false