Partilhar via


Usar o PowerShell para alterar e listar proprietários de assinatura do Reporting Services e executar uma assinatura

A partir do SQL Server 2008 R2Reporting Services, você pode transferir programaticamente a propriedade de uma assinatura do Reporting Services de um usuário para outro. Este tópico fornece vários scripts do Windows PowerShell que você pode usar para alterar ou simplesmente listar a propriedade da assinatura. Cada amostra inclui a sintaxe de amostra do modo Nativo e do modo SharePoint. Depois de alterar o proprietário da assinatura, a assinatura será então executada no contexto de segurança do novo proprietário, e o campo User!UserID no relatório exibirá o valor do novo proprietário. Para obter mais informações sobre o modelo de objeto que os exemplos do PowerShell chamam, consulte ChangeSubscriptionOwner

Conteúdo relacionado ao PowerShell

Aplica-se a: Modo Nativo do Reporting Services | Modo do SharePoint do Reporting Services

Neste tópico:

Como usar os scripts

Permissões

Esta seção resume os níveis de permissão necessários para usar cada um dos métodos para o Reporting Services em modo Nativo e SharePoint. Os scripts neste tópico usam os seguintes métodos do Reporting Services:

Modo Nativo:

  • Listar assinaturas: ( HYPERLINK "https://technet.microsoft.com/library/microsoft.reportingservices.interfaces.reportoperation.aspx" ReadSubscription no relatório E o usuário é o proprietário da assinatura) OU ReadAnySubscription

  • Alterar assinaturas: O usuário deve ser membro do grupo BUILTIN\Administrators

  • Listar filhos: ReadProperties no item

  • Acionar evento: GenerateEvents (sistema)

Modo SharePoint:

  • Listar Assinaturas: Gerenciar Alertas OU ( HYPERLINK "https://technet.microsoft.com/library/microsoft.sharepoint.spbasepermissions.aspx" Criar Alertas no relatório E o usuário é o proprietário da assinatura e a assinatura está programada).

  • Alterar assinaturas: ManageWeb

  • Listar filhos: ViewListItems

  • Acionar evento: ManageWeb

Para obter mais informações, consulte Comparar funções e tarefas no Reporting Services com grupos e permissões do SharePoint.

Utilização de scripts

Criar arquivos de script (.ps1)

  1. Crie uma pasta chamada c:\scripts. Se você escolher uma pasta diferente, modifique o nome da pasta usado nas instruções de sintaxe de linha de comando de exemplo.

  2. Crie um arquivo de texto para cada script e salve os arquivos na pasta c:\scripts. Ao criar os arquivos .ps1, use o nome de cada sintaxe de linha de comando de exemplo.

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

  4. Execute cada arquivo de script usando a sintaxe de linha de comando de exemplo fornecida com cada exemplo.

Ambientes testados

Os scripts neste tópico foram testados no PowerShell versão 3 e com as seguintes versões do Reporting Services:

  • SQL Server 2014

  • SQL Server 2012

  • SQL Server 2008 R2

Script: listar a propriedade de todas as assinaturas

Esse script lista todas as assinaturas em um site. Você pode usar esse script para testar sua conexão ou verificar o caminho do relatório e a ID da assinatura para uso nos outros scripts. Esse também é um script útil para simplesmente auditar quais assinaturas existem e quem as possui.

Sintaxe de modo nativo

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

Sintaxe do modo SharePoint

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

Roteiro

# Parameters
#    server   - server and instance name (e.g. myserver/reportserver or myserver/reportserver_db2)

Param(
    [string]$server,
    [string]$site
   )

$rs2010 += New-WebServiceProxy -Uri "http://$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

Dica

Para verificar URLs de sites no modo do SharePoint, use o cmdlet Get-SPSitedo SharePoint. Para saber mais, veja Get-SPSite.

Script: listar todas as assinaturas de propriedade de um usuário específico

Esse script lista todas as assinaturas de propriedade de um usuário específico. Você pode usar esse script para testar sua conexão ou verificar o caminho do relatório e a ID da assinatura para uso nos outros scripts. Esse script é útil quando alguém em sua organização sai e você deseja verificar quais assinaturas elas possuíam para que você possa alterar o proprietário ou excluir a assinatura.

Sintaxe de modo nativo

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

Sintaxe de modo do SharePoint

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

Roteiro

# 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 "http://$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 assinaturas de propriedade de um usuário específico

Esse script muda a propriedade de todas as assinaturas de um usuário específico para o parâmetro do novo proprietário.

Sintaxe de modo nativo

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

Sintaxe de modo do SharePoint

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

Roteiro

# 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 "http://$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 assinaturas associadas a um relatório específico

Esse script lista todas as assinaturas associadas a um relatório específico. A sintaxe do caminho do relatório é um modo diferente do SharePoint que requer uma URL completa. Nos exemplos de sintaxe, o nome do relatório usado é "apenas título", que contém um espaço e, portanto, requer as aspas simples em torno do nome do relatório.

Sintaxe de modo nativo

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

Sintaxe de modo do SharePoint

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

Roteiro

# 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 "http://$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 assinatura específica

Esse script altera a propriedade de uma assinatura específica. A assinatura é identificada pela SubscriptionID que você passa para o script. Você pode usar um dos scripts de assinatura da lista para determinar a SubscriptionID correta.

Sintaxe de modo nativo

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" "http://[server]" "9660674b-f020-453f-b1e3-d9ba37624519"

Roteiro

# 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 "http://$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 (acionar) uma única assinatura

Esse script executará uma assinatura específica usando o método FireEvent. O script executará imediatamente a assinatura, independentemente do agendamento configurado para a assinatura. O EventType é correspondido com o conjunto conhecido de eventos que são definidos no arquivo de configuração do servidor de relatório rsreportserver.config O script usa o seguinte tipo de evento para assinaturas padrão:

<Event>

<Type>TimedSubscription</Type>

</Event>

Para obter mais informações sobre o arquivo de configuração, consulte RSReportServer Configuration File.

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

Sintaxe de modo nativo

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

Sintaxe de modo do SharePoint

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

Roteiro

# 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 "http://$server/ReportService2010.asmx" -Namespace SSRS.ReportingService2010 -UseDefaultCredential ;
#event type is case sensative 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}

Consulte Também

ListSubscriptions ChangeSubscriptionOwner ListChildren FireEvent