powershell脚本无法从批处理文件正常运行
我有一个功能强大的PowerShell脚本,它注册一个计时器对象,并每隔几分钟发送一个密钥powershell脚本无法从批处理文件正常运行,powershell,batch-file,Powershell,Batch File,我有一个功能强大的PowerShell脚本,它注册一个计时器对象,并每隔几分钟发送一个密钥 $wshell = New-Object -ComObject Wscript.Shell ... function fctName { param([ScriptBlock] $action) ... Register-ObjectEvent -InputObject $timer -EventName Elapsed -SourceIdentifier Time
$wshell = New-Object -ComObject Wscript.Shell
...
function fctName {
param([ScriptBlock] $action)
...
Register-ObjectEvent -InputObject $timer -EventName Elapsed -SourceIdentifier Timer.Elapsed -Action $action
}
fctName {
...
$wshell.sendkeys("{ESC}")
}
在Windows PowerShell中,该脚本工作正常,没有任何错误。
但是,我希望从批处理文件中运行它,在该文件中我只写了这一行:
Powershell.exe -noexit C:\...\ScriptName.ps1
不会抛出任何错误,但它不会执行我想要的操作,这是为了防止Windows处于空闲状态
因为I'-noexit'cmd窗口,我可以使用
Unregister-Event -SourceIdentifier Timer.Elapsed
它似乎在工作,因为只需输入两次就会出错
- 是否我的批处理文件需要不同的代码? 也许是“回声”之类的,我不太熟悉
- 我是否必须在Powershell中导入模块
var osh = new ActiveXObject("WScript.Shell")
WSH.Echo(
/cscript/i.test(WSH.FullName)
? 'Anti-idle running. Hit Ctrl-C to exit'
: "Anti-idle running.\nTo stop, use task manager to kill wscript.exe"
);
while (1) {
WSH.Sleep(120 * 1000);
osh.SendKeys("{SCROLLLOCK}{SCROLLLOCK}");
}
用.js
扩展名保存它,您可以双击它来启动它,或者通过cscript/nologo scriptfile.js
从cmd
控制台启动它
我认为切换Scroll Lock比发送Esc更有利,因为Esc可能会产生不必要的后果,这取决于SendKeys
行触发时哪个应用程序具有焦点
PowerShell是否有权访问Windows脚本主机方法,如
Sleep
?显然是这样。这可能比生成计时器更好。如果我的JScript代码本机不适合您的恶意目的,那么它至少适合作为PowerShell脚本的伪代码。我认为问题在于,计划任务与登录用户所在的会话/上下文不同。发送密钥不会在实际用户会话中发送。真实情况。仅适用于SendKeys,例如[System.Windows.Forms.SendKeys]::SendWait(“{SCROLLLOCK}{SCROLLLOCK}”)和循环中PowerShell中的启动睡眠函数。