GCE Windows startup scripts & naming

427 views Asked by At

Linux admin pulling out what hair I have left trying to figure out startup scripts for Windows on GCE.

The way I've approached it is the following;

  1. Create a "runonce" script by editing the registry on the "master" image.
  2. Said script does the following; -

    • Does a reverse DNS lookup of it's own IP to get the hostname DNS thinks it is and then sets the local hostname to that
    • Joins the domain
    • Adds a domain user as autologin (I need this for various reasons)
  3. I GCESysprep the machine

  4. Take an image of the machine after sysprep and make a group template from that

My main issue I'm having is that it's not working at all :) The machines come up, run the script and reboot but god knows what state they're in after they come back, I can't login, reset the password/do anything.

I think ideally what I'd like to do is figure out the best way of doing this, do I host the script in GCE Storage and mark it a startup script in the GCE Console opposed to the registry setting? Is there a better way of renaming the machines?

Here's the script if you're interested;

If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))

{   
$arguments = "& '" + $myinvocation.mycommand.definition + "'"
Start-Process powershell -Verb runAs -ArgumentList $arguments
Break
}

$ipAddresses = (get-netadapter | get-netipaddress | ? addressfamily -
eq 'IPv4').ipaddress
# Filter out any 192.168 172. 10. IP addresses
$ipAddress = $ipAddresses -like "123*"
# Retrieve the hostname from the ??? DNS Server
$fqdn = (nslookup $ipAddresses | sls name | select -last 
1).toString().split(":")[1].trim()
# We only need the hostname without the domain info so split it up
$fqdn_items = $fqdn.split(".")
$newComputerName = $fqdn_items[0]
Write-Host "New Computer Name: $newComputerName"
# Get a WMI object representing the current computer
$currentComputer = Get-WmiObject Win32_ComputerSystem
Write-Host "Attempting to change computer name to $newComputerName"
# Set the Computer Name to the hostname found via DNS Lookup to DNS 
Server
# This can only be performed before joining the domain otherwise you 
get return code 1326
$currentComputer.Rename($newComputerName)

#SET CREDENTIALS
$domain = “mydomain”
$password = “password” | ConvertTo-SecureString -asPlainText -Force
$username = "$domain\joinuser” 
$credential = New-Object 
System.Management.Automation.PSCredential($username,$password)


# RENAME THE COMPUTER
Rename-Computer -ComputerName (hostname) -NewName $newComputerName -
LocalCredential $credentiallocal

sleep 100

# JOIN THE DOMAIN
Add-Computer -DomainName $domain -Credential $credential -force 

# CONFIGURE AUTOLOGIN
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows 
NT\CurrentVersion\Winlogon' -Name AutoAdminLogon -Value 1
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows 
NT\CurrentVersion\Winlogon' -Name DefaultUserName -Value 
“mydomain\dr-worker"
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows 
NT\CurrentVersion\Winlogon' -Name DefaultPassword -Value mypassword

restart 
0

There are 0 answers