0

Я создаю защиту папок SSRS программно с помощью ReportService2010 и Powershell 4.0. Я могу создавать папки, а затем успешно добавлять пользователей в папку.Как удалить пользователя из безопасности папок SSRS с помощью Powershell

Мое требование
Я хочу добавить всех пользователей в домашней папке (Browser роль). Но для папок под папкой «Главная» только выбранные пользователи должны иметь доступ к выбранным папкам.

Но из-за наследования из Домашней папки все пользователи получили роль браузера во всех папках. Поэтому мне нужно удалить нежелательных пользователей из безопасности папок с помощью Powershell. Я искал так долго, но не смог найти ни одного полезного сообщения.

Как я могу удалить пользователя или группу из безопасности Папки Programmatically?

EDIT

Код, используемый для добавления папок и папок безопасности
Im используя глобальную переменную для SSRS прокси

function Add-SSRSFolder(
    [Parameter(Position=0,Mandatory=$true)] 
    [string]$folderName, 

    [Parameter(Position=1,Mandatory=$true)] 
    [string]$Parent 
) 
{ 
    #get autogenerated namespace 
    $type = $ssrsProxy.GetType().Namespace 
    $datatype = ($type + '.Property') 

    #Here we create a new object of Property type and set properties 
    $property = New-Object ($datatype); 
    $property.Name = “Description” 
    $property.Value = “” 

    #Report SSRS Properties 
    #we need a property array to pass to the CreateFolder method 
    $numproperties = 1 
    $properties = New-Object ($datatype + '[]')$numproperties 
    $properties[0] = $property; 

    write-host "Creating New Folder...... $foldername" 
    $newFolder = $ssrsProxy.CreateFolder($foldername, $Parent, $properties); 
} 


function Add-SSRSItemSecurity 
(
    [Parameter(Position=0,Mandatory=$true)] 
    [string]$itemPath, 

    [Parameter(Position=1,Mandatory=$true)] 
    [string]$groupUserName, 

    [Parameter(Position=2,Mandatory=$true)] 
    [string]$role, 

    [Parameter(Position=3)] 
    [bool]$inherit=$true 
) 
{ 
    $type = $ssrsProxy.GetType().Namespace; 
    $policyType = "{0}.Policy" -f $type; 
    $roleType = "{0}.Role" -f $type; 

    $policies = $ssrsProxy.GetPolicies($itemPath, [ref]$inherit); 

    $Policy = $policies | 
    Where-Object { $_.GroupUserName -eq $groupUserName } | 
    Select-Object -First 1 

    if (-not $Policy) { 
     $Policy = New-Object ($policyType) 
     $Policy.GroupUserName = $GroupUserName 
     $Policy.Roles = @() 
     $Policies += $Policy 
     $msg = "[Add-SSRSItemSecurity()] Adding new policy: '{0}'" -f $GroupUserName 
     Write-Host $msg 
    } 

    $r = $Policy.Roles | 
     Where-Object { $_.Name -eq $role } | 
     Select-Object -First 1 
    if (-not $r) { 
     $r = New-Object ($roleType) 
     $r.Name = $role 
     $Policy.Roles += $r 
     $msg = "[Add-SSRSItemSecurity()] Adding new role: '{0}'" -f $role 
     Write-Host $msg 
    } 

    $ssrsProxy.SetPolicies($itemPath,$policies); 
} 

Кто-то пожалуйста, помогите. Thanks

+0

Какой код вы написали до сих пор, и он дал вам какие-либо ошибки? Этот процесс неоднократно обсуждался на этом сайте, поэтому должен быть ответ, который соответствует вашим потребностям, если только ситуация не уникальна. – gravity

+0

Нет ошибок, поскольку я еще не пробовал. Я не нашел способ удалить защиту папок. Я обновил вопрос с помощью кода, который я использую, для создания папок и добавления безопасности. –

ответ

0

Вот код для удаления пользователя из всех папок или определенной папки.

Я также писал об этом и подобных сценариев на SQLShack

#--------------------------------------------- 
# Author: Craig Porteous 
#   @cporteous 
# Synopsis: Remove a specific user/group from 
#   all SSRS (native mode) folders. 
#   Excludes inherited folders 
#--------------------------------------------- 

Clear-Host 
$ReportServerUri = 'http://PorteousSQL1/ReportServer/ReportService2010.asmx?wsdl' 
$InheritParent = $true 
$GroupUserName = 'PORTEOUSSQL1\pInstall' 
$folder = '/' 

$rsProxy = New-WebServiceProxy -Uri $ReportServerUri -UseDefaultCredential 
#List out all subfolders under the parent directory 
$items = $rsProxy.ListChildren($folder, $true) | ` 
     SELECT TypeName, Path, ID, Name | ` 
     Where-Object {$_.typeName -eq "Folder"} 
#Iterate through every folder   
foreach($item in $items) 
{ 
    $Policies = $rsProxy.GetPolicies($Item.Path, [ref]$InheritParent) 
    #Skip over folders marked to Inherit permissions. No changes needed. 
    if($InheritParent -eq $false) 
    { 
     #List out ALL policies on folder but do not include the policy for the specified user/group 
     $Policies = $Policies | Where-Object { $_.GroupUserName -ne $GroupUserName } 
     #Set the folder's policies to this new set of policies 
     $rsProxy.SetPolicies($Item.Path, $Policies); 
    } 
}