Mengelola Pemilik Langganan dan Menjalankan Langganan - PowerShell

Berlaku untuk: SQL Server 2016 Reporting Services dan yang lebih baru Sharepoint

Dimulai dengan SQL Server 2008 R2 (10.50.x) Reporting Services, Anda dapat secara terprogram mentransfer kepemilikan langganan Reporting Services dari satu pengguna ke pengguna lain. Topik ini menyediakan beberapa skrip Windows PowerShell yang dapat 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 akan menampilkan nilai pemilik baru. Untuk informasi selengkapnya tentang model objek panggilan sampel PowerShell, lihat ChangeSubscriptionOwner

Konten terkait PowerShell

Dalam topik ini:

Cara menggunakan skrip

Izin

Bagian ini merangkum tingkat izin yang diperlukan untuk menggunakan masing-masing metode untuk Reporting Services mode Native dan SharePoint. Skrip dalam topik 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: KelolaWeb

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 file .ps1, gunakan nama dari setiap contoh sintaks baris perintah.

  3. Buka prompt perintah dengan hak istimewa admin.

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

Lingkungan yang diuji

Skrip dalam topik 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 memverifikasi jalur laporan dan ID langganan untuk digunakan dalam skrip lain. Ini juga merupakan skrip yang berguna untuk hanya 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 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, sehingga 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. Langganan diidentifikasi oleh SubscriptionID yang Anda berikan ke skrip. Anda bisa 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: Jalankan (aktifkan) satu langganan

Skrip ini akan menjalankan langganan tertentu menggunakan metode FireEvent. Skrip akan 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 KonfigurasiRsReportServer.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}  
  

Lihat juga