Keyboard filter

This one is pretty straightforward. This filter is used to prevent keys such as PrtScrn and combinations such as Ctrl + Alt + Delete from doing their normal functions. For managed workstations or stations that may be in unknown peoples' hands (think kiosks at airports, ATMs, medical devices, and so on), this is a great way to lock them down to prevent tampering.

A sample PowerShell script to modify the behavior of keys is included here:

#
# Copyright (C) Microsoft. All rights reserved.
#
<#
.Synopsis
This script shows how to use the built in WMI providers to enable and add
keyboard filter rules through Windows PowerShell on the local computer.
.Parameter ComputerName
Optional parameter to specify a remote machine that this script should
manage. If not specified, the script will execute all WMI operations
locally.
#>
param (
[String] $ComputerName
)

$CommonParams = @{"namespace"="root\standardcimv2\embedded"}
$CommonParams += $PSBoundParameters

function Enable-Predefined-Key($Id) {
<#
.Synopsis
Toggle on a Predefined Key keyboard filter Rule
.Description
Use Get-WMIObject to enumerate all WEKF_PredefinedKey instances,
filter against key value "Id", and set that instance's "Enabled"
property to 1/true.
.Example
Enable-Predefined-Key "Ctrl+Alt+Delete"

Enable CAD filtering
#>

$predefined = Get-WMIObject -class WEKF_PredefinedKey @CommonParams |
where {
$_.Id -eq "$Id"
};

if ($predefined) {
$predefined.Enabled = 1;
$predefined.Put() | Out-Null;
Write-Host Enabled $Id
} else {
Write-Error “$Id is not a valid predefined key”
}
}


function Enable-Custom-Key($Id) {
<#
.Synopsis
Toggle on a Custom Key keyboard filter Rule
.Description
Use Get-WMIObject to enumerate all WEKF_CustomKey instances,
filter against key value "Id", and set that instance's "Enabled"
property to 1/true.

In the case that the Custom instance does not exist, add a new
instance of WEKF_CustomKey using Set-WMIInstance.
.Example
Enable-Custom-Key "Ctrl+V"

Enable filtering of the Ctrl + V sequence.
#>

$custom = Get-WMIObject -class WEKF_CustomKey @CommonParams |
where {
$_.Id -eq "$Id"
};

if ($custom) {
# Rule exists. Just enable it.
$custom.Enabled = 1;
$custom.Put() | Out-Null;
"Enabled Custom Filter $Id.";

} else {
Set-WMIInstance -class WEKF_CustomKey -argument @{Id="$Id"} @CommonParams | Out-Null

"Added Custom Filter $Id.";
}
}

# Some example uses of the functions defined above.
Enable-Predefined-Key "Ctrl+Alt+Del"
Enable-Predefined-Key "Ctrl+Esc"
Enable-Custom-Key "Ctrl+V"