Here are some code fragments that might help when dealing with CTERA REST responses. For a complete PowerShell module check this post Module: biz.dfch.PS.Storebox.Api.
1. Selecting an Attribute value based on its ‘id’:
function ConvertFrom-CteraRestObjAtt {
[CmdletBinding(
HelpURI='http://dfch.biz/PS/Storebox/Utilities/ConvertFrom-CteraRestObjAtt'
)]
[OutputType([string])]
Param (
[Parameter(Mandatory = $true, Position = 0)]
[alias("o")]
$InputObject
,
[Parameter(Mandatory = $true, Position = 1)]
[alias("id")]
[string] $idAttribute
,
[ValidateSet('Value', 'List')]
[Parameter(Mandatory = $false, Position = 2)]
[alias("t")]
[string] $Type = 'Value'
)
BEGIN {
$datBegin = [datetime]::Now;
[string] $fn = $MyInvocation.MyCommand.Name;
} # BEGIN
PROCESS {
if([string]::IsNullOrEmpty($idAttribute) -or [string]::IsNullOrWhiteSpace($idAttribute)) {
$e = New-CustomErrorRecord -m "Invalid argument 'idAttribute' specified. Object is empty." -cat InvalidArgument -o $idAttribute;
Log-Debug $fn $e.Exception.Message;
$OutputParameter = $null;
$PSCmdlet.ThrowTerminatingError($e);
} # if
if($InputObject -is [string]) {
[xml] $xml = $InputObject;
} elseif($InputObject -is [System.Xml.XmlElement]) {
$xml = $InputObject;
} else {
$e = New-CustomErrorRecord -m ("Invalid argument 'InputObject' specified. Object has invalid type: '{0}'." -f $InputObject.GetType()) -cat InvalidType -o $InputObject;
Log-Debug $fn $e.Exception.Message;
$OutputParameter = $null;
$PSCmdlet.ThrowTerminatingError($e);
} # if
$fReturn = $false;
$OutputParameter = $null;
foreach($a in $xml.att) {
if($a.id -eq $idAttribute) {
if($Type -eq 'List') {
$OutputParameter = $a.list.OuterXml;
} else {
$OutputParameter = '{0}' -f $a.val;
} # if
$fReturn = $true;
break;
} # if
} # foreach
if(!$fReturn) { $OutputParameter = $null; }
return $OutputParameter;
} # PROCESS
END {
} # END
} # ConvertFrom-CteraRestObjAtt
Export-ModuleMember -Function ConvertFrom-CteraRestObjAtt;
2. Converting a list ov ‘val’ into an array
[xml] $l = ConvertFrom-CteraRestObjAtt $r.list.obj[1] users -Type list;
$l
list
----
list
$l.list
val
---
{objs/17/portal/PortalUser/usera1, objs/42/portal/PortalUser/usera2}
3. Loading XML template from ‘defaults’ and populate them:
$r = Invoke-CteraCommand -Api 'defaults/ProjectACLRule';
$y = $r.obj.SelectSingleNode("//att[@id = 'name']");
$y.set_InnerXml('<val>tralala</val>');
$y = $r.obj.SelectSingleNode("//att[@id = 'uid']");
$y.set_InnerXml('<val>42</val>');
$y = $r.obj.SelectSingleNode("//att[@id = 'permissions']");
$y.set_InnerXml('<val>ReadOnly</val>');
$y = $r.obj.SelectSingleNode("//att[@id = 'type']");
$y.set_InnerXml('<val>LocalUser</val>');
$r.obj.OuterXml | Format-Xml;
<obj class="ProjectACLRule">
<att id="expiration" />
<att id="name">
<val>EdgarSchnittenfittich</val>
</att>
<att id="permissions">
<val>ReadOnly</val>
</att>
<att id="type">
<val>LocalUser</val>
</att>
<att id="uid">
<val>42</val>
</att>
</obj>
$list = $r.obj.OuterXml;
$r = Invoke-CteraCommand -Api 'defaults/ProjectCreateParams';
$y = $r.obj.SelectSingleNode("//att[@id = 'acl']");
$y.set_InnerXML( ("<list>{0}</list>" -f $list) );
