Solved

Need help with Powershell script to add DHCP scopes to AD Sites

Posted on 2010-11-30
20
1,194 Views
Last Modified: 2012-06-21
We are in the process of changing our entire VLAN/DHCP scope structure. I need to create a script which adds or replaces the existing subnets in Active Directory Sites and Services with the new subnets(listed in an Excel spreadsheet) and add them to specific sites in ADSS with their respective descriptions.
I am a PowerShell beginner and I have found a script which creates sites (below) which I am trying to adapt to my needs. I need to get this done as soon as possible so I don't have much time to research this. Any help or direction would be appreciated.

siteName =  "Default-First-Site-Name"
$configNCDN = (Get-ADRootDSE).ConfigurationNamingContext
$siteContainerDN = ("CN=Sites," + $configNCDN)
$siteDN = "CN=" + $siteName + "," + $siteContainerDN
$siteObj = Get-ADObject -Identity $siteDN -properties "siteObjectBL", "description", "location"
foreach ($subnetDN in $siteObj.siteObjectBL) {
    Get-ADObject -Identity $subnetDN -properties "siteObject", "description", "location"
}
---------------------------------------------------------------------------------
function CreateSite( $strSiteName )
{
    $strSiteRDN = "cn=$strSiteName"
     
    $ADS_PROPERTY_UPDATE = 3
     
    $strConfigurationNC = ([ADSI]"LDAP://RootDSE").configurationNamingContext
    $objSitesContainer = ([ADSI]"LDAP://cn=Sites,$strConfigurationNC")
     
    $objSite = $objSitesContainer.Create("site", $strSiteRDN)
    $objSite.SetInfo()
     
    $objLicensingSiteSettings = $objSite.Create("licensingSiteSettings", "cn=Licensing Site Settings")
    $objLicensingSiteSettings.SetInfo()
 
    $objNtdsSiteSettings = $objSite.Create("nTDSSiteSettings", "cn=NTDS Site Settings")
    $objNtdsSiteSettings.SetInfo()
 
    $objServersContainer = $objSite.Create("serversContainer", "cn=Servers")
    $objServersContainer.SetInfo()
}
0
Comment
Question by:jeppolito
  • 9
  • 9
20 Comments
 
LVL 27

Accepted Solution

by:
KenMcF earned 500 total points
ID: 34240179
What does you CSV file look like. I would make it the full Distinguished name of the site and subnet then you could do sometghing like this. This has not been tested so test first.

To get all the sites and subnets you could use this
get-adobject -searchbase "CN=Sites,CN=Configuration,DC=Domain,DC=Local" | where {$_.objectclass -eq "Subnet"} | select DistinguishedName

get-adobject -searchbase "CN=Sites,CN=Configuration,DC=Domain,DC=Local" | where {$_.objectclass -eq "Site"} | select DistinguishedName

------CSV FILE----------
Site,Subnet
"CN=SITE1,CN=Sites,CN=Configuration,DC=Domain,DC=Local","CN=10.1.1.0/24,CN=Subnets,CN=Sites,CN=Configuration,DC=Domain,DC=Local"


$newsubs = import-csv C:\newsubs.csv
Foreach($sub in $newsubs){
get-adobject $sub.subnet -properties * | set-adobject -replace @{siteobject=$sub.site}
}
0
 

Author Comment

by:jeppolito
ID: 34241563
Thanks...I am swamped right now but will answer you as soon as I can. thanks again
                                                                        James
0
 

Author Comment

by:jeppolito
ID: 34242259
OK...my CSV has all of my DHCP scopes (subnets) in one column and their respective site in the second column and descriptions in the third column
0
 
LVL 27

Expert Comment

by:KenMcF
ID: 34242312
What is the format, can you post an example?

Are the subnets already defined in AD or do they need created?
0
 

Author Comment

by:jeppolito
ID: 34242669
All the subnets have been created in DHCP already

CSV Example
Column 1           Column 2           Column 3
Subnet              Site                    Description
10.10.1.X          Hulen                 Hulen North Tower, 4th Floor
10.10.2.X          RC                     1200 Campus Dr.
0
 
LVL 27

Expert Comment

by:KenMcF
ID: 34242899
ok, so they have not been created in AD then?

are all your subnets the same, for example all /24?

If not you will need to change your csv file to this format
10.10.1.0/24
172.16.30.0/23
0
 

Author Comment

by:jeppolito
ID: 34257410
First, thank you very much for your time and effort, as well as, the education.  I have the subnet mask in a separate column for all the entries.  
0
 
LVL 27

Expert Comment

by:KenMcF
ID: 34257518
What masks do you use? Are they all class C 255.255.255.0 or do you have many different ones?
0
 

Author Comment

by:jeppolito
ID: 34259161
There are 1150 subnets; 2 are class B and the rest are class C.
0
Free Trending Threat Insights Every Day

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

 
LVL 27

Assisted Solution

by:KenMcF
KenMcF earned 500 total points
ID: 34259933
Try this

I have the settings so the heading on the CSV should be

Network,Site,Description,subnet
192.168.1.0,Site1,Site1,255.255.255.0
172.16.20.0,Site2,Site2,255.255.0.0

Also change DC=DOMINA,DC=LOCAL
to your env.



Import-Module ActiveDirectory
$ips = import-csv C:\sites.csv
foreach ($IP in $ips){
If ($IP.subnet -eq "255.255.255.0"){
$mask = "/24"}
Else {$mask = "/16"}
New-ADObject -Name "$($IP.Site)" -Type site -Description "$($IP.description)" -Path "CN=Sites,CN=Configuration,DC=DOMAIN,DC=LOCAL"
New-ADObject -Name "$($IP.Network)$Mask" -Type subnet -Description "$($IP.Subnet)/$($IP.Mask)" -OtherAttributes @{siteObject="CN=$($IP.SITE),CN=Sites,CN=Configuration,DC=DOMAIN,DC=LOCAL"} -Path "CN=Subnets,CN=Sites,CN=Configuration,DC=HOMEAD,DC=LOCAL"
}

Open in new window

0
 

Author Comment

by:jeppolito
ID: 34260797
I have attached abridged copies of my files for you to look at. The first is the ".CSV" I am working from for this import. The second file is the Powershell script (you need to change the extension from DOC to PS1) which I changed my domain name.  Our domain is listed in the script as MXXXXXXXC.local"

The only thing I am unclear about is 192.168.1.0,Site1,Site1,255.255.255.0
172.16.20.0,Site2,Site2,255.255.0.0 AD-site-import-abridged.doc sites-abridged.csv
0
 

Author Comment

by:jeppolito
ID: 34260874
One more thing caught my attention. In the script you have, "CN=Subnets,CN=Sites,CN=Configuration,DC=HOMEAD,DC=LOCAL" What is "HOMEAD"?
If I look at the configuration container in ADSIEdit it reads...CN=Configuration,DC=mXXXXXXc,DC=local
0
 
LVL 27

Expert Comment

by:KenMcF
ID: 34260895
That should be good. One thing you will need to change in your csv file. I noticed one subnet had a * at the end, this should be removed or it will give an error.
I would either run this in your DEV env or add only a few lines to your CSV and test.
0
 
LVL 27

Expert Comment

by:KenMcF
ID: 34260903
HomeAD is my LAB, I tested the script before posting.
0
 

Author Comment

by:jeppolito
ID: 34261781
Ken thank you again for the help and the lesson...I learned a lot just by reviewing the script...hopefully I will be able to provide the same help to someone else in the near future...James
0
 
LVL 27

Expert Comment

by:KenMcF
ID: 34261992
Glad I could help, let me know if you have any other questions or problems with this.
0
 

Author Comment

by:jeppolito
ID: 34267025
Good morning Ken,
    I do have a few questions before I test it in Development this morning.  
1.   In the script you have, "CN=Subnets,CN=Sites,CN=Configuration,DC=HOMEAD,DC=LOCAL"   What is "HOMEAD"? And does this need to be changed?
2.   I noticed there is no path to the Sites.Csv file. Should it reside in the same folder as the script or in the the root of C:?
3.   Since you are importing the AD Module I assume the script needs to be run on a domain controller (Win2k8)?
4.   If I want to add information to the location field how would I go about this? I assume I could modify the line of script below and add the "Location" field schema name. However I have not found it  as yet.
New-ADObject -Name "$($IP.Site)" -Type site -Description "$($IP.description)" -Path "CN=Sites,CN=Configuration,DC=DOMAIN,DC=LOCAL"
0
 
LVL 27

Assisted Solution

by:KenMcF
KenMcF earned 500 total points
ID: 34267161
Change HOMEAD to match your environment, that is my lab.

for the sites.csv just change the path to where it is located. I just used the root of C for testing.

You can run this on any R2 or Win7 computer that has the RSAT installed and the proper rights to and sites and subnets.

For location you can add the heading to your CSV and do this

-otherattributes @{'location'=$($IP.location)}
0
 
LVL 70

Expert Comment

by:Chris Dent
ID: 34497726
This question has been classified as abandoned and is being closed as part of the Cleanup Program.  See my comment at the end of the question for more details.
0

Featured Post

How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

Join & Write a Comment

In this article, we will see the basic design consideration while designing a Multi-tenant web application in a simple manner. Though, many frameworks are available in the market to develop a multi - tenant application, but do they provide data, cod…
Synchronize a new Active Directory domain with an existing Office 365 tenant
This tutorial will walk an individual through the steps necessary to join and promote the first Windows Server 2012 domain controller into an Active Directory environment running on Windows Server 2008. Determine the location of the FSMO roles by lo…
This tutorial will walk an individual through the process of transferring the five major, necessary Active Directory Roles, commonly referred to as the FSMO roles to another domain controller. Log onto the new domain controller with a user account t…

758 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now