Skip to content

Instantly share code, notes, and snippets.

@dotps1
Last active August 29, 2015 14:02
Show Gist options
  • Select an option

  • Save dotps1/782e9d7fa50b84790341 to your computer and use it in GitHub Desktop.

Select an option

Save dotps1/782e9d7fa50b84790341 to your computer and use it in GitHub Desktop.
<#
.SYNOPSIS
Renames a Domain Computer to its Serial Number.
.DESCRIPTION
Connects to the Win32_Bios Wmi Class and retrieves the Serial Number, if the existing computer name does not match the serial number, it will be renamed.
.EXAMPLE
Reanme-DomainComputerToSerialNumber -ComputerName "MyComputer.mydomain.org" -Restart
.EXAMPLE
$cred = Get-Credential; @("ComputerA","ComputerB","ComputerC") | Reanme-DomainComputerToSerialNumber -DomainCredential $cred -Restart
.NOTES
Requires PowerShell V3.
.LINK
http://dotps1.github.io
#>
function Rename-DomainComputerToSerialNumber
{
[CmdletBinding()]
[OutputType([Void])]
Param
(
# ComputerName, Type String, Computer Name(s) to be renamed to serialnumber.
[Parameter(Mandatory = $true,
Position = 0,
ValueFromPipeline = $true)]
[ValidateScript({ if (-not (Test-Connection -ComputerName $_ -Quiet -Count 2)) { throw "Failed to connect to $_. Please ensure the system is available." } else { $true } })]
[String]
$ComputerName,
# DomainCredential, Type PSCredential, Domain Credentials to use that has administrative rights to make the change.
[Parameter(Position = 1)]
[PSCredential]
$DomainCredential,
# Restart, Type Switch, Forces a reboot if used.
[Parameter(Position = 2)]
[Switch]
$Restart
)
Begin
{
if (-not ($PSBoundParameters.ContainsValue($DomainCredential)))
{
$DomainCredential = Get-Credential
}
}
Process
{
try
{
$getwmiobjectParams = @{
Class = 'Win32_Bios'
Namespace = 'root\CIMV2'
ComputerName = $ComputerName
Property = 'SerialNumber'
ErrorAction = 'Stop'
Credential = $DomainCredential
}
if ($ComputerName -eq $env:COMPUTERNAME)
{
$getwmiobjectParams.Remove('Credential')
}
$serialNumber = (Get-WmiObject @getwmiobjectParams).SerialNumber
}
catch
{
Write-Error $Error[0].Exception.Message
}
if ($ComputerName -ne $serialNumber)
{
$renamecomputerParams = @{
ComputerName = $ComputerName
NewName = $serialNumber
Force = $true
ErrorAction = 'Stop'
DomainCredential = $DomainCredential
PassThru = $true
}
switch ($Restart)
{
$true { $renamecomputerParams.Add('Restart',$true) }
$false { $renamecomputerParams.Add('Restart',$false) }
}
try
{
Rename-Computer @renamecomputerParams
}
catch
{
Write-Error $Error[0].Exception.Message
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment