diff --git a/miscellaneous/context/windows/context/one-context.ps1 b/miscellaneous/context/windows/context/one-context.ps1
new file mode 100644
index 0000000..bfca96d
--- /dev/null
+++ b/miscellaneous/context/windows/context/one-context.ps1
@@ -0,0 +1,135 @@
+#################################################################
+##### Windows Powershell Script to configure OpenNebula VMs #####
+#####   Created by andremonteiro@ua.pt and tsbatista@ua.pt  #####
+#####        DETI/IEETA Universidade de Aveiro 2011         #####
+#################################################################
+
+Set-ExecutionPolicy unrestricted -force # not needed if already done once on the VM
+[string]$computerName = "$env:computername"
+[string]$ConnectionString = "WinNT://$computerName"
+[string]$username = "cloud"
+
+function getContext($file) {
+        $context = @{}
+        switch -regex -file $file {
+                '(.+)="(.+)"' {
+                        $name,$value = $matches[1..2]
+                        $context[$name] = $value
+                }
+        }
+        return $context
+}
+
+function addLocalUser($context) {
+
+    # Create new user
+        $ADSI = [adsi]$ConnectionString
+
+        if(!([ADSI]::Exists("WinNT://$computerName/$username"))) {  
+           $user = $ADSI.Create("user",$username)
+           $user.setPassword($context["USERPW"])
+           $user.SetInfo()
+        }
+        # Already exists, change password
+        else{
+        
+           $admin=[ADSI]("WinNT://$computerName/$username, user")
+           $admin.psbase.invoke("SetPassword", $context["USERPW"])
+        }
+    
+    # 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"
+                        if([ADSI]::Exists("WinNT://$computerName/$username")) {  
+                                $group.Add("WinNT://$computerName/$username")
+                        }
+                }
+        }
+}
+
+function renameComputer($context) {
+    $ComputerInfo = Get-WmiObject -Class Win32_ComputerSystem  
+    $ComputerInfo.rename($context["HOSTNAME"])
+}
+
+function enableipv6($context)
+{
+    $interface="BME"
+    $mac = (gwmi win32_NetworkAdapter -filter "NetConnectionID='BME'").MACAddress.split(':')
+    $a = [Convert]::ToInt32($mac[3], 16)
+    $b = [Convert]::ToInt32($mac[4], 16)
+    $c = [Convert]::ToInt32($mac[5], 16)
+    $ipv6="2001:738:2001:4031:{0}:{1}:{2}:0" -f $a, $b, $c
+    $gwv6="2001:738:2001:4031:{0}:{1}:{2}:0" -f $a, 255, 254
+
+    netsh interface ipv6 add address "$interface" "$ipv6/80"
+    netsh interface ipv6 add route ::/0 "$interface" "$gwv6"
+}
+
+function enableRemoteDesktop()
+{
+    # Windows 7 only - add firewall exception for RDP
+    netsh advfirewall Firewall set rule group="Remote Desktop" new enable=yes
+    
+    # Enable RDP
+    $Terminal = (Get-WmiObject -Class "Win32_TerminalServiceSetting" -Namespace root\cimv2\terminalservices).SetAllowTsConnections(1)
+    return $Terminal
+}
+
+function setacl($file)
+{
+    $userAccount = "\\someserver\auser"
+    $aclWork = (Get-Item $file).GetAccessControl("Access")
+    $netStuff = New-Object system.Security.AccessControl.FileSystemAccessRule($username, "FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
+    $aclWork.SetAccessrule($netStuff)
+    Set-ACL $file $aclWork
+}
+
+function storage($context)
+{
+    $smbpw = $context["SMBPW"]
+    $smbuser = $context["NEPTUN"]
+    $server = $context["SERVER"]
+    $smbpw = $smbpw -replace "`"", "\`""
+    mkdir c:\Windows\System32\Repl\Import\Scripts
+    net user $username /scriptpath:$username
+    echo "net use * /delete /yes `r`n timeout 10 `r`n net use z: \\$server\$smbuser `"$smbpw`" /user:$smbuser `r`n powershell Set-ItemProperty -Path 'HKCU:\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders' -Name Personal -Value Z:\" | Out-File -encoding ASCII ("c:\Windows\System32\Repl\Import\Scripts\$username.bat")
+    setacl("c:\Windows\System32\Repl\Import\Scripts")
+    if($context["RECONTEXT"] -eq "YES") {
+    
+        echo "del c:\Windows\System32\Repl\Import\Scripts\$username.bat `r`n net use z: /delete" | Out-File -encoding ASCII ("c:\context\logoff.bat")
+    } else {
+        echo " " | Out-File -encoding ASCII ("c:\context\logoff.bat")
+    }
+}
+
+function booturl($context)
+{
+    $token = $context["BOOTURL"]
+    (new-object System.Net.WebClient).DownloadFile( $token, "c:\context\booturl")
+}
+
+# If folder context doesn't exist create it
+if (-not (Test-Path "c:\context\")) {
+    New-Item "C:\context\" -type directory
+    }
+    
+# Execute script    
+if( -not(Test-Path "c:\context\contextualized") -and (Test-Path "D:\context.sh")) {
+    $context = @{} 
+    $context = getContext('D:\context.sh')
+
+    addLocalUser($context)
+#    renameComputer($context)
+    storage($context)
+    enableipv6($context)
+    enableRemoteDesktop
+    booturl($context)
+
+    if(-not($context["RECONTEXT"] -eq "YES")) {
+        echo "contextualized" |Out-File ("c:\context\contextualized")
+    }
+}
diff --git a/miscellaneous/context/windows/context/startup.vbs b/miscellaneous/context/windows/context/startup.vbs
new file mode 100644
index 0000000..ffc1d6e
--- /dev/null
+++ b/miscellaneous/context/windows/context/startup.vbs
@@ -0,0 +1,5 @@
+Set objShell = CreateObject("Wscript.Shell")
+objShell.Run("powershell -NonInteractive -NoProfile -NoLogo -ExecutionPolicy Unrestricted -file C:\context\one-context.ps1")
+Dim objFSO, objFolder
+Set objFSO = CreateObject("Scripting.FileSystemObject")
+Set objFolder = objFSO.CreateFolder("C:\context\executedVBScript")