I wanted a way to inject myself as a site collection admin into every site in sharepoint, Note, I’m not talking about the primary/secondary that you can set in Central admin.
I’m talking about that group you can only get to from within each site itself. Or in this case, with the powershell script below…
Note that it takes an array of names – if you have a team of admins or developers that all need access, you can put all their names in the list.
# set site collection owner for all sites...
# 1-2012
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
# $AccountList is an array of Windows Identities in the format of $AccountList = @("DOMAIN\USERID" , "DOMAIN\USERID2")
$AccountList = @("LAB\Jack", "Lab\tom", "Lab\dick", "lab\harry")
#this gets an array of objects representing the sites at the IIS level:
$IISSites = Get-SPWebApplication
Foreach($oneIISSite in $IISSites)
{
#using .Sites, we can get a list of the site collections
foreach ($SharepointSiteCollection in $oneIISSite.Sites)
{
write-host $SharepointSiteCollection.url -ForegroundColor Cyan
$spweb = Get-SPWeb $SharepointSiteCollection.url
#now we have the website, so lets look at each account in our array
foreach ($Account in $AccountList)
{
#lets see if the user already exists
Write-host "Looking to see if User " $account " is a member on " $SharepointSiteCollection.url -foregroundcolor Blue
$user = Get-SPUSER -identity $Account -web $SharepointSiteCollection.url -ErrorAction SilentlyContinue #This will throw an error if the user does not exist
if ($user -eq $null)
{
#if the user did NOT exist, then we will add them here.
$SPWeb.ALLUsers.ADD($Account, "", "", "Added by AdminScript")
$user = Get-SPUSER -identity $Account -web $SharepointSiteCollection.url
Write-host "Added user $Account to URL $SPWeb.URL" -Foregroundcolor Magenta
}
else
{
Write-host "user $Account was already in URL " $SPWeb.URL -Foregroundcolor DarkGreen
}
if ($user.IsSiteAdmin -ne $true)
{
$user.IsSiteAdmin = $true
$user.Update()
Write-host "$account has been made an admin on $SPWeb.URL" -Foregroundcolor Magenta
}
else
{
Write-host "$account was already an admin on $SPWeb.URL" -Foregroundcolor DarkGreen
}
}
$SharePointSiteCollection.Dispose()
}
}
Here’s another version of the script, this one also takes an array of top level URL’s
It’s handy if you have lots of url’s on your site and only want to work with a few of them.
# set site collection owner for all sites...
# 2-2013 Jack
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
$logfile = "Powershelloutput.log"
# $AccountList is an array of Windows Identities in the format of $AccountList = @("DOMAINUSERID" , "DOMAINUSERID2")
$AccountList = @("domaintom", "domaindick", "domainharry")
# $iisSiteList is an array of top level IIS site URLs
$iisSiteList = @("http://site1.yoururl.com", "http://anothersite.yoururl.com")
# this is from an earlier version of the script
# That scrip looks at all SP sites on the farm, I've left the old code here for reference
# this gets an array of objects representing the sites at the IIS level:
## $IISSites = Get-SPWebApplication
Foreach($oneIISSite in $IISSiteList)
{
#using .Sites, we can get a list of the site collections
#so really what were saying is for each SharepointSiteCollection
#this code is altered a bit, since we're using an array of top level site names.
# we need to use (Get-SPWebApplication $oneIISSite).Sites
# which is the same as $sitelist = Get-SPWebApplication $oneIISSite
# $sitelist.sites
foreach ($SharepointSiteCollection in (Get-SPWebApplication $oneIISSite).Sites)
{
$msg = $SharepointSiteCollection.url
write-host -ForegroundColor Cyan $msg
Add-Content $logfile $msg
$spweb = Get-SPWeb $SharepointSiteCollection.url
#now we have the website, so lets look at each account in our array
foreach ($Account in $AccountList)
{
#lets see if the user already exists
$msg = "Looking to see if User " + $account + " is a member on " + $SharepointSiteCollection.url
Write-host -foregroundColor Blue $msg
Add-Content $logfile $msg
$user = Get-SPUSER -identity $Account -web $SharepointSiteCollection.url -ErrorAction SilentlyContinue #This will throw an error if the user does not exist
if ($user -eq $null)
{ #if the user did NOT exist, then we will add them here.
$SPWeb.ALLUsers.ADD($Account, "", "", "Added by AdminScript")
$user = Get-SPUSER -identity $Account -web $SharepointSiteCollection.url
$msg = "Added user $Account to URL $SPWeb.URL"
Write-host -Foregroundcolor Magenta $msg
Add-Content $logfile $msg
}
else
{
$msg = "user $Account was already in URL " + $SPWeb.URL
Write-host -ForegroundColor DarkGreen $msg
Add-Content $logfile $msg
}
if ($user.IsSiteAdmin -ne $true)
{
$user.IsSiteAdmin = $true
$user.Update()
$msg = "$account has been made an admin on $SPWeb.URL"
Write-host -Foregroundcolor Magenta $msg
Add-Content $logfile $msg
}
else
{
$msg = "$account was already an admin on $SPWeb.URL"
Write-host -ForegroundColor DarkGreen $msg
Add-Content $logfile $msg
}
}
$SharepointSiteCollection.Dispose()
}
}
$msg = "=============== ALL DONE ================"
Write-host -ForegroundColor DarkGreen $msg
Add-Content $logfile $msg