Partilhar via


Gerir os proprietários de subscrições e gerir subscrições - PowerShell

Aplica-se a: SQL Server 2016 (13.x) Serviços de Relatórios e versões posteriores SharePoint

A partir do SQL Server 2008 R2 (10.50.x) Reporting Services, pode transferir programaticamente a propriedade de uma subscrição de Reporting Services de um utilizador para outro. Este artigo apresenta vários scripts PowerShell para Windows que pode usar para alterar ou simplesmente listar a propriedade da subscrição. Cada exemplo inclui sintaxe de exemplo tanto para o modo Nativo como para o modo SharePoint. Depois de mudar o proprietário da subscrição, a subscrição será executada no contexto de segurança do novo proprietário, e o campo UserID no relatório mostra o valor do novo proprietário. Para mais informações sobre o modelo de objeto que as amostras PowerShell chamam, veja ChangeSubscriptionOwner.

Neste artigo:

Como usar os scripts

Permissions

Esta secção resume os níveis de permissões necessários para utilizar cada um dos métodos tanto para os Serviços de Relatórios em modo Nativo como para SharePoint. Os scripts neste artigo utilizam os seguintes métodos dos Serviços de Relatório:

Modo nativo:

  • Lista de Subscrições: ReportOperation enumeration no relatório e o utilizador é o proprietário da subscrição) ou ReadAnySubscription.

  • Alterar Subscrições: O utilizador deve ser membro do grupo BUILTIN\Administrators

  • Listar Filhos: Propriedades de Leitura no Item

  • Evento de Incêndio: GenerateEvents (Sistema)

Modo SharePoint:

  • Lista de Subscrições: Gerir Alertas OU Criar Alertas no relatório E o utilizador é o proprietário da subscrição e a subscrição é uma subscrição com tempo limitado).

  • Alterar Subscrições: ManageWeb

  • Filhos da Lista: ViewListItems

  • Evento de Incêndio: ManageWeb

Para mais informações, consulte Comparar funções e tarefas nos Serviços de Relatórios com grupos SharePoint e permissões.

Utilização do script

Criar ficheiros de script (.ps1)

  1. Cria uma pasta chamada c:\scripts. Se escolher uma pasta diferente, então modifique o nome da pasta usado nas instruções de sintaxe de linha de comandos de exemplo.

  2. Cria um ficheiro de texto para cada script e guarda os ficheiros na pasta c:\scripts. Ao criar os .ps1 ficheiros, use o nome de cada exemplo de sintaxe de linha de comandos.

  3. Abra um prompt de comando com privilégios administrativos.

  4. Execute cada ficheiro de script usando a sintaxe de linha de comandos de exemplo fornecida com cada exemplo.

Ambientes testados

Os scripts deste artigo foram testados no PowerShell versão 3 e com as seguintes versões dos Serviços de Relatório:

  • SQL Server 2014 (12.x)

  • SQL Server 2012 (11.x)

  • SQL Server 2008 R2 (10.50.x)

Guião: Liste a propriedade de todas as subscrições

Este script lista todas as subscrições num site. Pode usar este script para testar a sua ligação ou para verificar o caminho do relatório e o ID da subscrição para uso nos outros scripts. Este script também é útil para auditar que subscrições existem e quem as possui.

Sintaxe dos modos nativos:

powershell c:\scripts\ListAll_SSRS_Subscriptions.ps1 "[server]/reportserver" "/"  

Sintaxe do modo SharePoint:

powershell c:\scripts\ListAll_SSRS_Subscriptions.ps1 "[server]/_vti_bin/reportserver" "https://[server]"  

Guião:

# Parameters  
#    server   - server and instance name (e.g. myserver/reportserver or myserver/reportserver_db2)  
  
Param(  
    [string]$server,  
    [string]$site  
   )  
  
$rs2010 += New-WebServiceProxy -Uri "https://$server/ReportService2010.asmx" -Namespace SSRS.ReportingService2010 -UseDefaultCredential ;  
$subscriptions += $rs2010.ListSubscriptions($site); # use "/" for default native mode site  
  
Write-Host " "  
Write-Host "----- $server's Subscriptions: "  
$subscriptions | select Path, report, Description, Owner, SubscriptionID, lastexecuted, Status  

Sugestão

Para verificar URLs de sites em modo SharePoint, use o cmdlet SharePoint Get-SPSite. Para mais informações, consulte Get-SPSite.

Script: Liste todas as subscrições pertencentes a um utilizador específico

Este script lista todas as subscrições pertencentes a um utilizador específico. Pode usar este script para testar a sua ligação ou para verificar o caminho do relatório e o ID da subscrição para uso nos outros scripts. Este script é útil quando alguém na sua organização sai e quer verificar quais as subscrições que possuía. Com o script, podes mudar o proprietário ou eliminar a subscrição.

Sintaxe dos modos nativos:

