在Windows 8.1上,我有一个启动PowerShell脚本的服务。该服务在会话0隔离中作为“nt authority\system”运行。我从PowerShell派生的任何进程在会话0隔离中作为“nt authority\system”运行。
我需要在会话0之外的用户帐户下运行脚本,而不是在系统帐户下运行脚本。
Start-Process "$PsHome\PowerShell.exe" -Credential $pp -ArgumentList $script -wait
PsExec使用“-I 1”参数指定所需的会话。
& PsExec.exe "Install.bat" -i 1 -accepteula -u "domain\user" -p "awesomePassword" -w "startdir" -h
我试过设置“允许服务与桌面交互”。
当我尝试从PowerShell或C#服务启动该进程时,总是收到拒绝访问错误。
下面是一个示例异常,当我试图在服务上使用C#进行转义时。
System.ComponentModel.Win32Exception (0x80004005): Access is denied
at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
如何退出会话0?
我可以重写c#代码以不同的用户身份启动一个进程。或者我可以重写调用的PowerShell脚本以用户身份启动另一个进程。无论我尝试什么,我似乎都无法退出会话0。
1条答案
按热度按时间pdsfdshx1#
使用我找到的at code project的例子,我得到了一个部分的解决方案。上面链接中的例子将以运行“winlogon”进程的用户身份启动一个进程。为了以登录用户的身份启动一个进程,我只是将进程改为查找“explorer”。
下面是原始代码的一个片段
我只是改变了寻找探索者的过程。
现在,进程在会话3中以domain/me的身份启动,用户身份不是admin。
这种方法肯定会有问题,比如远程桌面,但对于我想要的,这最终会做到。
为了完整起见,下面是最后的代码,以防原始链接消失。
以下是如何启动它
代码如下