Combining both (article1 and article2), i was able to come up with a powershell script to set user permission in SQL Reporting Services (SSRS)
<# .SYNOPSIS Set user permissions in SQL Reporting Services using Web Service .DESCRIPTION Set user permissions in SQL Reporting Services using Web Service .EXAMPLE Add-SSRSItemSecurity -webServiceUrl "http://[ServerName]/ReportServer/ReportService2005.asmx" -itemPath "MyReportFolder" -groupUserName RPAULO\User1 -role Browser .EXAMPLE Add-SSRSItemSecurity -url "http://[ServerName]/ReportServer/ReportService2005.asmx" -itemPath "MyReportFolder" -u RPAULO\User1 -r "Content Manager" #> function Add-SSRSItemSecurity ( [Parameter(Position=0,Mandatory=$true)] [Alias("url")] [string]$webServiceUrl, [Parameter(Position=1,Mandatory=$true)] [Alias("path")] [string]$itemPath, [Parameter(Position=2,Mandatory=$true)] [Alias("u")] [string]$groupUserName, [Parameter(Position=3,Mandatory=$true)] [Alias("r")] [string]$role, [Parameter(Position=2)] [bool]$inherit=$true ) { #Fix item path if not starting with / if(!$itemPath.StartsWith("/")) { $itemPath = "/" + $itemPath} #Create Proxy Write-Host "[Add-SSRSItemSecurity()] Creating Proxy, connecting to : $webServiceUrl" $ssrsProxy = New-WebServiceProxy -Uri $webServiceUrl -UseDefaultCredential $type = $ssrsProxy.GetType().Namespace; $policyType = "{0}.Policy" -f $type; $roleType = "{0}.Role" -f $type; Write-Host "[Add-SSRSItemSecurity()] Retrieving all existing policies." $policies = $ssrsProxy.GetPolicies($itemPath, [ref]$inherit); $a = 1; foreach($policy in $policies) { foreach($r in $policy.Roles) { $msg = "[Add-SSRSItemSecurity()] Existing Policy # {0} Group Name: {1}, Role: {2}" -f $a, $policy.GroupUserName, $r.Name Write-Host $msg } $a+=1; } $msg = "[Add-SSRSItemSecurity()] Total Existing Policies: " + $policies.Length; Write-Host $msg $Policy = $policies | Where-Object { $_.GroupUserName -eq $groupUserName } | Select-Object -First 1 if (-not $Policy) { $Policy = New-Object ($policyType) $Policy.GroupUserName = $GroupUserName $Policy.Roles = @() $Policies += $Policy $msg = "[Add-SSRSItemSecurity()] Adding new policy: '{0}'" -f $GroupUserName Write-Host $msg } $r = $Policy.Roles | Where-Object { $_.Name -eq $role } | Select-Object -First 1 if (-not $r) { $r = New-Object ($roleType) $r.Name = $role $Policy.Roles += $r $msg = "[Add-SSRSItemSecurity()] Adding new role: '{0}'" -f $role Write-Host $msg } #Set the policies $ssrsProxy.SetPolicies($itemPath,$policies); }