Skip to content

Commit a79019a

Browse files
VMworld 2018 PowerCLI Sendkeys Demo
1 parent 9741bc3 commit a79019a

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
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

Comments
 (0)