使用 Powershell 在 Reporting Services 中设置用户权限

使用 Powershell 在 Reporting Services 中设置用户权限

如果这看起来是一个 gimme-teh-codez 问题,请原谅,但我之所以问这个问题,是因为我对 Powershell 还是个新手。

如何使用 Powershell 将特定域用户或组添加到 SSRS2008 中的特定报告角色(例如内容管理员或浏览器角色)?是否有简单的一行或两行脚本来实现它?

谢谢!

(我之前已经在 SO 上发布过这个问题这里)。

答案1

我在自己尝试寻找这个问题时遇到了这个问题。
最后,我编写了这个函数,它可以与 SSRS 2008(如最初要求的那样)一起使用,一直到当前版本的 SSRS(2016)。

虽然它不是一个两行答案,但它确实定义了一个函数,一旦创建,就会提供单行方法......所以在我看来,这很重要(特别是因为你不能只用两行来做到这一点)。

希望有人觉得它有用!

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;

答案2

您确实弹出此 shell 并消除了更改参数的麻烦,因为这样可以消除用户的名称、地毯的位置和表格的功能,而消除表格是因为在实际操作中需要用户输入访问权限但是,仅仅按照指定的地毯,由于存在 power bi 的其他地毯所包含的所有信息,因此这更令人难以接受,因为您不得不手动取消这些地毯上的所有用户的授权。但还是感谢提供的信息。

相关内容