批处理脚本,如何知道我们正在系统用户上运行

时间:2013-05-07 13:37:08

标签: windows batch-file system

我正在尝试编写一个Windows批处理脚本,该脚本检测它是否在系统用户下运行以启动其他应用程序。应用程序需要作为系统运行。但启动它的批处理文件将由Admin用户调用。

以下是我现在所拥有的:

IF "%USERPROFILE:~-13%" == "systemprofile" (
    PUSHD "%~dp0\.."
    CALL "init some variables"
    CALL "my command" %*
    POPD
) ELSE (
    FOR %%X IN (psexec.exe) DO (SET FOUND=%%~$PATH:X)
    IF DEFINED FOUND (
        CALL psexec -s %0 %*
    ) ELSE (
        ECHO Must be run as user SYSTEM
        ECHO If psexec is in PATH, it will be automatically used.
    )
)

现在我检查%USERPROFILE%,但我想这是一个糟糕的方法。

使用 psexec -s 启动我的脚本时, echo%USERNAME%会在最后给出服务器的名称。

了解批处理脚本是否在系统用户上运行的最佳方法是什么? 也许有更好的替代方案来实现这一目标?

谢谢

1 个答案:

答案 0 :(得分:1)

如果您的意思是使用管理员权限运行,可以查看以下内容:

OPENFILES >nul 2>nul
   IF ERRORLEVEL 1 (
   COLOR CF
   ECHO.You must 'Run as administrator'
   PAUSE
   GOTO :eof
   )

请注意

2>nul is needed because 2012 Server and Windows 8 return ERRORLEVEL 0 but output "ERROR: Unable to retrieve data."

我不认为命令返回错误代码为0但仍然输出到STDERR是正确的,但是......