Compartir a través de


Uso de PowerShell para cambiar y enumerar propietarios de suscripciones de Reporting Services y ejecutar una suscripción

A partir de SQL Server 2008 R2Reporting Services, puede transferir mediante programación la propiedad de una suscripción de Reporting Services de un usuario a otro. En este tema se proporcionan varios scripts de Windows PowerShell que puede usar para cambiar o simplemente enumerar la propiedad de la suscripción. Cada ejemplo incluye sintaxis de ejemplo para el modo nativo y para el modo SharePoint. Después de cambiar el propietario de la suscripción, la suscripción se ejecutará en el contexto de seguridad del nuevo propietario y el campo Usuario!UserID del informe mostrará el valor del nuevo propietario. Para obtener más información sobre el modelo de objetos que utilizan los ejemplos de PowerShell, consulte ChangeSubscriptionOwner.

Contenido relacionado con PowerShell

Se aplica a: Modo nativo de Reporting Services | Modo de SharePoint de Reporting Services

En este tema:

Cómo usar los scripts

Permisos

En esta sección, se resumen los niveles de permiso requeridos para utilizar los métodos para el modo nativo y para el modo SharePoint de Reporting Services. Los scripts de este tema usan los siguientes métodos de Reporting Services:

Modo nativo:

  • Enumerar suscripciones: ( HYPERLINK "https://technet.microsoft.com/library/microsoft.reportingservices.interfaces.reportoperation.aspx" ReadSubscription en el informe Y el usuario es el propietario de la suscripción) O ReadAnySubscription

  • Cambiar suscripciones: El usuario debe ser miembro del grupo BUILTIN\Administrators

  • Presentar elementos secundarios: ReadProperties en el elemento

  • Desencadenar evento: GenerateEvents (sistema)

Modo SharePoint:

  • Listar suscripciones: GestionarAlertas O ( HIPERVÍNCULO "https://technet.microsoft.com/library/microsoft.sharepoint.spbasepermissions.aspx" CrearAlertas en el informe Y el usuario es el propietario de la suscripción y la suscripción es una suscripción programada).

  • Cambiar suscripciones: ManageWeb

  • Presentar elementos secundarios: ViewListItems

  • Desencadenar evento: ManageWeb

Para obtener más información, vea Comparar roles y tareas en Reporting Services con grupos y permisos de SharePoint.

Uso de scripts

Crear archivos de script (.ps1)

  1. Crear una carpeta con el nombre c:\scripts. Si elige una carpeta diferente, modifique el nombre de carpeta usado en las instrucciones de sintaxis de la línea de comandos de ejemplo.

  2. Cree un archivo de texto para cada script y guarde los archivos en la carpeta c:\scripts. Al crear los archivos .ps1, use el nombre especificado en cada línea de comandos de ejemplo.

  3. Abra un símbolo del sistema con privilegio de administración.

  4. Ejecute cada archivo de script mediante la sintaxis de línea de comandos de ejemplo proporcionada con cada ejemplo.

Entornos probados

Los scripts de este tema se probaron en PowerShell versión 3 y con las siguientes versiones de Reporting Services:

  • SQL Server 2014

  • SQL Server 2012

  • SQL Server 2008 R2

Script: mostrar la propiedad de todas las suscripciones

Este script presenta todas las suscripciones de un sitio. Puede usar este script para probar la conexión o para comprobar la ruta de acceso del informe y el identificador de suscripción para su uso en los demás scripts. También es un script útil para auditar simplemente qué suscripciones existen y quién las posee.

Sintaxis del modo nativo

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

Sintaxis del modo de SharePoint

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

Guión

# 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

Sugerencia

Para comprobar las direcciones URL de los sitios en modo de SharePoint, use el cmdlet de SharePoint Get-SPSite. Para más información, consulte el Get-SPSite.

Script: mostrar todas las suscripciones propiedad de un usuario específico

Este script presenta todas las suscripciones poseídas por un usuario específico. Puede usar este script para probar la conexión o para comprobar la ruta de acceso del informe y el identificador de suscripción para su uso en los demás scripts. Este script es útil cuando alguien de su organización sale y desea comprobar qué suscripciones poseen para que pueda cambiar el propietario o eliminar la suscripción.

Sintaxis del modo nativo

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

Sintaxis del modo de SharePoint

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

Guión

# 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: cambiar la propiedad de todas las suscripciones propiedad de un usuario específico

Este script cambia la propiedad de todas las suscripciones poseídas por un usuario específico al nuevo parámetro de propietario.

Sintaxis del modo nativo

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

Sintaxis del modo de SharePoint

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

Guión

# 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: mostrar todas las suscripciones asociadas a un informe específico

Este script presenta todas las suscripciones asociadas a un informe específico. La sintaxis de la ruta de acceso del informe es diferente en el modo SharePoint, el cual requiere una URL completa. En los ejemplos de sintaxis, el nombre del informe usado es "title only", que contiene un espacio y, por tanto, requiere las comillas simples alrededor del nombre del informe.

Sintaxis del modo nativo

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

Sintaxis del modo de SharePoint

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

Guión

# 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: cambiar la propiedad de una suscripción específica

Este script cambia la propiedad de una suscripción específica. La suscripción se identifica mediante el SubscriptionID que se pasa al script. Puede utilizar uno de los scripts para presentar suscripciones para determinar el SubscriptionID correcto.

Sintaxis del modo nativo

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

Sintaxis del modo de SharePoint

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

Guión

# 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: ejecutar (desencadenar) una sola suscripción

Este script ejecutará una suscripción específica mediante el método FireEvent. El script ejecutará inmediatamente la suscripción independientemente de la programación configurada para la suscripción. EventType coincide con el conjunto conocido de eventos definidos en el archivo de configuración del servidor de informes rsreportserver.config El script usa el siguiente tipo de evento para las suscripciones estándar:

<Event>

<Type>TimedSubscription</Type>

</Event>

Para obtener más información sobre el archivo de configuración, vea Archivo de configuración de RSReportServer.

El script incluye la lógica de retraso "Start-Sleep -s 6" para que haya tiempo después de que se active el evento, para que el estado actualizado esté disponible con el método ListSubscription.

Sintaxis del modo nativo

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

Sintaxis del modo de SharePoint

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

Guión

# 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}

Véase también

ListSubscriptions ChangeSubscriptionOwner ListChildren FireEvent