1
+ Function PlayGame {
2
+ param (
3
+ [Parameter (Mandatory = $true )][String ]$VMName ,
4
+ [Parameter (Mandatory = $false )][Boolean ]$ReturnCarriage ,
5
+ [Parameter (Mandatory = $false )][Boolean ]$DebugOn
6
+ )
7
+
8
+ # Map subset of USB HID keyboard scancodes
9
+ # https://gist.github.com/MightyPork/6da26e382a7ad91b5496ee55fdc73db2
10
+ $movements = @ {
11
+ ' LEFT' = ' 0x5c' ;
12
+ ' RIGHT' = ' 0x5e' ;
13
+ }
14
+
15
+ $vm = Get-View - ViewType VirtualMachine - Filter @ {" Name" = $VMName }
16
+
17
+ # Verify we have a VM or fail
18
+ if (! $vm ) {
19
+ Write-host " Unable to find VM $VMName "
20
+ return
21
+ }
22
+
23
+ # Start Game #
24
+
25
+ $hidCode = " 0x3b" # F2
26
+ $tmp = New-Object VMware.Vim.UsbScanCodeSpecKeyEvent
27
+ $modifer = New-Object Vmware.Vim.UsbScanCodeSpecModifierType
28
+ $modifer.LeftGui = $true
29
+ $tmp.Modifiers = $modifer
30
+ $hidCodeHexToInt = [Convert ]::ToInt64($hidCode , " 16" )
31
+ $hidCodeValue = ($hidCodeHexToInt -shl 16 ) -bor 0007
32
+ $tmp.UsbHidCode = $hidCodeValue
33
+ $hidCodesEvents += $tmp
34
+ $spec = New-Object Vmware.Vim.UsbScanCodeSpec
35
+ $spec.KeyEvents = $hidCodesEvents
36
+
37
+ Write-Host " "
38
+ [void ](Read-Host ' Press Enter to start playing game using the vSphere API …' )
39
+ $results = $vm.PutUsbScanCodes ($spec )
40
+
41
+ # Play Game #
42
+
43
+ $hidCodesEvents = @ ()
44
+ foreach ($count in 1 .. 500 ) {
45
+ $randomNumber = Get-Random - Maximum 3 - Minimum 1
46
+ if ($randomNumber -eq 1 ) {
47
+ $character = " LEFT"
48
+ } elseif ($randomNumber -eq 2 ) {
49
+ $character = " RIGHT"
50
+ } else {
51
+ $character = " DOWN"
52
+ }
53
+ $hidCode = $movements [[string ]$character ]
54
+ $tmp = New-Object VMware.Vim.UsbScanCodeSpecKeyEvent
55
+
56
+ # Convert to expected HID code format
57
+ $hidCodeHexToInt = [Convert ]::ToInt64($hidCode , " 16" )
58
+ $hidCodeValue = ($hidCodeHexToInt -shl 16 ) -bor 0007
59
+
60
+ $tmp.UsbHidCode = $hidCodeValue
61
+ $hidCodesEvents += $tmp
62
+
63
+ if ($DebugOn ) {
64
+ Write-Host " Character: $character -> HIDCode: $hidCode -> HIDCodeValue: $hidCodeValue "
65
+ }
66
+ # Call API to send keystrokes to VM
67
+ $spec = New-Object Vmware.Vim.UsbScanCodeSpec
68
+ $spec.KeyEvents = $hidCodesEvents
69
+ Write-Host
70
+ if ($randomNumber -eq 1 ) {
71
+ Write-Host - ForegroundColor Cyan " Sending $character key to $VMName "
72
+ } else {
73
+ Write-Host - ForegroundColor Green " Sending $character key to $VMName "
74
+ }
75
+ $results = $vm.PutUsbScanCodes ($spec )
76
+ Start-Sleep - Seconds 1
77
+ }
78
+ }
79
+
80
+ $vmName = " Windows10-VM-From-VMTX-Template"
81
+
82
+ PlayGame - VMName $vmName
0 commit comments