如果这看起来是一个 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 的其他地毯所包含的所有信息,因此这更令人难以接受,因为您不得不手动取消这些地毯上的所有用户的授权。但还是感谢提供的信息。