Adding Computers through PowerShell
Now let’s add a couple of computers to our test environment. The Computer Names are based on the Starships from the Csv file. Since there are alot of characters but not that many different ships we need to get a unique list of ships. We also wnat the Series, Location and Registry values.
PS > $CsvFile = Import-Csv StarTrek.csv PS > $CsvFile | Select Series, Starship, Location, Registry -unique | fl Series : Star Trek: The Next Generation Starship : USS Enterprise (NCC-1701-D) Location : Alpha Quadrant Registry : NCC-1701-D Series : Star Trek: Deep Space Nine Starship : Deep Space Nine Location : Alpha Quadrant Registry : DS9 Series : Star Trek: Voyager Starship : USS Voyager (NCC-74656) Location : Delta Quadrant Registry : NCC-74656 Series : Star Trek: Enterprise Starship : Enterprise (NX-01) Location : Alpha Quadrant Registry : NX-01Let’s walk through how the script handles the first Starship. At first we have to check if the Computer exists, We’ll use a checker function that checks if the Computer doesn’t exist.
function Check-distinguishedName ([string]$Domain, [string]$Computer) {
trap { $Script:distinguishedNameDoesntExist = $True ; continue }
.Get-AD.ps1 -Domain $Domain -Computer $Computer -filter distinguishedName | Out-Null
}
Next we have to check create a variable holding a distinguishedName and check if it exists or not.
PS > $Starship = "USS Enterprise (NCC-1701-D)"
PS > $Domain = "powershell.nu"
PS > $distinguishedName = "CN=" + $Starship + ",OU=Computers,OU=" + $Series + ($Domain.Replace(".",",DC=")).Insert(0,",DC=")
Now we can run the function.
PS > Check-distinguishedName -Domain $Domain -Computer $distinguishedNameNow that we’ve checked the distinguisehdName we can connect to AD and start adding our Computer.
PS > $Connection = "LDAP://OU=Computers" + $Series.Insert(0,",OU=") + ($Domain.Replace(".",",DC=")).Insert(0,",DC=")
PS > $AD = [adsi] $Connection
PS > $Computer = $AD.Create("Computer", "CN=$Starship")
PS > $Computer.SetInfo()
Now for the additional information. We might want to change the sAMAccountName from the default name generated by AD. We also want to check that the name we choose doesn’t exist so we’ll use yet another check function.
function Check-sAMAccountName ([string]$Domain, [string]$Computer) {
trap { $Script:sAMAccountNameDoesntExist = $True ; continue }
.Get-AD.ps1 -Domain $Domain -Computer $Computer -filter sAMAccountName | Out-Null
}
We’ll base the sAMAccountName on the Ships Registry information. In this case, the registry is NCC-1701-D
PS > $sAMAccountName = ($Registry).ToUpper() PS > Check-sAMAccountName -Domain $Domain -Computer $sAMAccountNameIf the sAMAccountName doesn’t exist the script will use it on the Computer object. If it does exist, theres a while loop that loops through and appends a digit in order to get a unique sAMAccountName. Here’s an example on the where loop.
While ($Script:sAMAccountNameDoesntExist -eq $False) {
# Create New sAMAccountName
$LastChar = $sAMAccountName.SubString($sAMAccountName.Length -1)
if(1..9 -Contains $LastChar) {
$sAMAccountName = $sAMAccountName.SubString(0,$sAMAccountName.Length -1) + ([int]$LastChar + 1)
} else {
$sAMAccountName = $sAMAccountName.SubString(0,$sAMAccountName.Length -1) + 1
}
Check-sAMAccountName -Domain $Domain -Computer $sAMAccountName
}
The final Steps of the script add the additional information and enables the computer.
PS > $Computer.put("sAMAccountName", $sAMAccountName)
PS > $Computer.put("Location", $Location)
PS > $Computer.put("Description", $Starship)
PS > $Computer.setinfo()
PS > $Computer.PsBase.InvokeSet("AccountDisabled", $False)
PS > $Computer.SetInfo()
Now let’s run the script in our test environment.
If we repeat the script it’ll tell us that the computers already exist.
If we check in dsa.msc snap-in we can see that the computer objects have been created.
and finally, if we want to retrieve the information through PowerShell, we can use the Get-AD.ps1 script.
PS > .Get-AD.ps1 -Domain powershell.nu -Computer "Uss Enterprise (NCC-1701-D)"
objectClass : top person organizationalPerson user computer
cn : USS Enterprise (NCC-1701-D)
description : USS Enterprise (NCC-1701-D)
distinguishedName : CN=USS Enterprise (NCC-1701-D),OU=Computers,OU=Star Trek
u
instanceType : 4
whenCreated : 4/13/2009 7:19:11 PM
whenChanged : 4/13/2009 7:19:11 PM
uSNCreated : System.__ComObject
uSNChanged : System.__ComObject
name : USS Enterprise (NCC-1701-D)
objectGUID : 31 54 123 251 207 232 62 72 153 101 238 77 71 88 19 27
userAccountControl : 544
badPwdCount : 0
codePage : 0
countryCode : 0
badPasswordTime : System.__ComObject
lastLogoff : System.__ComObject
lastLogon : System.__ComObject
pwdLastSet : System.__ComObject
primaryGroupID : 513
objectSid : 1 5 0 0 0 0 0 5 21 0 0 0 50 71 101 4 93 25 58 165 36 24
accountExpires : System.__ComObject
logonCount : 0
sAMAccountName : NCC-1701-D
location : Alpha Quadrant
sAMAccountType : 805306368
objectCategory : CN=Computer,CN=Schema,CN=Configuration,DC=powershell,DC=
nTSecurityDescriptor : System.__ComObject
Click Here to Download the Complete Script.
The Get-AD.ps1 script is also required.
Click here to download the Csv File
[?]

Greatings,
Ugh, I liked! So clear and positively.
Have a nice day
Robor
Indeed … very Clear ..
Thanks for this article.
Bernard