ค้นหาเว็บไซต์

ค้นหาและลบการแจ้งเตือนที่ถูกละเลยใน SharePoint


คำอธิบายปัญหา: โดยย่อ - เมื่อผู้ใช้ออกจากองค์กรของคุณและถูกลบออกจาก Active Directory (AD) พวกเขาจะกลายเป็นเด็กกำพร้าใน SharePoint! การแจ้งเตือนของพวกเขาด้วย!!

เหตุใดเราจึงใส่ใจสิ่งเหล่านี้: เพื่อให้ SharePoint สะอาด เราต้องลบ em' ออกจากไซต์ SharePoint ทั้งหมด ดังนั้นฉันจึงเขียนสคริปต์ PowerShell เพื่อสแกนคอลเลกชันไซต์ทั้งหมดของเว็บแอปพลิเคชัน ค้นหาและลบผู้ใช้ที่ถูกละเลยออกจาก SharePoint ที่นี่: ค้นหาและลบผู้ใช้ที่ถูกละเลยใน SharePoint ด้วย PowerShell

นั่นสิแก้ปัญหาได้เหรอ? แต่เรามีเด็กกำพร้าอีกหนึ่งคนที่ต้องทำความสะอาด: การแจ้งเตือนของ SharePoint ที่สร้างขึ้นสำหรับผู้ใช้เด็กกำพร้า! เอาล่ะ ไม่ใช่เรื่องยาก เรามาใช้ประโยชน์จากสคริปต์ที่มีอยู่ ปรับเปลี่ยนเพียงเล็กน้อย รันก่อนที่จะลบผู้ใช้ที่ถูกละเลย!


Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

#Function to Check if a User exists in AD
function CheckUserExistsInAD()
{
	Param( [Parameter(Mandatory=$true)] [string]$UserLoginID )  
	#Search the User in AD
	$forest = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest()
	foreach ($Domain in $forest.Domains)
	{
		$context = new-object System.DirectoryServices.ActiveDirectory.DirectoryContext("Domain", $Domain.Name)
        $domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetDomain($context)
		$root = $domain.GetDirectoryEntry()
        $search = [System.DirectoryServices.DirectorySearcher]$root
        $search.Filter = "(&(objectCategory=User)(samAccountName=$UserLoginID))"
        $result = $search.FindOne()
        if ($result -ne $null)
        {
           return $true
        }
	}
	return $false  
}

#Get All site collections of all web applications
$sites = Get-SPWebApplication | Get-SPSite -Limit All
#Iterate through each site collection
foreach($site in $sites)
{
	Write-Host "Processing Site:"$site.Url -ForegroundColor Magenta
	foreach($Web in $site.AllWebs)
	{
		#Arrays to Hold Orphaned Alerts & Users
		$OrphanedAlerts = @()
		$AlertUsers  = @()
		#Get all Alerts created on the web
		$WebAlerts = $web.Alerts 
		#Get Unique Users from All Alerts 
		$AlertUsers = $web.Alerts | foreach { $_.User } | Select-Object -Unique

		#Check if any user with alerts is :Orphan!
		If($AlertUsers.length -gt 0)
		{
			foreach($AlertUser in $AlertUsers)
			{
				#Write-host "Checking User:"$AlertUser
				#Check if the user is valid - Not Orphan
				$UserName = $AlertUser.UserLogin.split("\")  #Get User Name from : Domain\UserName
				$AccountName = $UserName[1]    #UserName
					if ((CheckUserExistsInAD $AccountName) -eq $false)
                    {
						$OrphanedAlerts+=$AlertUser.Alerts
					}
			}
			if($OrphanedAlerts.Length -gt 0) 
			{ 
				Write-Host "Total No. of Orphaned Alerts Found:" $OrphanedAlerts.Length  -ForegroundColor Red
				#Delete each orphaned alert
				foreach ($OrphAlert in $OrphanedAlerts)
				{
				write-host "`nOrphaned Alert:" $OrphAlert.ID" on "$web.Url "List:" $OrphAlert.ListUrl "User:"$OrphAlert.User
				Write-Host "Deleting Orphaned Alert..."
				#$WebAlerts.Delete($OrphAlert.ID)
				}
			}
		}     
	}
}

สคริปต์ PowerShell นี้จะสแกนและลบการแจ้งเตือนทั้งหมดที่สร้างขึ้นสำหรับผู้ใช้ Orphaned โปรดทราบว่าฉันได้แสดงความคิดเห็นในบรรทัด:


#$WebAlerts.Delete($OrphAlert.ID)

เพียงเรียกใช้สคริปต์เพื่อดูว่ามีการแจ้งเตือนจำนวนเท่าใดในรายการและไลบรารีใด ยกเลิกการแสดงความคิดเห็นในบรรทัดด้านบนโดยลบ # เพื่อลบการแจ้งเตือนที่ถูกละเลยใน SharePoint

บทความที่เกี่ยวข้อง