powershell c:\scripts\ListAll_SSRS_Subscriptions4User.ps1 "[Domain]\[user]" "[server]/reportserver" "/"  

Sintaxe do modo SharePoint:

powershell c:\scripts\ListAll_SSRS_Subscriptions4User.ps1 "[Domain]\[user]"  "[server]/_vti_bin/reportserver" "https://[server]"  

Script:

# Parameters:  
#    currentOwner - DOMAIN\USER that owns the subscriptions you wish to change  
#    server        - server and instance name (e.g. myserver/reportserver or myserver/reportserver_db2)  
#    site        - use "/" for default native mode site  
Param(  
    [string]$currentOwner,  
    [string]$server,  
    [string]$site  
)  
  
$rs2010 = New-WebServiceProxy -Uri "https://$server/ReportService2010.asmx" -Namespace SSRS.ReportingService2010 -UseDefaultCredential ;  
$subscriptions += $rs2010.ListSubscriptions($site);  
  
Write-Host " "  
Write-Host " "  
Write-Host "----- $currentOwner's Subscriptions: "  
$subscriptions | select Path, report, Description, Owner, SubscriptionID, lastexecuted,Status | where {$_.owner -eq $currentOwner}  

Script: Alterar a propriedade de todas as subscrições pertencentes a um utilizador específico

Este script altera a propriedade de todas as subscrições pertencentes a um utilizador específico para o parâmetro do novo proprietário.

Sintaxe dos modos nativos:

powershell c:\scripts\ChangeALL_SSRS_SubscriptionOwner.ps1 "[Domain]\current owner]" "[Domain]\[new owner]" "[server]/reportserver"  

Sintaxe do modo SharePoint:

powershell c:\scripts\ChangeALL_SSRS_SubscriptionOwner.ps1 "[Domain]\{current owner]" "[Domain]\[new owner]" "[server]/_vti_bin/reportserver"  

Guião:

# Parameters:  
#    currentOwner - DOMAIN\USER that owns the subscriptions you wish to change  
#    newOwner      - DOMAIN\USER that will own the subscriptions you wish to change  
#    server        - server and instance name (e.g. myserver/reportserver, myserver/reportserver_db2, myserver/_vti_bin/reportserver)
  
Param(  
    [string]$currentOwner,  
    [string]$newOwner,  
    [string]$server  
)  
  
$rs2010 = New-WebServiceProxy -Uri "https://$server/ReportService2010.asmx" -Namespace SSRS.ReportingService2010 -UseDefaultCredential ;  
$items = $rs2010.ListChildren("/", $true);  
  
$subscriptions = @();  
  
ForEach ($item in $items)  
{  
    if ($item.TypeName -eq "Report")  
    {  
        $curRepSubs = $rs2010.ListSubscriptions($item.Path);  
        ForEach ($curRepSub in $curRepSubs)  
        {  
            if ($curRepSub.Owner -eq $currentOwner)  
            {  
                $subscriptions += $curRepSub;  
            }  
        }  
    }  
}  
  
Write-Host " "  
Write-Host " "  
Write-Host -foregroundcolor "green" "-----  $currentOwner's Subscriptions changing ownership to $newOwner : "  
$subscriptions | select SubscriptionID, Owner, Path, Description,  Status  | format-table -AutoSize  
  
ForEach ($sub in $subscriptions)  
{  
    $rs2010.ChangeSubscriptionOwner($sub.SubscriptionID, $newOwner);  
}  
  
$subs2 = @();  
  
ForEach ($item in $items)  
{  
    if ($item.TypeName -eq "Report")  
    {  
        $subs2 += $rs2010.ListSubscriptions($item.Path);  
    }  
}  

Script: Listar todas as subscrições associadas a um relatório específico

Este script lista todas as subscrições associadas a um relatório específico. A sintaxe do caminho do relatório é diferente no modo SharePoint, que requer um URL completo. Nos exemplos de sintaxe, o nome do relatório usado é "title only", que contém um espaço e, portanto, requer aspas simples à volta do nome do relatório.

Sintaxe dos modos nativos:

powershell c:\scripts\List_SSRS_One_Reports_Subscriptions.ps1 "[server]/reportserver" "'/reports/title only'" "/"  

Sintaxe do modo SharePoint:

powershell c:\scripts\List_SSRS_One_Reports_Subscriptions.ps1 "[server]/_vti_bin/reportserver"  "'https://[server]/shared documents/title only.rdl'" "https://[server]"  

Guião:

# Parameters:  
#    server      - server and instance name (e.g. myserver/reportserver or myserver/reportserver_db2)  
#    reportpath  - path to report in the report server, including report name e.g. /reports/test report >> pass in  "'/reports/title only'"  
#    site        - use "/" for default native mode site  
Param  
(  
      [string]$server,  
      [string]$reportpath,  
      [string]$site  
)  
  
