Pytanie : Patrzeć dla narzędzie który automatycznie wytwarzać SharePoint stsadm - migrować użytkownik pismo, gdy przemianowywać użytkownik w Aktywny Książka telefoniczna

Nasz firma dobrowolnie przemianowywać użytkownik konto w Aktywny Książka telefoniczna. To być istny ból ponieważ SharePoint wymagać the następujący stadm rozkaz być wykonywać wykonywać to robić:

" stsadm - o migrateuser - oldlogin - newlogin - ignoresidhistory "

Currently nasz centrum pomocy humanitarnej przemianowywać w aktywny książka telefoniczna i email spreadsheet z the zmiana nazwiska. I tworzyć wsad kartoteka the konieczny stsadm komenderowanie.

The problem być że ten proces być błąd - skory. I considering użyteczność jeden the following.

1. Tworzyć nakazowy linia użyteczność który czytać the usernames od spreadsheet, aktualizacja aktywny książka telefoniczna i wytwarzać kartoteka z the stsadm rozkaz SharePoint.

OR

2. Budowa okno podaniowy dla użytkownik w aktywny książka telefoniczna. W tym samym czasie ono automatycznie wytwarzać kartoteka z the stsadm command.

Does znać jeżeli taki użyteczność istnieć lub mieć jakaś inny propozycja?

Odpowiedź : Patrzeć dla narzędzie który automatycznie wytwarzać SharePoint stsadm - migrować użytkownik pismo, gdy przemianowywać użytkownik w Aktywny Książka telefoniczna

Zakładać the kod. Tutaj być niektóre the kluczowy kawałek the kod/logika.

Znowu, dla każdy webapplication, I dostawać każdy miejsce kolekcja. The kod początek na dawać miejsce kolekcja.

Dostawać the miejsce inkasowy użytkownik lista.
Dla samAccountName użytkownik, czek jeżeli użytkownik istnieć w REKLAMA przez LoginName (samAccountName). Jeżeli użytkownik istnieć pominięcie (migrateuser potrzebować). Jeżeli użytkownik istnieć, dostawać the użytkownik SID i patrzeć opierać się REKLAMA opierać się na SID.
Jeżeli znajdować, dostawać the nowy nazwa użytkownika imię i wytwarzać migrować użytkownik rozkaz the wsad kartoteka.
Zauważać że the wsad kartoteka mieć wielokrotność wielostrzałowy linia dla the ten sam użytkownik przez the miejsce kolekcja. I używać powershell rodzaj rozkaz the duplikat w the końcówka (GC C:\migrateUsers.txt| Rodzaj | GU > C:\migrateUsers.bat)



(1):
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
[System.Reflection.Assembly]:: LoadWithPartialName ("Microsoft.SharePoint") > $null
$site = nowy-protestować Microsoft.SharePoint.SPSite ($SiteCollectionURL)
$web = $site.openweb ()

$siteCollUsers = $web.SiteUsers

foreach ($MyUser w $siteCollUsers)
{
	jeżeli (($MyUser.LoginName.ToLower () - ne "sharepoint \ system") - i ($MyUser.LoginName.ToLower () - ne "nt władza \ uwiarygodniać użytkownik") - i ($MyUser.LoginName.ToLower () - ne "nt władza \ usługa lokalna"))
	{
		$UserName = $MyUser.LoginName.ToLower ()
		$UserNameSplit = $UserName.split ("\ ")
		#Write-gościć "Użytkownik Nazwa użytkownika: ", $MyUser.LoginName, "SID: ", $MyUser.Sid

		$returncheck = Check_User_In_ActiveDirectory $UserNameSplit [(1)] $mydomaincnx 
		jeżeli ($returncheck - eq $False)
		{

			$nameFromSID = ConvertTo-Wymieniać $MyUser.Sid
			jeżeli ($nameFromSID - ne "Użytkownik Znajdować")
			{
				$command = "stsadm.exe - o migrateuser - oldlogin" + $MyUser.LoginNAme + "- newlogin" + $nameFromSID + "- ignoresidhistory"
				Pisać-Wydajność $command | out-segregować C:\migrateUsers.txt - append
			}


		}
	}
}

$web. Dispose ()
$site. Dispose ()

funkcja ConvertTo-Wymieniać ($SID) 
{
   oklepiec 
   {
      "Użytkownik Znajdować"; kontynuować
   }
   ((nowy-protestować security.principal.securityidentifier $SID) .translate ([security.principal.ntaccount])). Wartość
}

funkcja Check_User_In_ActiveDirectory ([smyczkowy] $LoginName, [smyczkowy] $domaincnx)
{
	$returnValue = $false
	#Filter na Użytkownik che istnieć i
	$strFilter = "(& (|(objectCategory=user) (objectCategory=group))(samAccountName=$LoginName))"
	$objDomain = Nowy-Protestować System.DirectoryServices.DirectoryEntry ($domaincnx)

	$objSearcher = Nowy-Protestować System.DirectoryServices.DirectorySearcher
	$objSearcher.SearchRoot = $objDomain
	$objSearcher.PageSize = 1000
	$objSearcher.Filter = $strFilter
	$objSearcher.SearchScope = "Subtree"

	#$objSearcher.PropertiesToLoad.Add ("imię")

	$colResults = $objSearcher.FindAll ()

	jeżeli ($colResults.Count - gt (0))
	{
		#Write-gościć "Obrachunkowy istnieć i Aktywny: ", $LoginName
		$returnValue = $true
	}
	powrotny $returnValue
}
Inne rozwiązania  
 
programming4us programming4us