[one-users] How config Windows vm template?

Vladimir Vuksan vlists at veus.hr
Fri Aug 5 07:23:46 PDT 2011


I ended up downloading a copy of Bash for Windows then invoking a context 
script like this

====================================================================

cd c:/

if [ -f c:/install_complete.txt ]; then
    exit 1
fi

source d:/context.sh

echo "Setting IP to $IP"
echo "Setting GATEWAY TO $GATEWAY"
echo "Setting NETMASK to $NETMASK"
echo "$COMPUTERNAME"

c:/windows/system32/netsh interface ip set address "Local Area Connection 
2" static $IP $NETMASK $GATEWAY 1 2>&1 > c:/install_complete.txt


c:/windows/system32/netsh interface show interface 2>&1 > 
c:/install_complete.txt

shutdown /f /r /t 0

======================================================================

I then added a batch script that I invoke at every boot that executes that 
bash script. Here is how to have scripts run at boot

http://www.tutorial5.com/content/view/157/47/


Script you posted. What kind of script is it :-) ? It may be perhaps 
better than my Bash script.

Hope it helps,

Vladimir

On Fri, 5 Aug 2011, André Monteiro wrote:

>  Hello,
>  
> I've been working in a windows script to contextualize VMs.
> By your experience, what's the best way to run the script automatically when creating a new instance? I can create it manually as a
> CD-ROM and run the windows7.one with the drive attached, but is there an automatic way?
>  
> ################### Windows context configuring script ###################
> ########### Created by andremonteiro at ua.pt and tsbatista at ua.pt ###########
>  
> [string]$computerName = "$env:computername"
> [string]$ConnectionString = "WinNT://$computerName"
> [string]$ipaddress = ""
> function getContext($file) {
>  $context = @{}
>  switch -regex -file $file {
>   '(.+)="(.+)"' {
>    $name,$value = $matches[1..2]
>    $context[$name] = $value
>   }
>  }
>  return $context
> }
> function addLocalUser($context) {
>     # Create new user
>  $username =  $context["username"]
>  $ADSI = [adsi]$ConnectionString
>  $user = $ADSI.Create("user",$userName)
>  $user.setPassword($context["user_password"])
>  $user.SetInfo()
>    
>     # Add user to local Administrators   
>     $groups = "Administrators", "Administradores"
>  
>     foreach ($grp in $groups) {
>     if([ADSI]::Exists("WinNT://$computerName/$grp,group")) { 
>   $group = [ADSI] "WinNT://$computerName/$grp,group"
>    $group.Add("WinNT://$computerName/$username")
>   }
>  }
> }
> function getIp($mac) {
>     $octet = $mac.Split(":")
>     [String] $ip = ""
>     $ip += [convert]::toint32($octet[2],16)
>     $ip += "."+[convert]::toint32($octet[3],16)
>     $ip += "."+[convert]::toint32($octet[4],16)
>     $ip += "."+[convert]::toint32($octet[5],16)
>     $ipaddress = $ip
>     return $ip
> }
> function getGateway($mac) {
>     $octet = $mac.Split(":")
>     [String] $ip = ""
>     $ip += [convert]::toint32($octet[2],16)
>     $ip += "."+[convert]::toint32($octet[3],16)
>     $ip += "."+[convert]::toint32($octet[4],16)
>     $ip += ".1"
>     return $ip
> }
> function configureNetwork($context) {
>     $Nics = Get-WMIObject Win32_NetworkAdapterConfiguration | where {$_.IPEnabled -eq "TRUE" -and ($_.MACAddress)}
>     foreach ($nic in $Nics) {
>         [String]$mac = $nic.MACAddress
>         [String]$ip = getIp($mac)
>         [String]$gw = getGateway($mac)
>         $nic.ReleaseDHCPLease()
>         $nic.EnableStatic($ip , "255.255.255.0")
>         $nic.SetGateways($gw)
>         $nic.SetDNSServerSearchOrder($gw)
>         $nic.SetDynamicDNSRegistration("FALSE")
>     }
> }
> function renameComputer($context) {
>     $ComputerInfo = Get-WmiObject -Class Win32_ComputerSystem 
>     $ComputerInfo.rename($context["HOSTNAME"]+$ipaddress.Split(".")[3])
> }
> function enableRemoteDesktop()
> {
>     #Get RDP parameters
>     #(Get-WmiObject -Class "Win32_TerminalServiceSetting" -Namespace root\cimv2\terminalservices).AllowTsConnections
>     #Set RDP state
>     #(Get-WmiObject -Class "Win32_TerminalServiceSetting" -Namespace root\cimv2\terminalservices).SetAllowTsConnections(1)
>     #Get RDP Required Authentication
>     #(Get-WmiObject -class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices -Filter
> "TerminalName='RDP-tcp'").UserAuthenticationRequired
>     #Set RDP Required Authentication
>     #(Get-WmiObject -class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices -Filter
> "TerminalName='RDP-tcp'").SetUserAuthenticationRequired(1)
>     $Terminal = (Get-WmiObject -Class "Win32_TerminalServiceSetting" -Namespace root\cimv2\terminalservices).SetAllowTsConnections(1)
>     return $Terminal
> }
> # Create folder Context if unexistant
> if( -not(Test-Path "c:\context\")) {
>  New-Item "c:\context\" -type directory
> }
> 
> # Execute the script
> if( -not(Test-Path "c:\context\contextualized") -and(Test-Path "D:\context.sh")) {
>     $context = @{}
>     $context = getContext('D:\context.sh')
>     Set-ExecutionPolicy unrestricted -force # not needed if already done once on the VM
>     addLocalUser($context)
>     configureNetwork($context)
>     renameComputer($context)
>     enableRemoteDesktop()
>     echo "contextualized" |Out-File ("c:\context\contextualized")
>     restart-computer
> }
> # remember to disable password complexity requirements in computer
> # management while rpeparing the cloud image!
> # Remember to run "Set-ExecutionPolicy bypass -force" before this!
> 
> --
> André Monteiro
> 
> 
> Carlos Martín Sánchez cmartin at opennebula.org
> Thu May 12 02:22:09 PDT 2011
>
>  *  Previous message: [one-users] How config Windows vm template?
>  *  Next message: [one-users] having a problem when shut down a VM
>  *  Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
> 
> _________________________________________________________________________________________________________________________________________
> 
> Hi there,
> 
> The contextualization offered by OpenNebula is creating that cdrom and
> context.sh script, but it's up to the guest OS to read that file and
> configure itself.
> 
> We only provide linux scripts; you would have to create similar ones. I'm
> not sure how difficult that can be since I don't have experience with
> Windows scripting.
> 
> 
> If you only need to configure the right IP for your VM, then you can try to
> configure a DHCP server in your network (it can be placed in a VM in the
> same VNet). This has been discussed in the list, hopefully these threads
> will help:
> 
> [1] http://www.mail-archive.com/users@lists.opennebula.org/msg01143.html
> [2] http://www.mail-archive.com/users@lists.opennebula.org/msg01395.html
> 
> Regards
> 
> --
> Carlos Martín, MSc
> Project Major Contributor
> OpenNebula - The Open Source Toolkit for Cloud Computing
> www.OpenNebula.org <http://www.opennebula.org/> | cmartin at opennebula.org
> 
> 
> 2011/5/6 ddd <xrchina2008 at 163.com>
> 
> >  hi,all
> >        now,my winxp vm is running.but,config's ip and hostname is not
> > right.
> >        now,windows vm's cd-rom is existing context.sh.
> >        This is my vm config file:
> >                 NAME=WinVista
> >                 CPU=1
> >                 MEMORY=1024
> >                 OS=[boot=hd]
> >                 DISK =[source="/root/images/winxp_test.img", clone=yes,
> > target=hda, readonly=no]
> >                 NIC=[network ="Small network"]
> >                 CONTEXT=[
> >                        hostname   = "$NAME$VMID",
> >                        ip_public  = "$NIC[IP, NETWORK=\"Small network\"]",
> >                        target     ="hdb"
> >                 ]
> >                 GRAPHICS =[type ="vnc",listen ="127.0.0.1", port = "1"]
> >        windows template  need config?how?
> >        Please help me.
> >                                                             ---Rong  Xiong
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > _______________________________________________
> > Users mailing list
> > Users at lists.opennebula.org
> > http://lists.opennebula.org/listinfo.cgi/users-opennebula.org
> >
> >
> 
> 
>


More information about the Users mailing list