$rs2010 = New-WebServiceProxy -Uri "https://$server/ReportService2010.asmx" -Namespace SSRS.ReportingService2010 -UseDefaultCredential ;  
$subscriptions += $rs2010.ListSubscriptions($site);  
  
Write-Host " "  
Write-Host " "  
Write-Host "----- $reportpath 's Subscriptions: "  
$subscriptions | select Path, report, Description, Owner, SubscriptionID, lastexecuted,Status | where {$_.path -eq $reportpath}  

Script: Alterar a propriedade de uma subscrição específica

Este script altera a propriedade de uma subscrição específica. Pode identificar a subscrição pelo SubscriptionID que passa no script. Pode usar um dos scripts de subscrição da lista para determinar o SubscriptionID correto.

Sintaxe dos modos nativos:

powershell c:\scripts\Change_SSRS_Owner_One_Subscription.ps1 "[Domain]\[new owner]" "[server]/reportserver" "/" "ac5637a1-9982-4d89-9d69-a72a9c3b3150"  

Sintaxe do modo SharePoint:

powershell c:\scripts\Change_SSRS_Owner_One_Subscription.ps1 "[Domain]\[new owner]" "[server]/_vti_bin/reportserver" "https://[server]" "9660674b-f020-453f-b1e3-d9ba37624519"  

Script:

# Parameters:  
#    newOwner       - DOMAIN\USER that will own the subscriptions you wish to change  
#    server         - server and instance name (e.g. myserver/reportserver or myserver/reportserver_db2)  
#    site        - use "/" for default native mode site  
#    subscriptionID - guid for the single subscription to change  
  
Param(  
    [string]$newOwner,  
    [string]$server,  
    [string]$site,  
    [string]$subscriptionid  
   )  
$rs2010 = New-WebServiceProxy -Uri "https://$server/ReportService2010.asmx" -Namespace SSRS.ReportingService2010 -UseDefaultCredential;  
  
$subscription += $rs2010.ListSubscriptions($site) | where {$_.SubscriptionID -eq $subscriptionid};  
  
Write-Host " "  
Write-Host "----- $subscriptionid's Subscription properties: "  
$subscription | select Path, report, Description, SubscriptionID, Owner, Status  
  
$rs2010.ChangeSubscriptionOwner($subscription.SubscriptionID, $newOwner)  
  
#refresh the list  
$subscription = $rs2010.ListSubscriptions($site) | where {$_.SubscriptionID -eq $subscriptionid}; # use "/" for default native mode site  
Write-Host "----- $subscriptionid's Subscription properties: "  
$subscription | select Path, report, Description, SubscriptionID, Owner, Status  

Script: Executar (ativar) uma única subscrição

Este script executa uma subscrição específica utilizando o método FireEvent. O script executa imediatamente a subscrição, independentemente do horário configurado para a subscrição. O EventType é comparado com o conjunto conhecido de eventos definidos no ficheiro de configuração do servidor de relatóriosrsreportserver.config. O script utiliza o seguinte tipo de evento para subscrições padrão:

<Event>

<Type>TimedSubscription</Type>

</Event>

Para mais informações sobre o ficheiro de configuração, consulte RsReportServer.config ficheiro de configuração.

O script inclui lógica de atraso "Start-Sleep -s 6" para garantir que, após o disparo do evento, haja tempo suficiente para que o estado atualizado esteja disponível através do método ListSubscription.

Sintaxe dos modos nativos:

powershell c:\scripts\FireSubscription.ps1 "[server]/reportserver" $null "70366e82-2d3c-4edd-a216-b97e51e26de9"  

Sintaxe do modo SharePoint:

powershell c:\scripts\FireSubscription.ps1 "[server]/_vti_bin/reportserver" "https://[server]" "c3425c72-580d-423e-805a-41cf9799fd25"  

Guião:

  
# Parameters  
#    server         - server and instance name (e.g. myserver/reportserver or myserver/reportserver_db2)  
#    site           - use $null for a native mode server  
#    subscriptionid - subscription guid  
  
Param(  
  [string]$server,  
  [string]$site,  
  [string]$subscriptionid  
  )  
  
$rs2010 = New-WebServiceProxy -Uri "https://$server/ReportService2010.asmx" -Namespace SSRS.ReportingService2010 -UseDefaultCredential ;  
#event type is case sensitive to what is in the rsreportserver.config  
$rs2010.FireEvent("TimedSubscription",$subscriptionid,$site)  
  
Write-Host " "  
Write-Host "----- Subscription ($subscriptionid) status: "  
#get list of subscriptions and filter to the specific ID to see the Status and LastExecuted  
Start-Sleep -s 6 # slight delay in processing so ListSubscription returns the updated Status and LastExecuted  
$subscriptions = $rs2010.ListSubscriptions($site);   
$subscriptions | select Status, Path, report, Description, Owner, SubscriptionID, EventType, lastexecuted | where {$_.SubscriptionID -eq $subscriptionid}