我们正在使用Windows控制台程序subinacl.exe授予用户停止和启动服务的权利。在使用以下命令之前:

subinacl.exe /service %SERVICE_NAME% /grant=%PC_NAME%\%USER_NAME%=PTO

在哪里?
%SERVICE_NAME%=服务的名称
%PC_NAME%=计算机的名称
%USER_NAME%=应该成为启动和停止服务的权限的用户的名称
pto=启动和停止服务的权限(r将只是读数)
在Windows Server 2012上的默认Windows命令行(具有管理员权限)中键入命令时,结果是:
ELITE_INETRSVSERVER : delete Perm. ACE 4 test-pc\test
ELITE_INETRSVSERVER : new ace for test-pc\test
ELITE_INETRSVSERVER : 2 change(s)


Elapsed Time: 00 00:00:00
Done:        1, Modified        1, Failed        0, Syntax errors        0
Last Done  : ELITE_INETRSVSERVER

现在我们想把文本保存到一个文件中,或者把它放到一个程序中(通过重定向输出:Getting output from a shell/dos app into a Delphi app)。我们需要在结果中找到done和failed的整数值。
问题是,空行之后的最后三行我们抓不到。
使用控制台重定向时,前三行可以在文件result.txt中找到。但最后三个显示在控制台中。
subinacl.exe /service %SERVICE_NAME% /grant=%PC_NAME%\%USER_NAME%=PTO > result.txt 1<&2

当以编程方式重定向输出时,我们也遇到了同样的问题。
当然,每个命令都是作为管理员执行的。

最佳答案

选项/errorlog可以帮助解决问题:

subinacl /outputlog=c:\NONERRORS.TXT /errorlog=C:\ERRORLOG.TXT /file C:\TEST.TXT /display

如果c:\ errorlog.txt文件为空,则表示命令已成功执行。

09-10 09:41
查看更多