使用SendKeys运行powershell脚本并获取访问权限的计划任务被拒绝

使用SendKeys运行powershell脚本并获取访问权限的计划任务被拒绝,powershell,scheduled-tasks,Powershell,Scheduled Tasks,我有一个计划任务,它运行一个带有脚本的power shell控制台窗口(脚本始终从具有该计划任务的计算机运行,因此没有远程任务调用),其中包含: Add-Type -AssemblyName System.Windows.Forms [System.Windows.Forms.SendKeys]::SendWait('~'); 问题是,当我登录(远程或本地)时,它运行平稳(power shell控制台打开,过程运行,按键,过程完成),但当我注销时,脚本在power shell控制台窗口中引发异

我有一个计划任务,它运行一个带有脚本的power shell控制台窗口(脚本始终从具有该计划任务的计算机运行,因此没有远程任务调用),其中包含:

Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.SendKeys]::SendWait('~');
问题是,当我登录(远程或本地)时,它运行平稳(power shell控制台打开,过程运行,按键,过程完成),但当我注销时,脚本在power shell控制台窗口中引发异常:

Exception calling "SendWait" with "1" argument(s): "Access is denied"
At C:\Testing\Powershell\PageFeature.ps1:4 char:2
+  [System.Windows.Forms.SendKeys]::SendWait('~');
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : Win32Exception
我将任务设置为即使在注销时也使用凭据运行,并且仍然会在控制台窗口中收到消息

这其中的根本问题是什么?

不妨试试:

$obj = new-object -ComObject WScript.Shell
$obj.SendKeys("~")

我认为sendkeys需要一个活动的用户会话sendkeys发送窗口消息,如果您的会话未处于活动状态,那么它没有什么可发送的,为什么您要尝试将密钥发送到以太中?我认为还有另一种方法可以实现您的最终目标。按动按钮,但我认为它会错过打开的power shell控制台窗口,这是否可以附加到某个进程?为什么要使用presKey,是否可以发送完整脚本以及要实现的目标?IMO按键只能在交互式会话中使用。我需要按键,否则脚本将无法完成。Wojtek,如果没有脚本行为和代码的信息,很难提供帮助。如果您只需要按任意键关闭应用程序,那么是否值得终止该进程?