我正在編寫一個PowerShell腳本,以使用SSRS Web服務將若干報告部署到SQL Server Reporting Services 2008 R2。我對這種方法非常滿意,很容易創建一個新的部署文件夾並上傳報告。以下是文件夾的代碼顯示創建的一個片段:報告服務2008 R2 Web服務API - 如何管理安全權限?
$reportServerUri = "http://{0}/ReportServer/ReportService2005.asmx" -f $reportServerName
$proxy = New-WebServiceProxy -Uri $reportServerUri -Namespace SSRS.ReportingService2005 -Credential $credential
#Dont currently set any properties so set empty array of properties
$propertyArray = @()
$warnings = $proxy.CreateFolder($folderName, $folderParent, $propertyArray)
不過我也希望能夠設置文件夾的權限,這就是我有點卡住了。我想要複製的是從Web UI中選擇文件夾的安全選項,併爲角色添加用戶\組。
我認爲這可能是通過createArray的createFolder調用完成的,但我還沒有能夠在文檔中找到任何信息(探查現有屬性並且看不到任何相關的東西),我一直在尋找在http://msdn.microsoft.com/en-us/library/cc282788.aspx指導。因此在那裏達到了死衚衕。我認爲可能有一個特定的方法來管理這個級別的權限,但還沒有能夠確定一個。
我正在使用ReportingService2005的Web服務,我知道也有2010年的Web服務,但我還沒有找到我要找的東西。
有誰知道我如何使用Web服務api添加對文件夾的權限(並且可能是其他對象(如報表和共享數據源)的一致方法)?我認爲它必須是可能的,因爲Web UI允許你這樣做。這不是一個PowerShell問題,而是關於api用來管理權限的問題。
更新 - 以下是似乎可以完成這項工作的代碼片段。我需要細化一下,因爲看起來策略的更新必須包含原始列表,所以我需要獲取當前的策略,將新策略添加到此列表中並使用完整列表進行更新。但我會稍後解決!
$Policies = $global:ssrsproxy.GetPolicies($ItemPath, [ref] $InheritsFromParent)
$PolicyAlreadyExists = $false
$Policies | Foreach-Object{ if ($_.GroupUserName -eq $GroupUserName)
{$PolicyAlreadyExists = $true} }
$Policies | Foreach-Object{ $_ | get-member }
if ($PolicyAlreadyExists){
"Policy already applied."
} else {
$Policy = New-Object SSRS.ReportingService2005.Policy
$Policy.GroupUserName = $GroupUserName
$Roles = @()
$Role = New-Object SSRS.ReportingService2005.Role
$Role.Name = $RoleName
$Roles += $Role
$Policy.Roles = $Roles
$global:ssrsproxy.SetPolicies($ItemPath, $Policy)
"Policy applied."
}