Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用powershell在远程计算机上获取Caps Lock状态_Powershell - Fatal编程技术网

如何使用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
return
1/3
?正如Mathias指出的那样,这个问题没有多大意义。你到底想解决什么问题?出于我的目的,我只需要担心一个用户。呃,caps lock不是一个“系统范围”的设置-你到底想评估什么?我需要看看远程计算机的Capslock键是开着还是关着。我不必更改状态,我只需要验证capslock和numlock上的状态。是的,但这个问题没有意义-在连接了三个用户的终端服务器上,其中两个用户没有Caps Lock-应该
[控制台]::CapsLock
return
1/3
?正如Mathias指出的那样,这个问题没有多大意义。你到底想解决什么问题?出于我的目的,我只需要担心1个user.OP已经说过这不起作用(或者更确切地说,这不符合他们的期望):)也许我下次应该读这个问题,而不仅仅是标题:)是的,这给了我一个错误,即使远程计算机有Capslock,我也找不到任何其他检查caps lock或num lock状态的方法。。。。除非Microsoft Word是一个选项。上次我检查时,虚拟键盘状态是每个登录会话,而不是每个“物理计算机”:)OP已经说这不起作用(或者更确切地说,它不符合他们的期望):)也许我下次应该读这个问题,而不仅仅是标题:)是的,这给了我一个错误,即使远程计算机有Capslock,我也找不到任何其他检查caps lock或num lock状态的方法。。。。除非Microsoft Word是一个选项。上次我选中时,虚拟键盘状态是每个登录会话,而不是每个“物理计算机”: