在PowerShell脚本中运行quser.exe可以在IDE中运行,但不能作为服务运行

时间:2019-10-31 13:41:03

标签: powershell cmd windows-services windows-console

如果我在控制台窗口或ISE中运行以下代码段,则该代码段将按预期运行,并列出本地计算机上的活动用户会话:

(Invoke-Expression "$env:windir\system32\quser.exe") -replace '\s{2,}', ',' | ConvertFrom-Csv

不幸的是,这不是控制台应用程序,而是作为服务安装的PowerShell脚本。该服务作为LocalSystem(而不是LocalService)运行。服务尝试运行此代码时,它将输出以下错误:

The term 'C:\Windows\system32\quser.exe' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

我联系了Sapien支持人员,并被告知服务运行时没有配置文件,并且没有对系统文件夹的执行访问权限。您需要授予服务帐户对exe及其支持DLL的执行访问权限,并使用EXE的完整路径。

我已经证明(我认为)安全主体可以访问quser。我使用PSExen打开了以LocalSystem运行的PowerShell控制台,并成功运行了quser应用程序:

Running quser as NTAUTHORITY\LocalSystem

问题一定是我正在作为服务运行。有谁知道我如何在服务中访问/使用QUser?

我想真正的问题是,作为LocalSystem运行的服务如何执行系统文件夹中的应用程序?

1 个答案:

答案 0 :(得分:3)

我的猜测是,您用来将PowerShell脚本作为服务运行的任何工具都是32位的,并且quser.exe中没有C:\Windows\SysWOW64

在这种情况下,您可以通过运行C:\Windows\Sysnative\quser.exe(在文档中查看File System Redirector以获得详细信息)在64位操作系统上解决此问题。

如果是这样,我想说的是您得到的信息(“服务运行时没有配置文件,并且没有对系统文件夹的执行访问权限”)。