2012-01-21 73 views
6

我正在編寫一個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." 
}   

回答

2

使用SetPolicies方法。首先定義一個包含組/用戶和所需角色的Policy(s)的數組,然後將此數組與該項目一起傳遞給SetPolicies。

相關問題