Adding Users to Sharepoint
Adding Users from Active-Directory into Sharepoint is done in 2 steps. First we will need to Get the information required from Active-Directory and then we need to Add the informtaion into Sharepoint.
Lets start with Active-Directory. Below is an image of the Active-Directory Design in this example:

Since we want to Get the User information we need to connect to the correct OU through ADSI. The Connection string to the User OU that we want to access would look like this
LDAP://OU=Site1 Users,OU=Site1,OU=Sites,DC=BPA,DC=CORP
Here’s how to connect to the OU through PowerShell:
PS > $ConnectionString = "LDAP://OU=Site1 Users,OU=Site1,OU=Sites,DC=BPA,DC=CORP" PS > $AD = [adsi]$ConnectionString PS > $AD
distinguishedName
-----------------
{OU=Site1 Users,OU=Site1,OU=Sites,DC=bpa,DC=corp}
This shows that we have connected to the correct OU. To retrieve information about the Users in the OU we have to access the children within the object.
PS > $AD.PsBase.Children
distinguishedName
-----------------
{CN=user1,OU=Site1 Users,OU=Site1,OU=Sites,DC=bpa,DC=corp}
{CN=user2,OU=Site1 Users,OU=Site1,OU=Sites,DC=bpa,DC=corp}
{CN=user3,OU=Site1 Users,OU=Site1,OU=Sites,DC=bpa,DC=corp}
{CN=User4,OU=Site1 Users,OU=Site1,OU=Sites,DC=bpa,DC=corp}
Now that we have all the Users in the OU we can start collecting the information. But first let’s check what we need. The User items in WSS 3.0 have a couple of settable values and not all values are available Properties in Active-Directory.

Sharepoint actually looks up Department and Job Title if they exist in Active-Directory so we dont have to bother about that. What we do need is the Users loginname, mail and name.
To retrieve the information, we will create a filter that takes the information from Active-Directory.
PS > filter UserProperties {
$_ | select @{ name='sAMAccountName'; Expression={$_.sAMAccountName} },
@{ name='mail'; Expression={$_.mail} },
@{ name='displayName'; Expression={$_.displayName} }
}
Next we will run through all Child objects in the OU and filter them into a new Custom Object.
PS > $User = $AD.PsBase.Children | UserProperties PS > $User
sAMAccountName mail displayName -------------- ---- ----------- user1 user1@mail.com user1 user2 user2@mail.com user2 user3 user3@mail.com user3 user4 user4@mail.com User4
Now that we have the User information stored in a PowerShell object, we can use it to create the users in Sharepoint. When adding users to Sharepoint, we have to consider which Role ther Users should have. there are a few available roles to choose from. We can get a list of all roles through the Roles Property.
ps > [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
PS > $SPSite = New-Object Microsoft.SharePoint.SPSite("http://wss"); $OpenWeb = $SpSite.OpenWeb(); $OpenWeb.Roles | Select Name, Description; $OpenWeb.Dispose(); $SPSite.Dispose()
Name Description
---- -----------
Full Control Has full control.
Design Can view, add, update, delete, approve...
Contribute Can view, add, update, and delete.
Read Can view only.
Limited Access Can view specific lists, document libraries...
In this example, we will use the Read Role. To add the users to Sharepoint we use a function.
function Add-SPUser([string]$url, [string]$Role, [string]$Domain, [string]$sAMAccountName, [string]$Mail, [string]$DisplayName) {
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$SPSite = New-Object Microsoft.SharePoint.SPSite($url);
$OpenWeb = $SpSite.OpenWeb(); $OpenWeb.Roles | Select Name, Description; $OpenWeb.Dispose(); $SPSite.Dispose()
$OpenWeb.Roles[$Role].AddUser(
$Domain + $sAMAccountName,
$Mail,
$DisplayName,
""
)
$OpenWeb.Dispose()
$SPSite.Dispose()
}
PS > $User | foreach-object {
Add-SPUser -url http://wss -Role Read -Domain bpa -sAMAccountName $_.sAMAccountName -Mail $_.Mail -DisplayName $_.DisplayName
}
Now the users are added to Sharepoint. Note that Job Title and Department are added automatically, if the values exist in Active-Directory.


This is a great article. Any tips on how to do similar but for forms authenticated users which are not members of AD or LDAP?