【问题标题】:How to get Caps Lock status on remote computer using powershell如何使用 powershell 在远程计算机上获取 Caps Lock 状态
【发布时间】:2019-11-12 16:05:06
【问题描述】:

我尝试了以下命令,但我只得到False的值:

Invoke-Command -ComputerName Server01  -ScriptBlock {[console]::CapsLock} 

当我在本地运行 [console]::CapsLock 时,该命令有效。

【问题讨论】:

  • 呃,大写锁定不是“系统范围”的设置 - 您究竟想在这里评估什么?
  • 我需要查看远程计算机是否打开或关闭了 Capslock 键。我不必更改状态,我只需要验证 capslock 和 numlock 上的状态。
  • 是的,但是这个问题没有意义 - 您对连接了三个用户的终端服务器有什么期望,其中两个用户没有打开大写锁定 - 应该[console]::CapsLock返回1/3?
  • 正如 Mathias 指出的那样——这个问题没有多大意义。你真正想解决什么问题?
  • 出于我的目的,我只需要担心 1 个用户。

标签: powershell


【解决方案1】:

使用[Console]::CapsLock

可以读取[Console]::CapsLock 属性以获取CapsLock 是打开还是关闭($true$false):

[Console]::CapsLock

您也可以使用[Console]::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 命名空间来读取大写锁定设置。

# 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) )

0x14CapsLock 的密钥 ID,0x90NumLock 的密钥 ID。 See this page for more information on making use of this API from .NETthis page for the documentation of GetKeyState itself

远程操作

我找不到任何可靠的远程执行此操作的方法,这是有道理的,因为CapsLock 是每个会话设置 - 而不是系统范围的设置。即使假设有一种方法可以获取给定活动会话的CapsLock 状态,您也可以同时在一个远程系统上拥有多个用户会话,并且很难知道要查看哪个会话来查看其CapsLock 状态。

【讨论】:

  • OP 已经说过这不起作用(或者更确切地说,它不符合他们的期望):)
  • 也许我下次应该阅读这个问题,而不仅仅是标题:)
  • 是的,即使远程计算机打开了 Capslock,这也会给我一个 False
  • 我没有找到任何其他方法来检查 caps lock 或 num lock 状态....除非 Microsoft Word 是一个选项。
  • 上次我检查过,虚拟键盘状态是每个登录会话,而不是每个“物理计算机”:)
猜你喜欢
  • 1970-01-01
  • 2021-02-22
  • 1970-01-01
  • 1970-01-01
  • 2011-08-15
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多