Delen via


Abonnementseigenaren beheren en abonnement uitvoeren - PowerShell

Van toepassing op: SQL Server 2016 (13.x) Reporting Services en latere versies van SharePoint

Vanaf SQL Server 2008 R2 (10.50.x) Reporting Services kunt u programmatisch het eigendom van een Reporting Services-abonnement van de ene gebruiker naar de andere overdragen. Dit artikel bevat verschillende Windows PowerShell-scripts die u kunt gebruiken om het eigendom van een abonnement te wijzigen of gewoon weer te geven. Elk voorbeeld bevat voorbeeldsyntaxis voor zowel de systeemeigen modus als de SharePoint-modus. Nadat u de eigenaar van het abonnement hebt gewijzigd, wordt het abonnement uitgevoerd in de beveiligingscontext van de nieuwe eigenaar, en in het User!UserID-veld in het rapport wordt de waarde van de nieuwe eigenaar weergegeven. Zie voor meer informatie over het objectmodel de aanroep ChangeSubscriptionOwnerPowerShell-voorbeelden.

In dit artikel:

De scripts gebruiken

Permissions

In deze sectie vindt u een overzicht van de machtigingsniveaus die vereist zijn voor het gebruik van elk van de methoden voor Reporting Services in systeemeigen en SharePoint-modus. De scripts in dit artikel gebruiken de volgende Reporting Services-methoden:

Systeemeigen modus:

  • Lijst met abonnementen: Opsomming ReportOperation in het rapport EN de gebruiker is de eigenaar van het abonnement) OF ReadAnySubscription.

  • Abonnementen wijzigen: de gebruiker moet lid zijn van de groep BUILTIN\Administrators

  • Lijst met onderliggende items: ReadProperties op item

  • Brandmelding: GenerereEvents (Systeem)

SharePoint-modus:

  • Abonnementen vermelden: ManageAlerts OR CreateAlerts in het rapport EN de gebruiker is de eigenaar van het abonnement en het abonnement is een getimed abonnement).

  • Abonnementen wijzigen: ManageWeb

  • Lijstkinderen: BekijkLijstItems

  • Fire Event: ManageWeb

Zie Rollen en taken in Reporting Services vergelijken met SharePoint-groepen en -machtigingen voor meer informatie.

Scriptgebruik

Scriptbestanden maken (.ps1)

  1. Maak een map met de naam c:\scripts. Als u een andere map kiest, wijzigt u de mapnaam die wordt gebruikt in de opdrachtregelsyntaxis van het voorbeeld.

  2. Maak een tekstbestand voor elk script en sla de bestanden op in de map c:\scripts. Wanneer u de .ps1 bestanden maakt, gebruikt u de naam uit elke voorbeeldsyntaxis van de opdrachtregel.

  3. Open een opdrachtprompt met beheerdersbevoegdheden.

  4. Voer elk scriptbestand uit met behulp van de voorbeeldsyntaxis van de opdrachtregel die bij elk voorbeeld wordt geleverd.

Geteste omgevingen

De scripts in dit artikel zijn getest op PowerShell versie 3 en met de volgende versies van Reporting Services:

  • SQL Server 2014 (12.x)

  • SQL Server 2012 (11.x)

  • SQL Server 2008 R2 (10.50.x)

Script: Het eigendom van alle abonnementen weergeven

Dit script bevat alle abonnementen op een site. U kunt dit script gebruiken om uw verbinding te testen of om het rapportpad en de abonnements-id te controleren voor gebruik in de andere scripts. Dit script is ook handig om te controleren welke abonnementen er bestaan en wie eigenaar is van deze abonnementen.

Syntaxis van systeemeigen modus:

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

Syntaxis van sharePoint-modus:

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

Script:

# 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  

Aanbeveling

Als u site-URL's in de SharePoint-modus wilt controleren, gebruikt u de SharePoint-cmdlet Get-SPSite. Zie Get-SPSite voor meer informatie.

Script: Alle abonnementen weergeven die eigendom zijn van een specifieke gebruiker

Dit script bevat alle abonnementen die eigendom zijn van een specifieke gebruiker. U kunt dit script gebruiken om uw verbinding te testen of om het rapportpad en de abonnements-id te controleren voor gebruik in de andere scripts. Dit script is handig wanneer iemand in uw organisatie vertrekt en u wilt controleren welke abonnementen zij bezaten. Met het script kunt u de eigenaar wijzigen of het abonnement verwijderen.

Syntaxis van systeemeigen modus:

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

Syntaxis van sharePoint-modus:

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: Eigendom wijzigen voor alle abonnementen die eigendom zijn van een specifieke gebruiker

Dit script wijzigt het eigendom voor alle abonnementen die eigendom zijn van een specifieke gebruiker in de nieuwe eigenaarparameter.

Syntaxis van systeemeigen modus:

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

Syntaxis van sharePoint-modus:

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

Script:

# 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: alle abonnementen weergeven die zijn gekoppeld aan een specifiek rapport

Dit script bevat alle abonnementen die zijn gekoppeld aan een specifiek rapport. De syntaxis van het rapportpad verschilt in de SharePoint-modus, die een volledige URL vereist. In de syntaxisvoorbeelden is de gebruikte rapportnaam 'alleen titel', die een spatie bevat en daarom de enkele aanhalingstekens rond de rapportnaam vereist.

Syntaxis van systeemeigen modus:

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

Syntaxis van sharePoint-modus:

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

Script:

# 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: Eigendom van een specifiek abonnement wijzigen

Met dit script wordt het eigendom voor een specifiek abonnement gewijzigd. U kunt het abonnement identificeren door de SubscriptionID die u doorgeeft aan het script. U kunt een van de lijstabonnementsscripts gebruiken om de juiste SubscriptionID te bepalen.

Syntaxis van systeemeigen modus:

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

Syntaxis van sharePoint-modus:

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: Één abonnement uitvoeren (fire)

Met dit script wordt een specifiek abonnement uitgevoerd met behulp van de FireEvent-methode. Met het script wordt het abonnement onmiddellijk uitgevoerd, ongeacht de planning die voor het abonnement is geconfigureerd. Het EventType wordt vergeleken met de bekende set gebeurtenissen die zijn gedefinieerd in het configuratiebestand van de rapportserver rsreportserver.config. Het script gebruikt het volgende gebeurtenistype voor standaardabonnementen:

<Event>

<Type>TimedSubscription</Type>

</Event>

Zie RsReportServer.config configuratiebestand voor meer informatie over het configuratiebestand.

Het script bevat vertragingslogica 'Start-Sleep -s 6' zodat er tijd is nadat de gebeurtenis is geactiveerd, zodat de bijgewerkte status beschikbaar is met de methode ListSubscription.

Syntaxis van systeemeigen modus:

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

Syntaxis van sharePoint-modus:

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

Script:

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