Jump to content


coolslim54

SCCM OSD Computer Name Change

Recommended Posts

Currently running SCCM 1511 with MDT 2013 integrated. We are looking to refresh all machines (desktops and laptops) from Win 7 to Win 10. My MDT Task Sequence works well, but I'm looking for a way to change the first 3 characters of the computer names. We have a standard naming convention, Example: current name looks like TW7NSDA-002-0000. The TW7 reflects Win 7. Is there a simple script I can implement in the Task Sequence to change TW7 to TW10 so the new computer name would reflect TW10NSDA-002-0000? Thanks!

Share this post


Link to post
Share on other sites

This should work (I haven't tested it because im not at work atm)

$var = New-Object -ComObject Microsoft.SMS.TSEnvironment
$OSDComputerName = $var.Value("OSDComputerName")
$var.Value("OSDComputerName") = ($OSDComputerName).Replace("TW7", "TW10")

Share this post


Link to post
Share on other sites

It worked for me doing it during the task sequence. As YPCC said if you just run the script while in the OS then it wont work as the com object (Microsoft.SMS.TSEnvironment) wont be able to load. If you run it during the task sequence then it will work.

 

And make sure you running it as a PowerShell script during the task sequence.

Share this post


Link to post
Share on other sites

Tregelen,

 

If I wanted to add an additional line in the script to reflect laptops, could I just add the line at the end to look like this

 

  1. $var = New-Object -ComObject Microsoft.SMS.TSEnvironment
  2. $OSDComputerName = $var.Value("OSDComputerName")
  3. $var.Value("OSDComputerName") = ($OSDComputerName).Replace("TW7", "TW10")
  4. $var.Value("OSDComputerName") = ($OSDComputerName).Replace("LW7", "LW10")

Or would I need to add and elseif statement? I would think that it would ignore line 3, if nothing matches with what the script is looking for....

Share this post


Link to post
Share on other sites

That will work, or you could add in an additional .Replace on the same line. It technically wont skip that line, it will still run it it just doesnt find that string to replace.

$var = New-Object -ComObject Microsoft.SMS.TSEnvironment
$OSDComputerName = $var.Value("OSDComputerName")
$var.Value("OSDComputerName") = ($OSDComputerName).Replace("TW7", "TW10").Replace("LW7", "LW10")

Share this post


Link to post
Share on other sites

Try this

$var = New-Object -ComObject Microsoft.SMS.TSEnvironment
[regex]$pattern = "-"
$var.Value("OSDComputerName") = ($pattern.replace($var.Value("OSDComputerName"), "", 1)).Replace("TW7", "TW10").Replace("LW7", "LW10")

 

 

Share this post


Link to post
Share on other sites

That is interesting, it worked for me. Are you running it as 'Bypass' in the TS step?

Are you able to F8 and do the steps manually? I was just able to do the commands in my VM and it worked fine.

MachineRename.png.ebd69b81314e797fbbe9e14c3a624648.png

 

I will try it as a step instead of manually and see if I get the same result.

Share this post


Link to post
Share on other sites

I also tried the following and received the same error mentioned above in my task sequence:

$var = New-Object -ComObject Microsoft.SMS.TSEnvironment
[regex]$pattern = "-"
$OSDComputerName = $var.Value("OSDComputerName")
$var.Value("OSDComputerName") = ($pattern.replace($var.Value("OSDComputerName"), "", 1)).Replace("TW7", "TW10").Replace("LW7", "LW10")

Share this post


Link to post
Share on other sites

If you wish to rename prior to OSD within windows you could do it through WMIC command. This will allow you to remove the dashes as needed.

The only downside is that you will need to create a extensive batch file if a large amount of PCs needs to be changed, oldname and new desired name but with excel you can do this easily and export.

Syntax

WMIC ComputerSystem where Name="XX-XXX-PC01" call Rename Name="AABBB-PC01"

WMIC ComputerSystem where Name="XX-XXX-PC01" call Rename Name="BBCCC-PC01"

WMIC ComputerSystem where Name="XX-XXX-PC01" call Rename Name="CCDDD-PC01"

 

Create a package with batch file as above - create custom TS and copy script locally to all desired PCs from within the TS then use run command line to execute batch file locally at each PC and use an account that has domain rights to execute script in run command line. Place restart command in TS and then you could do another run command line to execute a DDR to update the CMDB with new names when the systems start backup from previous restart.

WMIC /namespace:\\root\ccm path sms_client CALL TriggerSchedule "{00000000-0000-0000-0000-000000000003}" /NOINTERACTIVE

execute a delay of a 2-3 minutes so that the systems has time to update information to site server after the DDR has executed and then do another restart to update the DNS records of each systems change if you want remote control to work immediately etc... You'll need to update the collections in the console after all is finished to reflect name changes.

Not the most convenient way of achieving this but will work - and works in windows which is a bonus.

 

 

Share this post


Link to post
Share on other sites
On 8/28/2016 at 7:14 PM, tregelen said:

This should work (I haven't tested it because im not at work atm)


$var = New-Object -ComObject Microsoft.SMS.TSEnvironment
$OSDComputerName = $var.Value("OSDComputerName")
$var.Value("OSDComputerName") = ($OSDComputerName).Replace("TW7", "TW10")

Hi i am trying to do this same tasks except for different computer names

 

i need help .. so am i taking the code below and creating a package w/ or without program? Do i save the code as .ps1 then in my TS I  add-->general-->Powershell Script? choose the package i created the script name below as .ps1 and choose bypass ?  in what stage of the TS do i run this as i cannot get it to work ?   Help would be greatly appreciated in getting this working.  Also is there another way i can create a program or package per se and then just deploy it to a Lab already in production that just needs thier names changed from like H206 to H205  the room number has changed in the computer names.

$var = New-Object -ComObject Microsoft.SMS.TSEnvironment
$OSDComputerName = $var.Value("OSDComputerName")
$var.Value("OSDComputerName") = ($OSDComputerName).Replace("TW7", "TW10")

Share this post


Link to post
Share on other sites
20 hours ago, djm1k0 said:

Hi i am trying to do this same tasks except for different computer names

 

i need help .. so am i taking the code below and creating a package w/ or without program? Do i save the code as .ps1 then in my TS I  add-->general-->Powershell Script? choose the package i created the script name below as .ps1 and choose bypass ?  in what stage of the TS do i run this as i cannot get it to work ?   Help would be greatly appreciated in getting this working.  Also is there another way i can create a program or package per se and then just deploy it to a Lab already in production that just needs thier names changed from like H206 to H205  the room number has changed in the computer names.


$var = New-Object -ComObject Microsoft.SMS.TSEnvironment
$OSDComputerName = $var.Value("OSDComputerName")
$var.Value("OSDComputerName") = ($OSDComputerName).Replace("TW7", "TW10")

I knew this was a super old post, but hoping to bring it back to life. BUMP

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...