我们正在使用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文件为空,则表示命令已成功执行。