Change Win_Rename_Computer.ps1 community script to add domain joined computer rename functionality and refactor per standards.
-# Chanage the computer name in Windows
-# v1.0
-# First Command Parameter will be new computer name
-# Second Command Parameter if yes will auto-restart computer
-
-if ($Args.Count -eq 0) {
- Write-Output "Computer name arg is required"
- exit 1
+<#
+.SYNOPSIS
+ Rename computer.
+
+.DESCRIPTION
+ Rename domain and non domain joined computers.
+
+.PARAMETER NewName
+ Specifies the new computer name.
+
+.PARAMETER Username
+ Specifies the username with permission to rename a domain computer.
+ Required for domain joined computers.
+ Do not add the domain part like "Domain01\" to the username as that is already extracted and appended to the Rename-Computer cmdlet.
+
+.PARAMETER Password
+ Specifies the password for the username.
+ Required for domain joined computers.
+
+.PARAMETER Restart
+ Switch to force the computer to restart after a successful rename.
+
+.OUTPUTS
+ Results are printed to the console.
+
+.EXAMPLE
+ PS C:\> .\Win_Rename_Computer.ps1 -Username myuser -Password mypassword -NewName mynewname -Restart
+
+.NOTES
+ Change Log
+ V1.0 Initial release
+ V2.0 Added domain join
+#>
+
+param(
+ [string] $Username,
+ [string] $Password,
+ [switch] $Restart,
+ [string] $NewName
+)
+
+if (!$NewName){
+ Write-Host "-NewName parameter required."
+ Exit 1
}
-$param1=$args[0]
-$ToRestartTypeYes=$args[1]
+if ((Get-WmiObject win32_computersystem).partofdomain -eq $false) {
+ # Rename Non Domain Joined Computer
-Rename-Computer -newname "$param1"
+ if ($Restart) {
+ Rename-computer -NewName $NewName -Force -Restart
+ } else {
+ Rename-computer -NewName $NewName -Force
+ }
+ Write-Host "Attempted rename of computer to $NewName."
-# Restart the computer for rename to take effect
-if ($ToRestartTypeYes -eq 'yes') {
- Restart-Computer -Force
+}
+else {
+ # Rename Domain Joined Computer
+
+ if (!$Username){
+ Write-Host "-Username parameter required on domain joined computers."
+ Exit 1
+ }
+
+ if (!$Password){
+ Write-Host "-Password parameter required on domain joined computers."
+ Exit 1
+ }
+
+ $securePassword = ConvertTo-SecureString -string $Password -asPlainText -Force
+
+ $domainUsername = (Get-WmiObject Win32_ComputerSystem).Domain + "\$Username"
+
+ $credential = New-Object System.Management.Automation.PSCredential($domainUsername, $securePassword)
+
+ if ($Restart) {
+ Rename-computer -NewName $NewName -DomainCredential $credential -Force -Restart
+ } else {
+ Rename-computer -NewName $NewName -DomainCredential $credential -Force
+ }
+ Write-Host "Attempted rename of domain computer to $NewName."
}
\ No newline at end of file
