North East Bytes - a Microsoft technology usergroup in North East England.

Powered by Squarespace

« Using PowerShell to calculate vSphere 5 licenses | Main | Free PowerShell books »
Wednesday
Jul132011

Pre-staging Computers in Active Directory for WDS with PowerShell and Quest AD cmdlets

One of the most common issues when buidling computers with Windows Deployment Services (WDS, and RIS before that) are typos in the GUIDs used to net-boot the PCs. When you're entering them by hand as you pre-stage the computer objects in Active Directory it's very easy to make mistakes, especially when you're entering a lot of them. It's also extremely time consuming if you have to boot each machine to the point of PXE displaying the MAC and GUID - that's why the smart move is to request that information from the supplier, preferably before they deliver the machines.

Anyone who has pre-staged a computer object before will be aware of the jiggery-pokery that goes on with switching round the first half of the GUID, so that when you view it later in ADUC, you see something significantly different to what you typed in. It appear that this conversion is done by the GUI when you create the object, so when you're adding them programatically, you need to change the format yourself.

Microsoft published a VBScript function to reformat the GUIDs so they could be added to AD by a script, but I haven't seen similar in PowerShell, so here it is:

function flip-guid ([string]$g) {
    $g = $g.replace("-","").replace(" ","")
    -join $g.substring(0,16).tochararray()[6,7,4,5,2,3,0,1,10,11,8,9,14,15,12,13] + $g.substring(16,16)
}

The function takes the GUID as a string and first removes any dashes or spaces (since I've received them from suppliers with both at different times). Next it converts the first half into an array of characters, selects them back in the new order and uses the join operator to make them back into a string, to which it concatenates the second half, unchanged from the original. As with most things in PowerShell it could be reduced down to a single line, or expanded further to enhance readability.

So, given the ability now to change the format, I use Quest's AD cmdlets (if you haven't come across these before, take a look now!) to create the computer objects. Assuming that you have a CSV file containing the new PC's name and GUID, just do this...

Import-Csv newpcs.csv | foreach {
   New-QADComputer $_.name -ParentContainer "SomeOU" -ObjectAttributes @{netbootguid = ([guid](flip-guid $_.guid)).ToByteArray()}

That'll leave you with a load of new computer objects ready for WDS. :-)

NB. It's likely that the code snippets above have been wrapped to fit the page layout. In the function there are only two lines - everything from "-join" to the end is the same line. In the foreach scriptblock that's just a single line.

PrintView Printer Friendly Version

EmailEmail Article to Friend

References (7)

References allow you to track sources for this article, as well as articles that were written in response to this article.
  • Response
    Pre-staging Computers in Active Directory for WDS with PowerShell and Quest AD cmdlets - Blog - jonoble.com
  • Response
    Pre-staging Computers in Active Directory for WDS with PowerShell and Quest AD cmdlets - Blog - jonoble.com
  • Response
    Response: seven dollar click
    Pre-staging Computers in Active Directory for WDS with PowerShell and Quest AD cmdlets - Blog - jonoble.com
  • Response
    Response: seven dollar click
    Pre-staging Computers in Active Directory for WDS with PowerShell and Quest AD cmdlets - Blog - jonoble.com
  • Response
    Response: news
    Good Web-site, Continue the great job. Thanks a lot!
  • Response
    Response: worldwide
    Pre-staging Computers in Active Directory for WDS with PowerShell and Quest AD cmdlets - Blog - jonoble.com
  • Response
    Response: click her
    Pre-staging Computers in Active Directory for WDS with PowerShell and Quest AD cmdlets - Blog - jonoble.com

Reader Comments

There are no comments for this journal entry. To create a new comment, use the form below.

PostPost a New Comment

Enter your information below to add a new comment.

My response is on my own website »
Author Email (optional):
Author URL (optional):
Post:
 
Some HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>