### -----------------------------------------------------------------
### Written by Matt Brown
### - http://universitytechnology.blogspot.com/
### PowerShell script to search OU Structure and add computer to domain
###
### -----------------------------------------------------------------
Param(
$user = $(Get-Credential -Credential "domain\user"), # Prompts user for credentials
$filter = "(objectClass=organizationalUnit)", # Do not change
$ouLocatoin = "LDAP://OU=Departments,DC=domain,DC=com", # Starting Organizational Unit
$mydomain = "domain.com", # FQDN of Domain
$whatif = "-WhatIf" # change to "" to actually run
)
#--------------------------------------------------------------------
Function GetSecurePass ($SecurePassword) {
$Ptr = [System.Runtime.InteropServices.Marshal]::SecureStringToCoTaskMemUnicode($SecurePassword)
$password = [System.Runtime.InteropServices.Marshal]::PtrToStringUni($Ptr)
[System.Runtime.InteropServices.Marshal]::ZeroFreeCoTaskMemUnicode($Ptr)
$password
}
#--------------------------------------------------------------------
Function AddTabs($mystring,[int]$numtabs=5) {
for([int]$len = (([string]$mystring).length / 8.9); $len -lt $numtabs; $len++) { $mystring += "`t" }
return $mystring
}
#--------------------------------------------------------------------
Function SelectOU($dn,$up) {
Clear-Host
Write-Host "### -----------------------------------------------------------------" -ForegroundColor Green
Write-Host "### Select OU and Add Computer to Domain " -ForegroundColor Green
Write-Host "### Written by Matt Brown " -ForegroundColor Green
Write-Host "### - http://universitytechnology.blogspot.com/ " -ForegroundColor Green
Write-Host "### PowerShell v.2 (Windows 7 / Server 2008 R2) " -ForegroundColor Green
Write-Host "### -----------------------------------------------------------------" -ForegroundColor Green
Write-Host "`nThe Number in the Select column adds the computer to the OU, where the List column will list Sub-OU's of the OU." -ForegroundColor Green
Write-Host $dn
Write-Host $up
Write-Host "`n"
Write-Host ("List Of " + (([string]$dn).split("/"))[2]) -ForegroundColor Yellow
Write-Host " Select List`tOU"
Write-Host " ----------------------------------------------------"
Write-Host " 0`t L0 <- Up a Level"
#$ou = Get-ADOrganizationalUnit -SearchBase $dn -SearchScope OneLevel -Filter 'Name -like "*"'
$auth = [System.DirectoryServices.AuthenticationTypes]::FastBind
$de = New-Object System.DirectoryServices.DirectoryEntry($dn,$user.UserName,(GetSecurePass $user.Password),$auth)
$ds = New-Object system.DirectoryServices.DirectorySearcher($de,$filter)
$ds.SearchScope = "OneLevel"
$ou=($ds.Findall()) | Sort-Object -Property Name
$sel = $null
$selectList = @("0","L0","C")
for($x=1; $ou.count -ge $x; $x++) {
# output line, decide if it needs to be in yellow or white
$selectList += $x
$selectList += ("L"+$x)
$outname = (AddTabs ($ou[$x-1].Properties['name']))
$lineout = (" " + $x + "`t " + ("L"+$x) + "`t" + $outname)
if($x % 2 -eq 0) {
Write-Host $lineout -BackgroundColor White -ForegroundColor Black
} else {
Write-Host $lineout -BackgroundColor Gray -ForegroundColor Black
}
}
Write-Host " C`t C -- Cancel & Exit"
Write-Host "`n"
while($selectList -notcontains $sel) {
$sel = Read-Host " Select OU or List Sub-OUs"
}
## Figure out what the user selected
if ( $sel[0] -eq "L") {
## Users Selected List Mode
$y = ($sel.split("Ll")[1])
if([int]$y -eq 0) {
$newup = ("LDAP://" + ($up -replace (($up -split ",")[0] + ",")))
SelectOU $up $newup
} else {
SelectOU $ou[$y-1].Properties['adspath'] $dn
}
} elseif ($sel -eq "c") {
## User Selected Cancel
return $false
} else {
## User Selected the OU
if([int]$sel -eq 0) {
return ([string]$dn).split("//")[2]
} elseif([int]$sel -le [int]$ou.count) {
return $ou[$sel-1].Properties['distinguishedname']
} else {
SelectOU $dn $up
}
}
}
#--------------------------------------------------------------------
#--------------------------------------------------------------------
## Main
#--------------------------------------------------------------------
## Select / View OU
while($ou = (SelectOU $ouLocatoin $ouLocatoin)) {
## Add to Domain
Write-Host (" Will add computer (" + $env:computername + ") to:") -ForegroundColor Yellow
Write-Host (" " + $ou + "`n") -ForegroundColor Green
$continue = Read-Host " Continue (y | n)"
if($continue -eq "y") {
## Now Add the Computer to the Domain
add-computer -domainname $mydomain -OUPath $ou -Credential $user $whatif
break
}
}
Ramblings from University IT... VMWare, NetApp, Powershell,Active Directory, Exchange and Scripting.
Monday, November 10, 2014
PowerShell: Add Computer to Domain directly to OU
Here's a PowerShell script to add computers to the Domain to a specific OU (Organizational Unit) and allows you to select the OU Location. I did not use the AD modules as they are not pre-installed on most desktops, even though it would of been much easier to write with them.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment