如何使用powershell在远程计算机上获取Caps Lock状态
我尝试了以下命令,但只得到值如何使用powershell在远程计算机上获取Caps Lock状态,powershell,Powershell,我尝试了以下命令,但只得到值False: [Console]::CapsLock Invoke命令-ComputerName Server01-ScriptBlock{[console]::CapsLock} 当我在本地运行[console]::CapsLock时,该命令起作用 使用[控制台]:CapsLock 可以读取[控制台]:CapsLock属性以获取CapsLock是打开还是关闭($true或$false): 您还可以使用[控制台]:NumberLock检查NumLock的状态 使用
False
:
[Console]::CapsLock
Invoke命令-ComputerName Server01-ScriptBlock{[console]::CapsLock}
当我在本地运行[console]::CapsLock
时,该命令起作用 使用[控制台]:CapsLock
可以读取[控制台]:CapsLock
属性以获取CapsLock
是打开还是关闭($true
或$false
):
您还可以使用[控制台]:NumberLock
检查NumLock
的状态
使用MS-Word
远程会话似乎不会根据物理键盘是否打开或关闭来反映CapsLock
是否打开或关闭
我能够找到另一种方法,但我自己没有办法测试它,它需要安装Microsoft Word:
$word = New-Object -ComObject "Word.Application"
# Check CapsLock
$word.CapsLock
# Check NumLock
$word.NumLock
使用System.Windows.Forms
命名空间
第三种可能适合您需要的方法是使用System.Windows.Forms
命名空间来读取caps lock设置
# Make System.Windows.Forms available in Powershell
Add-Type -AssemblyName System.Windows.Forms
# Check CapsLock
[System.Windows.Forms.Control]::IsKeyLocked( 'CapsLock' )
# Check NumLock
[System.Windows.Forms.Control]::IsKeyLocked( 'NumLock' )
使用Win32 API
您还可以使用Win32 API检查状态:
# Compile some quick C# so we can `P/Invoke` to the native library
$signature = @"
[DllImport("USER32.dll")]
public static extern short GetKeyState(int nVirtKey);
"@
$Kernel32 = Add-Type -MemberDefinition $signature -Name Kernel32 -Namespace Win32 -Passthru
# Check CapsLock
[bool]( $Kernel32::GetKeyState(0x14) )
# Check NumLock
[bool]( $Kernel32::GetKeyState(0x90) )
0x14
是CapsLock
的密钥id,0x90
是NumLock
的密钥id,和
远程操作
我找不到任何可靠的远程方法,这是有意义的,因为CapsLock
是每会话设置,而不是系统范围的设置。即使有一种方法可以获取给定活动会话的CapsLock
状态,您也可以在一个远程系统上同时拥有多个用户会话,并且很难知道查看哪个会话的CapsLock
状态。使用[控制台]::CapsLock
可以读取[控制台]:CapsLock
属性以获取CapsLock
是打开还是关闭($true
或$false
):
您还可以使用[控制台]:NumberLock
检查NumLock
的状态
使用MS-Word
远程会话似乎不会根据物理键盘是否打开或关闭来反映CapsLock
是否打开或关闭
我能够找到另一种方法,但我自己没有办法测试它,它需要安装Microsoft Word:
$word = New-Object -ComObject "Word.Application"
# Check CapsLock
$word.CapsLock
# Check NumLock
$word.NumLock
使用System.Windows.Forms
命名空间
第三种可能适合您需要的方法是使用System.Windows.Forms
命名空间来读取caps lock设置
# Make System.Windows.Forms available in Powershell
Add-Type -AssemblyName System.Windows.Forms
# Check CapsLock
[System.Windows.Forms.Control]::IsKeyLocked( 'CapsLock' )
# Check NumLock
[System.Windows.Forms.Control]::IsKeyLocked( 'NumLock' )
使用Win32 API
您还可以使用Win32 API检查状态:
# Compile some quick C# so we can `P/Invoke` to the native library
$signature = @"
[DllImport("USER32.dll")]
public static extern short GetKeyState(int nVirtKey);
"@
$Kernel32 = Add-Type -MemberDefinition $signature -Name Kernel32 -Namespace Win32 -Passthru
# Check CapsLock
[bool]( $Kernel32::GetKeyState(0x14) )
# Check NumLock
[bool]( $Kernel32::GetKeyState(0x90) )
0x14
是CapsLock
的密钥id,0x90
是NumLock
的密钥id,和
远程操作
我找不到任何可靠的远程方法,这是有意义的,因为
CapsLock
是每会话设置,而不是系统范围的设置。即使假设有一种方法可以获取给定活动会话的CapsLock
状态,您也可以在一个远程系统上同时拥有多个用户会话,并且很难知道查看哪个会话的CapsLock
状态。呃,caps lock不是“系统范围”的设置-你到底想评估什么?我需要看看远程计算机的Capslock键是开着还是关着。我不必更改状态,我只需要验证capslock和numlock上的状态。是的,但这个问题没有意义-在连接了三个用户的终端服务器上,其中两个用户没有Caps Lock-应该[控制台]::CapsLock
return1/3
?正如Mathias指出的那样,这个问题没有多大意义。你到底想解决什么问题?出于我的目的,我只需要担心一个用户。呃,caps lock不是一个“系统范围”的设置-你到底想评估什么?我需要看看远程计算机的Capslock键是开着还是关着。我不必更改状态,我只需要验证capslock和numlock上的状态。是的,但这个问题没有意义-在连接了三个用户的终端服务器上,其中两个用户没有Caps Lock-应该[控制台]::CapsLock
return1/3
?正如Mathias指出的那样,这个问题没有多大意义。你到底想解决什么问题?出于我的目的,我只需要担心1个user.OP已经说过这不起作用(或者更确切地说,这不符合他们的期望):)也许我下次应该读这个问题,而不仅仅是标题:)是的,这给了我一个错误,即使远程计算机有Capslock,我也找不到任何其他检查caps lock或num lock状态的方法。。。。除非Microsoft Word是一个选项。上次我检查时,虚拟键盘状态是每个登录会话,而不是每个“物理计算机”:)OP已经说这不起作用(或者更确切地说,它不符合他们的期望):)也许我下次应该读这个问题,而不仅仅是标题:)是的,这给了我一个错误,即使远程计算机有Capslock,我也找不到任何其他检查caps lock或num lock状态的方法。。。。除非Microsoft Word是一个选项。上次我选中时,虚拟键盘状态是每个登录会话,而不是每个“物理计算机”: