Usando o Powershell para definir permissões de usuário no Reporting Services

3

Desculpas se isso parece ser uma pergunta sobre o gimme-te-codez, mas eu estou perguntando isso porque eu sou um n00b quando se trata de Powershell.

Como uso o Powershell para adicionar um determinado usuário ou grupo de domínio a uma função de relatório específica no SSRS2008 (por exemplo, a função Gerenciador de conteúdo ou Navegador)? Existe um script simples de uma ou duas linhas para alcançá-lo?

Obrigado!

(Eu já postei essa pergunta anteriormente em SO aqui ).

    
por slugster 21.06.2010 / 13:56

1 resposta

4

Eu me deparei com essa pergunta enquanto tentava encontrar o mesmo eu mesmo.
No final, eu escrevi essa função, que funciona com o SSRS 2008 (conforme solicitado originalmente), até a versão atual do SSRS (2016).

Como não é uma resposta de duas linhas, define uma função que, uma vez criada, fornece um método de linha única ... então, em minha opinião, isso conta (especialmente porque você não pode fazer isso com apenas dois linhas).

Espero que alguém ache útil!

function Add-SSRSUserRole
(   
    [string]$reportServerUrl,[string]$userGroup,[string]$requiredRole,[string]$folder,[bool]$inheritFromParent
)
{
    #Ensure we stop on errors
    $ErrorActionPreference = "Stop";
    #Connect to the SSRS webservice 
    $ssrs = New-WebServiceProxy -Uri "$reportServerUrl" -UseDefaultCredential;
    $namespace = $ssrs.GetType().Namespace;
    $changesMade = $false;

    #Look for a matching policy     
    $policies = $ssrs.GetPolicies($folder, [ref]$inheritFromParent);
    if ($policies.GroupUserName -contains $userGroup)
    {
        Write-Host "User/Group already exists. Using existing policy.";
        $policy = $policies | where {$_.GroupUserName -eq $userGroup} | Select -First 1 ;
    }
    else
    {
        #A policy for the User/Group needs to be created
        Write-Host "User/Group was not found. Creating new policy.";
        $policy = New-Object -TypeName ($namespace + '.Policy');
        $policy.GroupUserName = $userGroup;
        $policy.Roles = @();
        $policies += $policy;
        $changesMade = $true;
    }

    #Now we have the policy, look for a matching role
    $roles = $policy.Roles;
    if (($roles.Name -contains $requiredRole) -eq $false)
    {
        #A role for the policy needs to added
        Write-Host "Policy doesn't contain specified role. Adding.";
        $role = New-Object -TypeName ($namespace + '.Role');
        $role.Name = $requiredRole;
        $policy.Roles += $role;
        $changesMade = $true;
    }
    else 
    {
        Write-Host "Policy already contains specified role. No changes required.";
    }

    #If changes were made...
    if ($changesMade)
    {
        #...save them to SSRS
        Write-Host "Saving changes to SSRS.";
        $ssrs.SetPolicies($folder, $policies);
    }
    Write-Host "Complete.";
}

[string]$url = "http://localhost/ReportServer/ReportService2006.asmx?wsdl";
Add-SSRSUserRole $url "Everyone" "Browser" "/MyReportFolder" $true;
Add-SSRSUserRole $url "Domain\User" "Browser" "/MyReportFolder" $true;
    
por 09.05.2017 / 11:33