使用 PowerShell 发送击键并在文本中包含百分号
Sending keystrokes with PowerShell and including a percent sign in the text
我有这么长的字符串,我需要按照我正在读取的文本文件中的显示准确发送 ($token = Get-Content $token_txt
)。这串字符中有几个百分号。它们需要包含在字符串中。每次我使用 wshell、VB 或 WASP 执行 SendKeys
时,它都会从文本中删除百分号和接下来的两个字符。我确信它认为它是一个特殊字符和一些击键命令或其他东西。如何让系统忽略百分号而不将其视为特殊字符?
这是我从文本文件中读取的字符串示例,并将其设置为变量 $token
:
YzY5FlNDItMjllctZjA4ZDVkNzUxNWM3LTE1MzMyMzMw%0AMTY2NDJ8VjBPd1BhT1JVSmtwWkxaZk1tRkNCbGNONzl5SndHb3YyQVZNVlNX%0AQWdMQT0%3D%0A
如您所见,令牌中有几个百分号,但这些需要完全按照所示发送。当我看到它被发送时,它就成功了
YzY5FlNDItMjllctZjA4ZDVkNzUxNWM3LTE1MzMyMzMwMTY2NDJ8VjBPd1BhT1JVSmtwWkxaZk1tRkNCbGNONzl5SndHb3YyQVZNVlNXQWdMQT0
就像我说的,我已经尝试过 wshell,VB,WASP 将所有密钥发送到 PuTTY window,但发送不正确。
如果我让它在 PowerShell 中显示变量 $token
,它会正确显示它并带有百分号。仅当我在删除特殊字符时发送密钥。
这是我试过的三种发送方式
$wshell = New-Object -ComObject wscript.shell;
$wshell.AppActivate('putty')
Sleep 1
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.SendKeys]::SendWait($token);
add-type -AssemblyName microsoft.VisualBasic
add-type -AssemblyName System.Windows.Forms
[Microsoft.VisualBasic.Interaction]::AppActivate("putty")
[System.Windows.Forms.SendKeys]::SendWait($token)
Select-Window putty | Send-Keys $token
Select-Window putty | Send-Keys "{ENTER}"
如有任何帮助,我们将不胜感激。
在 {} 中包含 % 似乎可以解决问题
[System.Windows.Forms.SendKeys]::SendWait("Test{%}Test");
The plus sign (+), caret (^), percent sign (%), tilde (~), and parentheses () have special meanings to SendKeys. To specify one of these characters, enclose it within braces ({}). For example, to specify the plus sign, use "{+}".
为您的 $token 添加替换方法
$token = $token.Replace("%","{%}")
我有这么长的字符串,我需要按照我正在读取的文本文件中的显示准确发送 ($token = Get-Content $token_txt
)。这串字符中有几个百分号。它们需要包含在字符串中。每次我使用 wshell、VB 或 WASP 执行 SendKeys
时,它都会从文本中删除百分号和接下来的两个字符。我确信它认为它是一个特殊字符和一些击键命令或其他东西。如何让系统忽略百分号而不将其视为特殊字符?
这是我从文本文件中读取的字符串示例,并将其设置为变量 $token
:
YzY5FlNDItMjllctZjA4ZDVkNzUxNWM3LTE1MzMyMzMw%0AMTY2NDJ8VjBPd1BhT1JVSmtwWkxaZk1tRkNCbGNONzl5SndHb3YyQVZNVlNX%0AQWdMQT0%3D%0A
如您所见,令牌中有几个百分号,但这些需要完全按照所示发送。当我看到它被发送时,它就成功了
YzY5FlNDItMjllctZjA4ZDVkNzUxNWM3LTE1MzMyMzMwMTY2NDJ8VjBPd1BhT1JVSmtwWkxaZk1tRkNCbGNONzl5SndHb3YyQVZNVlNXQWdMQT0
就像我说的,我已经尝试过 wshell,VB,WASP 将所有密钥发送到 PuTTY window,但发送不正确。
如果我让它在 PowerShell 中显示变量 $token
,它会正确显示它并带有百分号。仅当我在删除特殊字符时发送密钥。
这是我试过的三种发送方式
$wshell = New-Object -ComObject wscript.shell;
$wshell.AppActivate('putty')
Sleep 1
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.SendKeys]::SendWait($token);
add-type -AssemblyName microsoft.VisualBasic
add-type -AssemblyName System.Windows.Forms
[Microsoft.VisualBasic.Interaction]::AppActivate("putty")
[System.Windows.Forms.SendKeys]::SendWait($token)
Select-Window putty | Send-Keys $token
Select-Window putty | Send-Keys "{ENTER}"
如有任何帮助,我们将不胜感激。
在 {} 中包含 % 似乎可以解决问题
[System.Windows.Forms.SendKeys]::SendWait("Test{%}Test");
The plus sign (+), caret (^), percent sign (%), tilde (~), and parentheses () have special meanings to SendKeys. To specify one of these characters, enclose it within braces ({}). For example, to specify the plus sign, use "{+}".
为您的 $token 添加替换方法
$token = $token.Replace("%","{%}")