0

Ich erstellen SSRS-Ordner Sicherheit programmgesteuert mit ReportService2010 und Powershell 4.0. Ich kann Ordner erstellen und dann dem Ordner Sicherheit erfolgreich Benutzer hinzufügen.So entfernen Sie einen Benutzer aus SSRS-Ordner Sicherheit mit Powershell

Meine Forderung ist
ich alle Benutzer auf dem Home-Ordner (Browser Rolle) hinzufügen möchten. Aber für Ordner im Home-Ordner sollten nur ausgewählte Benutzer Zugriff auf ausgewählte Ordner haben.

Aber aufgrund der Vererbung aus dem Home-Ordner haben alle Benutzer Browser Role auf alle Ordner bekommen. Daher muss ich die unerwünschten Benutzer aus der Ordnersicherheit mithilfe von Powershell entfernen. Ich habe so lange gesucht, konnte aber keinen einzigen hilfreichen Beitrag finden.

Wie entferne ich einen Benutzer oder eine Gruppe programmatisch aus der Sicherheit eines Ordners?

EDIT

-Code für das Hinzufügen von Ordnern und Ordner-Sicherheit
Im mit einer globalen Variablen für SSRS-Proxy

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); 
} 

jemand bitte helfen verwendet. Danke

+0

Welche Code, den Sie bisher geschrieben haben, und hat es Sie Fehler gegeben? Diese Art von Prozess wurde auf dieser Website wiederholt diskutiert, daher sollte es eine Antwort geben, die Ihren Bedürfnissen entspricht, es sei denn, die Situation ist sehr einzigartig. – gravity

+0

Keine Fehler, da ich noch keine ausprobiert habe. Ich finde keine Möglichkeit, die Ordnersicherheit zu entfernen. Ich habe die Frage mit dem Code aktualisiert, den ich verwende, um Ordner zu erstellen und Sicherheit hinzuzufügen. –

Antwort

0

Hier ist der Code, um einen Benutzer aus allen Ordnern oder einem bestimmten Ordner zu entfernen.

Ich schrieb auch über dieses und ähnliche Skripte auf 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); 
    } 
}