Udostępnij przez


Zarządzanie właścicielami subskrypcji i uruchamianie subskrypcji — PowerShell

Dotyczy: SQL Server 2016 (13.x) Reporting Services i nowsze wersje programu SharePoint

Począwszy od programu SQL Server 2008 R2 (10.50.x) Reporting Services, można programowo przenieść własność subskrypcji usług Reporting Services od jednego użytkownika do innego. Ten artykuł zawiera kilka skryptów programu Windows PowerShell, których można użyć do zmiany lub po prostu wyświetlenia listy własności subskrypcji. Każdy przykład zawiera przykładową składnię dla trybu natywnego i trybu programu SharePoint. Po zmianie właściciela subskrypcji subskrypcja zostanie wykonana w kontekście zabezpieczeń nowego właściciela, a pole User!UserID w raporcie wyświetli wartość nowego właściciela. Aby uzyskać więcej informacji na temat modelu obiektów, który wywołują przykłady programu PowerShell, zobacz ChangeSubscriptionOwner.

W tym artykule:

Jak używać skryptów

Permissions

W tej sekcji podsumowano poziomy uprawnień wymagane do korzystania z każdej z metod w usługach Reporting Services w trybie natywnym i w trybie SharePoint. Skrypty w tym artykule korzystają z następujących metod usług Reporting Services:

Tryb macierzysty:

  • Lista subskrypcji: wyliczenie ReportOperation w raporcie, a użytkownik jest właścicielem subskrypcji) LUB ReadAnySubscription.

  • Zmienianie subskrypcji: użytkownik musi być członkiem grupy BUILTIN\Administrators

  • Podrzędne elementy listy: ReadProperties na elemencie

  • Zdarzenie pożaru: GenerateEvents (System)

Tryb SharePoint:

  • Wyświetlanie listy subskrypcji: ZarządzajAlerts LUB CreateAlerts w raporcie, a użytkownik jest właścicielem subskrypcji, a subskrypcja jest subskrypcją czasową).

  • Zmienianie subskrypcji: ManageWeb

  • Elementy podrzędne listy: ViewListItems

  • Zdarzenie pożaru: ManageWeb

Aby uzyskać więcej informacji, zobacz Porównanie ról i zadań w usługach Reporting Services z grupami i uprawnieniami programu SharePoint.

Użycie skryptu

Tworzenie plików skryptów (.ps1)

  1. Utwórz folder o nazwie c:\scripts. Jeśli wybierzesz inny folder, zmodyfikuj nazwę folderu używaną w przykładowych instrukcjach składni wiersza polecenia.

  2. Utwórz plik tekstowy dla każdego skryptu i zapisz pliki w folderze c:\scripts. Podczas tworzenia .ps1 plików użyj nazwy z każdej przykładowej składni wiersza polecenia.

  3. Otwórz wiersz polecenia z uprawnieniami administracyjnymi.

  4. Uruchom każdy plik skryptu przy użyciu przykładowej składni wiersza polecenia dostarczonej z każdym przykładem.

Przetestowane środowiska

Skrypty w tym artykule zostały przetestowane w programie PowerShell w wersji 3 i z następującymi wersjami usług Reporting Services:

  • SQL Server 2014 (12.x)

  • SQL Server 2012 (11.x)

  • SQL Server 2008 R2 (10.50.x)

Skrypt: Wyświetlanie listy własności wszystkich subskrypcji

Ten skrypt zawiera listę wszystkich subskrypcji w witrynie. Ten skrypt umożliwia przetestowanie połączenia lub zweryfikowanie ścieżki raportu i identyfikatora subskrypcji do użycia w innych skryptach. Ten skrypt jest również przydatny do inspekcji, jakie subskrypcje istnieją i kto jest ich właścicielem.

Składnia trybu natywnego:

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

Składnia trybu programu SharePoint:

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

Skrypt:

# 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  

Wskazówka

Aby zweryfikować adresy URL witryny w trybie programu SharePoint, użyj polecenia cmdlet Get-SPSite programu SharePoint. Aby uzyskać więcej informacji, zobacz Get-SPSite.

Skrypt: Wyświetlanie listy wszystkich subskrypcji należących do określonego użytkownika

Ten skrypt zawiera listę wszystkich subskrypcji należących do określonego użytkownika. Ten skrypt umożliwia przetestowanie połączenia lub zweryfikowanie ścieżki raportu i identyfikatora subskrypcji do użycia w innych skryptach. Ten skrypt przydaje się, gdy ktoś w twojej organizacji odejdzie i chcesz zweryfikować, jakie subskrypcje należą do nich. Za pomocą skryptu możesz zmienić właściciela lub usunąć subskrypcję.

Składnia trybu natywnego:

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

Składnia trybu programu SharePoint:

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

Skrypt:

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

Skrypt: zmiana własności wszystkich subskrypcji należących do określonego użytkownika

Ten skrypt zmienia własność wszystkich subskrypcji należących do określonego użytkownika do nowego parametru właściciela.

Składnia trybu natywnego:

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

Składnia trybu programu SharePoint:

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

Skrypt:

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

Skrypt: Wyświetlanie listy wszystkich subskrypcji skojarzonych z określonym raportem

Ten skrypt zawiera listę wszystkich subskrypcji skojarzonych z określonym raportem. Składnia ścieżki raportu w trybie SharePoint różni się i wymaga pełnego adresu URL. W przykładach składni używana nazwa raportu to "title only", która zawiera spację i dlatego wymaga użycia pojedynczych apostrofów wokół tej nazwy.

Składnia trybu natywnego:

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

Składnia trybu programu SharePoint:

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

Skrypt:

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

Skrypt: Zmiana własności określonej subskrypcji

Ten skrypt zmienia własność określonej subskrypcji. Subskrypcję można zidentyfikować za pomocą identyfikatora subskrypcji przekazanego do skryptu. Aby określić prawidłowy identyfikator subskrypcji, możesz użyć jednego ze skryptów subskrypcji listy.

Składnia trybu natywnego:

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

Składnia trybu programu SharePoint:

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

Skrypt:

# 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  

Skrypt: uruchamianie (uruchamianie) pojedynczej subskrypcji

Ten skrypt uruchamia określoną subskrypcję przy użyciu metody FireEvent. Skrypt natychmiast uruchamia subskrypcję niezależnie od harmonogramu skonfigurowanego dla subskrypcji. Typ zdarzenia jest zgodny ze znanym zestawem zdarzeń zdefiniowanych w pliku konfiguracji serwera raportów rsreportserver.config. Skrypt używa następującego typu zdarzenia dla subskrypcji standardowych:

<Event>

<Type>TimedSubscription</Type>

</Event>

Aby uzyskać więcej informacji na temat pliku konfiguracji, zobacz RsReportServer.config plik konfiguracji.

Skrypt zawiera logikę opóźnienia "Start-Sleep -s 6", więc jest czas po wyzwoleniu zdarzenia, aby zaktualizowany stan był dostępny za pomocą metody ListSubscription.

Składnia trybu natywnego:

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

Składnia trybu programu SharePoint:

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

Skrypt:

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