当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 PowerShell 在 SharePoint 中添加-删除-获取事件接收器

作者:精品下载站 日期:2024-12-14 13:43:45 浏览:14 分类:玩电脑

使用 PowerShell 在 SharePoint 中添加-删除-获取事件接收器


我们通常使用 C# 控制台应用程序或功能激活代码向 SharePoint 中的目标列表或库注册事件接收器。有时,我们可能必须显式处理事件接收器关联。当然,有一些很棒的工具(例如 SharePoint 事件接收器管理器)来管理事件接收器。然而,在生产环境中,出于安全原因不允许我使用任何此类工具,我只能选择:PowerShell。因此,我将分享我的 PowerShell 代码片段,以使用 PowerShell 管理 SharePoint 中的事件接收器。

[玩转系统] 使用 PowerShell 在 SharePoint 中添加-删除-获取事件接收器

获取附有列表的所有事件接收器:

让我们在 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 

查找 Web 应用程序中所有站点上的所有事件接收器:

同样,我们可以使用以下 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 脚本:让我们使用 PowerShell 在 SharePoint 2013 中部署事件接收器。

让我们通过在 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")

使用 PowerShell 删除 SharePoint 事件接收器:

要在 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"]

$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 删除特定事件接收器。以下是使用 PowerShell 从 SharePoint 列表中删除事件接收器的示例。


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

要使用 C# 以编程方式向 SharePoint 列表添加事件接收器,请参阅:SharePoint 将事件接收器添加到列表

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