Mengelola pemilik langganan dan menjalankan langganan - PowerShell

Berlaku untuk: SQL Server 2016 (13.x) Reporting Services dan SharePoint yang lebih baru

Dimulai dengan SQL Server 2008 R2 (10.50.x) Reporting Services, Anda dapat mentransfer kepemilikan langganan Reporting Services secara terprogram dari satu pengguna ke pengguna lain. Artikel ini menyediakan beberapa skrip Windows PowerShell yang bisa Anda gunakan untuk mengubah atau hanya mencantumkan kepemilikan langganan. Setiap sampel menyertakan sintaks sampel untuk mode Asli dan mode SharePoint. Setelah Anda mengubah pemilik langganan, langganan kemudian akan dijalankan dalam konteks keamanan pemilik baru, dan Pengguna! Bidang UserID dalam laporan menampilkan nilai pemilik baru. Untuk informasi selengkapnya tentang model objek panggilan sampel PowerShell, lihat ChangeSubscriptionOwner.

Dalam artikel ini:

Cara menggunakan skrip

Izin

Bagian ini meringkas tingkat izin yang diperlukan untuk menggunakan masing-masing metode untuk Layanan Pelaporan mode Native dan SharePoint. Skrip dalam artikel ini menggunakan metode Reporting Services berikut:

Mode asli:

  • Langganan Daftar: Enumerasi ReportOperation pada laporan DAN pengguna adalah pemilik langganan) ATAU ReadAnySubscription.

  • Ubah Langganan: Pengguna harus menjadi anggota grup BUILTIN\Administrators

  • Mencantumkan Turunan: ReadProperties pada Item

  • Peristiwa Kebakaran: GenerateEvents (Sistem)

Mode SharePoint:

  • Langganan Daftar: ManageAlerts ATAU CreateAlerts pada laporan DAN pengguna adalah pemilik langganan dan langganan adalah langganan berwaktur).

  • Ubah Langganan: KelolaWeb

  • Daftar Turunan: ViewListItems

  • Peristiwa Kebakaran: KelolaSitus Web

Untuk informasi selengkapnya, lihat Membandingkan peran dan tugas di Reporting Services dengan grup dan izin SharePoint.

Penggunaan skrip

Membuat file Skrip (.ps1)

  1. Buat folder bernama c:\scripts. Jika Anda memilih folder lain, ubah nama folder yang digunakan dalam contoh pernyataan sintaks baris perintah.

  2. Buat file teks untuk setiap skrip dan simpan file ke folder c:\scripts. Saat Anda membuat .ps1 file, gunakan nama dari setiap contoh sintaks baris perintah.

  3. Buka prompt perintah dengan hak administratif.

  4. Jalankan setiap file skrip dengan menggunakan contoh sintaks baris perintah yang disediakan dengan setiap contoh.

Lingkungan yang diuji

Skrip dalam artikel ini diuji di PowerShell versi 3 dan dengan versi Reporting Services berikut:

  • SQL Server 2014 (12.x)

  • SQL Server 2012 (11.x)

  • SQL Server 2008 R2 (10.50.x)

Skrip: Mencantumkan kepemilikan semua langganan

Skrip ini mencantumkan semua langganan di situs. Anda dapat menggunakan skrip ini untuk menguji koneksi Anda atau untuk memverifikasi jalur laporan dan ID langganan untuk digunakan dalam skrip lain. Skrip ini juga berguna untuk mengaudit langganan apa yang ada dan siapa yang memilikinya.

Sintaks mode asli:

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

Sintaks mode SharePoint:

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

Skrip:

# 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  

Tip

Untuk memverifikasi URL situs dalam mode SharePoint, gunakan cmdlet SharePoint Get-SPSite. Untuk informasi selengkapnya, lihat Get-SPSite.

Skrip: Mencantumkan semua langganan yang dimiliki oleh pengguna tertentu

Skrip ini mencantumkan semua langganan yang dimiliki oleh pengguna tertentu. Anda dapat menggunakan skrip ini untuk menguji koneksi Anda atau untuk memverifikasi jalur laporan dan ID langganan untuk digunakan dalam skrip lain. Skrip ini berguna saat seseorang di organisasi Anda keluar dan Anda ingin memverifikasi langganan apa yang mereka miliki. Dengan skrip, Anda dapat mengubah pemilik atau menghapus langganan.

Sintaks mode asli:

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

Sintaks mode SharePoint:

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

Skrip:

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

Skrip: Mengubah kepemilikan untuk semua langganan yang dimiliki oleh pengguna tertentu

Skrip ini mengubah kepemilikan untuk semua langganan yang dimiliki oleh pengguna tertentu ke parameter pemilik baru.

Sintaks mode asli:

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

Sintaks mode SharePoint:

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

Skrip:

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

Skrip: Mencantumkan semua langganan yang terkait dengan laporan tertentu

Skrip ini mencantumkan semua langganan yang terkait dengan laporan tertentu. Sintaks jalur laporan adalah mode SharePoint yang berbeda, yang memerlukan URL lengkap. Dalam contoh sintaks, nama laporan yang digunakan adalah "judul saja," yang berisi spasi dan oleh karena itu memerlukan tanda kutip tunggal di sekitar nama laporan.

Sintaks mode asli:

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

Sintaks mode SharePoint:

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

Skrip:

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

Skrip: Mengubah kepemilikan langganan tertentu

Skrip ini mengubah kepemilikan untuk langganan tertentu. Anda dapat mengidentifikasi langganan dengan SubscriptionID yang Anda berikan ke skrip. Anda dapat menggunakan salah satu skrip langganan daftar untuk menentukan SubscriptionID yang benar.

Sintaks mode asli:

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

Sintaks mode SharePoint:

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

Skrip:

# 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  

Skrip: Menjalankan (menembakkan) satu langganan

Skrip ini menjalankan langganan tertentu dengan menggunakan metode FireEvent. Skrip segera menjalankan langganan terlepas dari jadwal yang dikonfigurasi untuk langganan. EventType dicocokkan dengan kumpulan peristiwa yang diketahui yang ditentukan dalam file konfigurasi server laporan rsreportserver.config. Skrip menggunakan jenis peristiwa berikut untuk langganan standar:

<Event>

<Type>TimedSubscription</Type>

</Event>

Untuk informasi selengkapnya tentang file konfigurasi, lihat file konfigurasi RsReportServer.config.

Skrip mencakup logika penundaan "Start-Sleep -s 6" sehingga ada waktu setelah peristiwa diaktifkan, agar status yang diperbarui tersedia dengan metode ListSubscription.

Sintaks mode asli:

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

Sintaks mode SharePoint:

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

Skrip:

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

Metode ReportingService2010.ListSubscriptions
Metode ReportingService2010.ChangeSubscriptionOwner
ReportingService2010.ListChildren
ReportingService2010.FireEvent