我正在尝试在从任务计划程序 (TS) 启动的 PowerShell (PS) 脚本中运行 .exe。该 .exe 未执行,尽管它上市在 Get-Process 中。
如果我从 PS 窗口手动运行脚本,.exe 就会运行,并且它也会列在 Get-Process 中。
不过还是有区别的 - 在 Get-Process 标头中有一列“SI”,工作实例的值为“1”。非工作实例的值为“0”。我在互联网上没有看到任何地方提到“SI”。
我尝试了几种类型的 .exe 调用,它们都以相同的方式工作(失败),例如和Start-Process
。在所有尝试中,.exe 也都使用(和不使用)运行过。&
Invoke-Expression
-verb runas
我相信,手动操作时,它会获取管理窗口权限并按设计运行,但使用任务计划程序时,即使任务以“最高权限”运行,它的权限也会较低。或者,这是特殊处理,以防止从脚本执行恶意代码 - 这正是它的行为方式。
从 Explorer 手动启动 .exe 也可以正常工作。
我迷失在本地策略、组策略、UAC 以及以授予的权限或用户运行此 .exe 中,所以我没有随意更改任何这些(并打开广泛的漏洞)。
非常感谢您的帮助。谢谢。
Win10 专业版,PowerShell v5
答案1
SI 是会话 ID。
会话 ID 0 为非交互式& 由系统服务使用。此会话中的可执行文件不会显示在用户 GUI 中。
普通用户可以使用会话 ID 1(或更高),并且通常是交互的,因此用户可以在用户 GUI 中看到可执行文件。
在您的情况下,二进制文件在会话 ID 0 中执行,因此对用户不可见,尽管 get_Process , tasklist , task-manager 等会列出它。