【问题标题】:Batch script, how to know we are running on system user批处理脚本,如何知道我们在系统用户上运行
【发布时间】:2013-05-07 13:37:07
【问题描述】:

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

这是我现在拥有的:

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% 给出的服务器名称以 $ 结尾。

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

谢谢

【问题讨论】:

  • running on system user 你的意思是在提升的命令行中吗?
  • psexec -s 已经作为系统帐户运行时,你为什么还要经历这些麻烦。对我来说似乎是多余的。
  • 我不想强迫用户在批处理文件调用前键入 psexec -s。用户将以管理员身份运行批处理文件。我只需要知道如何检查批处理文件是否作为系统运行。
  • 为什么用户需要使用psexec 运行批处理文件?只需在调用另一个批处理文件的批处理文件中使用psexec
  • @Matt 我不知道用户在 PATH 中是否有 psexec。我会尽量澄清这个问题。

标签: windows batch-file system


【解决方案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是不对的,但是...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-15
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    相关资源
    最近更新 更多