我有一个正常运行的PowerShell脚本,它注册一个计时器对象并每隔几分钟发送一次密钥。
$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 ISE中,脚本运行正常,没有任何错误。 但是,我很乐意从批处理文件中运行它,我只写了这一行:
Powershell.exe -noexit C:\...\ScriptName.ps1
不会抛出任何错误,但它没有按照我的意愿行事,这是为了防止Windows无所事事。
因为我'-noexit'是cmd窗口,我可以使用
轻松停止事件Unregister-Event -SourceIdentifier Timer.Elapsed
它似乎有效,因为只输入两次会引发错误。
答案 0 :(得分:1)
我对PowerShell不太满意,但在JScript中你可以使用这段代码:
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
扩展程序保存,您可以双击它以启动它,或通过cmd
从cscript /nologo scriptfile.js
控制台启动它。
我认为切换Scroll Lock比发送Esc更为温和,因为Esc可能会产生不必要的后果,具体取决于SendKeys
行触发时应用的焦点。
PowerShell是否可以访问Sleep
之类的Windows脚本宿主方法?显然是Start-Sleep。这可能比产生计时器更可取。希望如果我的JScript代码本身不适合您的恶意目的,它至少适合作为PowerShell脚本的伪代码。