2013-05-07 50 views
0

我正在嘗試編寫一個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 ​​呼應%USERNAME%給出了在最後一個$的服務器的名稱。

知道批處理腳本是否在系統用戶上運行的最佳方法是什麼? 也許有更好的選擇來實現呢?

謝謝

+1

'正在運行sy幹用戶'你的意思是在高架的命令行嗎? – Endoro 2013-05-07 15:28:51

+0

當'psexec -s'已經作爲系統帳戶運行時,爲什麼你會經歷所有這些麻煩?似乎對我來說是多餘的。 – 2013-05-07 15:42:03

+0

我不想強制用戶在批處理文件調用前鍵入psexec -s。用戶將以管理員身份運行該批處理文件。我只需要知道如何檢查批處理文件是否作爲系統運行。 – 2013-05-07 15:49:44

回答

0

如果你的意思是具有管理員權限運行,您可以用這樣的檢查:

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,但...

相關問題