0

ReportService2010とPowershell 4.0を使用してプログラムでSSRSフォルダセキュリティを作成しています。私はフォルダを作成してから、ユーザーをフォルダセキュリティに正常に追加できます。Powershellを使用してSSRSフォルダセキュリティからユーザーを削除する方法

私の要件は、私はホームフォルダ(ブラウザの役割)にすべてのユーザーを追加したい
です。しかし、ホームフォルダの下にあるフォルダの場合、選択したユーザーだけが選択したフォルダにアクセスできる必要があります。

しかし、ホームフォルダの継承のため、すべてのユーザーはすべてのフォルダに対してブラウザロールを取得しています。だから私はPowershellを使用してフォルダのセキュリティから不要なユーザーを削除する必要があります。私はとても長い間探してきましたが、1つの役に立つポストを見つけることができませんでした。

フォルダのセキュリティからユーザーまたはグループをプログラムで削除するにはどうすればよいですか?

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

誰かが助けてくださいSSRSプロキシのグローバル変数を使用して、フォルダおよびフォルダのセキュリティ
イムを追加するために使用

EDIT

コード。 ありがとう

+0

SQLShackにこれと類似したスクリプトについて書きましたか?この種のプロセスはこのサイトで繰り返し議論されているので、状況が非常にユニークでない限り、ニーズに合った答えが必要です。 – gravity

+0

私はまだ試していないのでエラーはありません。私は、フォルダのセキュリティを削除する方法を見つけることはありません。私はフォルダを作成し、セキュリティを追加するために使用しているコードで質問を更新しました。 –

答えて

0

すべてのフォルダまたは特定のフォルダからユーザーを削除するコードです。

は、私はまた、あなたがこれまでに書かれている、そしてそれはあなたにすべてのエラーを与えているどのようなコード

#--------------------------------------------- 
# 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); 
    } 
} 
関連する問題