【问题标题】:Creating a batch script to open a file that prompts for username and password?创建一个批处理脚本来打开一个提示输入用户名和密码的文件?
【发布时间】:2013-06-18 19:28:08
【问题描述】:

我的工作地点有一个本地网站,其中有一些链接需要管理员权限才能打开。我想知道是否有办法创建一个批处理文件来做到这一点?

最终用户拥有管理员帐户,但我希望在单击链接时会提示输入用户名和密码。这可能吗?

我有一个临时解决方案是: START %windir%\system32\runas.exe /user:EMEA\ACCOUNTNAME-%USERNAME% "mmc %windir%\system32\dsa.msc"

例如,这将打开 AD,并且始终以 EMEA\ACCOUNTNAME-%USERNAME% 的身份运行。这也提示输入一个完美的密码。它只有一个缺陷 - 仅限于 ACCOUNTNAME!团队的新成员有不同的帐户名称,因此无法识别密码,因为帐户名称不正确。

例如,我的帐户名称是“ACCOUNTNAME”,所以我单击该链接,它会打开一个 DOS 窗口并显示“输入 EMEA\ACCOUNTNAME-%MyUserName% 的密码”。这对我来说很好,但是拥有不同 AccountName 的人呢?

注意事项:该站点只是基本站点,没有登录选项,因此无法以这种方式解决此问题。

【问题讨论】:

  • 你为什么不使用/user:%userdomain%\%username%。您希望批处理文件从网站提供,还是批处理文件在本地并运行 http 请求?
  • 从网站提供批处理文件。因此,在这种情况下,无论用户单击链接打开 AD,都会提示运行或保存。通常选择运行,然后要求用户输入用户名,并根据他们输入的任何用户名输入密码。请参阅我发布的以下答案! :)

标签: windows batch-file


【解决方案1】:

经过一番思考,我想出了答案。

下面是打开 Active Directory 的答案:

@echo off
set var=Please Enter the Account name you use here:
set /p USERID= %var%
START %windir%\system32\runas.exe /user:%USERID% "mmc %windir%\system32\dsa.msc"

所以基本上,无论输入是什么,并将其存储在“var”中。然后“set /p”接受用户输入,所以我们将该变量设置为等于var。 (USERID =%var%)

使用用户输入的任何帐户名称启动您想要的任何应用程序(在本例中为 AD)!

【讨论】:

    【解决方案2】:
    :----------------------------------------------------------------------------------------------------------------------
    @echo off
    cls
    :init
    setlocal disabledelayedexpansion
    set "batchpath=%~0"
    for %%k in (%0) do set batchname=%%~nk
    set "vbsgetprivileges=%temp%\oegetpriv_%batchname%.vbs"
    setlocal enabledelayedexpansion
    :checkprivileges
    net file 1>nul 2>nul
    if '%errorlevel%' == '0' ( goto gotprivileges ) else ( goto getprivileges )
    :getprivileges
    if '%1'=='elev' (echo elev & shift /1 & goto gotprivileges)
    echo.
    echo set uac = createobject^("shell.application"^) > "%vbsgetprivileges%"
    echo args = "elev " >> "%vbsgetprivileges%"
    echo for each strarg in wscript.arguments >> "%vbsgetprivileges%"
    echo args = args ^& strarg ^& " "  >> "%vbsgetprivileges%"
    echo next >> "%vbsgetprivileges%"
    echo uac.shellexecute "!batchpath!", args, "", "runas", 1 >> "%vbsgetprivileges%"
    "%systemroot%\system32\wscript.exe" "%vbsgetprivileges%" %*
    exit /b
    :gotprivileges
    setlocal & pushd .
    cd /d %~dp0
    if '%1'=='elev' (del "%vbsgetprivileges%" 1>nul 2>nul  &  shift /1)
    :----------------------------------------------------------------------------------------------------------------------
    @echo off
    set var=Please Enter the Account name you use here:
    set /p USERID= %var%
    %windir%\system32\runas.exe /user:%USERID% "cmd /c mmc %windir%\system32\dsa.msc"
    ping 127.0.0.1
    taskkill /f /im cmd.exe
    exit /b n
    

    【讨论】:

    • 欢迎来到 SO 并感谢您的贡献!但是,如果您在脚本中提供了一些上下文,我认为您的回答会有所帮助。可能还有其他人发现这篇文章想要更好地了解它的使用方式和作用。
    猜你喜欢
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多