เพิ่ม-ลบ-รับตัวรับเหตุการณ์ใน SharePoint ด้วย PowerShell
โดยปกติแล้วเราจะใช้แอปพลิเคชันคอนโซล C# หรือรหัสเปิดใช้งานคุณลักษณะเพื่อลงทะเบียนตัวรับเหตุการณ์กับรายการเป้าหมายหรือไลบรารีใน SharePoint ในบางครั้ง เราอาจต้องจัดการกับการเชื่อมโยงตัวรับเหตุการณ์อย่างชัดเจน แน่นอนว่ายังมีเครื่องมือที่ยอดเยี่ยม (เช่น SharePoint Event Receiver Manager) ในการจัดการตัวรับเหตุการณ์ อย่างไรก็ตาม ในสภาพแวดล้อมการใช้งานจริงซึ่งไม่อนุญาตให้ฉันใช้เครื่องมือดังกล่าวด้วยเหตุผลด้านความปลอดภัย ฉันเหลือตัวเลือก: PowerShell ดังนั้น ฉันจึงแชร์ข้อมูลโค้ด PowerShell ของฉันเพื่อจัดการตัวรับเหตุการณ์ใน SharePoint โดยใช้ PowerShell
รับตัวรับเหตุการณ์ทั้งหมดที่แนบมากับรายการ:
เรามาค้นหากันใน SharePoint 2010 PowerShell เพื่อรับตัวรับเหตุการณ์ที่เกี่ยวข้องกับรายการเฉพาะ
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
#Get the web
$Web = Get-SPWeb "https://sharepoint.crescent.com"
#Get the Target List
$List = $Web.Lists["Documents"]
#Retrieve all event receivers associated with the list
$List.EventReceivers | Select Id, Type, Assembly, Class | FL
ค้นหาตัวรับเหตุการณ์ทั้งหมดบนเว็บไซต์ทั้งหมดในเว็บแอปพลิเคชัน:
ในทำนองเดียวกัน เราสามารถดึงข้อมูลตัวรับเหตุการณ์ทั้งหมดที่เกี่ยวข้องกับรายการและไลบรารีต่างๆ ทั่วทั้งไซต์คอลเลกชันทั้งหมดได้โดยใช้สคริปต์ PowerShell ด้านล่าง
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
$WebAppURL = "https://sharepoint.crescent.com"
#Get All Webs
$Webs = Get-SPWebApplication $WebAppURL | Get-SPSite -Limit All | Get-SPWeb
foreach($web in $Webs)
{
#Get Lists with Event receivers excluding System lists
$web.lists | where { ($_.Author.LoginName -ne "SHAREPOINT\system") -and ($_.Hidden -eq $false) -and ($_.IsCatalog -eq $false) -and ($_.IsSiteAssetsLibrary -eq $false) -and ($_.EventReceivers.count -gt 0) } | Select Title, EventReceivers | FL
}
PowerShell นี้ตรวจสอบตัวรับเหตุการณ์รายการใน SharePoint
SharePoint PowerShell เพื่อเพิ่มตัวรับเหตุการณ์ลงในรายการ
โดยปกติแล้ว เราจะสร้างแอปพลิเคชันคอนโซล C#.net เพื่อเชื่อมโยงตัวรับเหตุการณ์กับรายการใดรายการหนึ่ง ครั้งนี้ ฉันลองใช้สคริปต์ PowerShell: มาปรับใช้ตัวรับเหตุการณ์ใน SharePoint 2013 โดยใช้ PowerShell กันดีกว่า
มาเพิ่มตัวรับเหตุการณ์โดยสร้างคำจำกัดความใน PowerShell:
#Get the web
$Web = Get-SPWeb "https://sharepoint.crescent.com"
#Get the Target List
$List = $Web.Lists["Documents"]
#Add new event receiver definition
$def = $list.EventReceivers.Add()
$def.Assembly = "Crescent.DocRestrict, Version=1.0.0.0, Culture=neutral, PublicKeyToken=677b45b1314c252c"
$def.Class = "Crescent.Utilities.DocRestrict.Restrict"
$def.Type = [Microsoft.SharePoint.SPEventReceiverType]::ItemAdded
$def.Name = "ItemAdded Event Receiver";
$def.SequenceNumber = 3000
$def.Synchronization = [Microsoft.SharePoint.SPEventReceiverSynchronization]::Synchronous
$def.Update()
SharePoint เพิ่มตัวรับเหตุการณ์ด้วย PowerShell
อีกทางหนึ่ง ใน SharePoint เพื่อเพิ่มตัวรับเหตุการณ์ลงในรายการด้วย PowerShell:
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
#Get the web
$Web = Get-SPWeb "https://sharepoint.crescent.com"
#Get the Target List
$List = $Web.Lists["Documents"]
#Retrieve all event receivers associated with the list
#$List.EventReceivers | Select Id, Type, Assembly, Class | FL
$Assembly = "Crescent.DocRestrict, Version=1.0.0.0, Culture=neutral, PublicKeyToken=677b45b1314c252c"
$Class= "Crescent.Utilities.DocRestrict.Restrict"
Write-Host "Attaching Event Receiver..."
# sharepoint 2010 powershell register event receiver
$list.EventReceivers.Add("ItemAdding", $Assembly , $Class)
แล้วประเภทเนื้อหาล่ะ? สามารถเพิ่มตัวรับเหตุการณ์โดยใช้ PowerShell ได้หรือไม่ ทำไมจะไม่ล่ะ?
#Get the content type
$ctype = $web.ContentTypes["content type name"]
#Add event receiver
$ctype.EventReceivers.Add("ItemAdding", "Assembly Name", "Class")
ตัวรับเหตุการณ์ SharePoint ลบด้วย PowerShell:
หากต้องการลบตัวรับเหตุการณ์โดยใช้ PowerShell ใน SharePoint นี่คือรหัส:
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
#Get the web
$Web = Get-SPWeb "https://sharepoint.crescent.com"
#Get the Target List
$List = $Web.Lists["Documents"]
$Assembly = "Crescent.DocRestrict, Version=1.0.0.0, Culture=neutral, PublicKeyToken=677b45b1314c252c"
$EventReceivers = $list.EventReceivers | Where {$_.Assembly -eq $assembly}
if ($EventReceivers) #.Count -gt 0)
{
foreach($Receiver in $EventReceivers)
{
Write-Host "Deleting Event Receiver from " $list.RootFolder.ServerRelativeUrl
$Receiver.Delete()
}
}
SharePoint PowerShell เพื่อลบตัวรับเหตุการณ์:
คุณยังสามารถลบตัวรับเหตุการณ์เฉพาะได้ด้วย ID ของมัน นี่คือตัวอย่างของการลบตัวรับเหตุการณ์ออกจากรายการ SharePoint โดยใช้ PowerShell
#Get the web
$Web = Get-SPWeb "https://sharepoint.crescent.com"
#Get the Target List
$List = $Web.Lists["Documents"]
#Get all event receivers associated with the list
$List.EventReceivers | Select Id, Type, Assembly, Class | FL
#$EventReceiverID = "625c59a9-72d7-4479-a1e7-35f040e4f9a1"
#Uncomment below line to sharepoint 2010 remove event receiver from list powershell
#$list.EventReceivers[[GUID]$EventReceiverID].delete()
ลบตัวรับเหตุการณ์ที่ซ้ำกัน:
อินสแตนซ์ที่ซ้ำกันของตัวรับเหตุการณ์ SharePoint เป็นปัญหาที่ทราบ พวกมันใช้ส่วนประกอบร่วมกันโดยมีหมายเลขลำดับต่างกัน ดังนั้นพวกเขาจึงยิงสองครั้ง
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
#Get the web
$Web = Get-SPWeb "https://sharepoint.crescent.com"
#Get the Target List
$List = $Web.Lists["Documents"]
#Get all event receivers grouped by assembly/class/type
$list.EventReceivers | Group-object assembly, class, type | where { $_.Count -gt 1 }
#If any of the assembly/class/type pairs are same, we have a duplicate!
#Leave the first event receiver at 0th position and delete all other
$list.EventReceivers | Group-object assembly, class, type | where { $_.Count -gt 1 } | foreach { $_.Group[1..50] } | foreach { $_.Delete() }
หากต้องการเพิ่มตัวรับเหตุการณ์ด้วยรายการ SharePoint โดยทางโปรแกรมด้วย C# โปรดดูที่: SharePoint เพิ่มตัวรับเหตุการณ์ลงในรายการ
