我可以掩盖bat文件中的input文本吗?

我正在写一个batch file来执行一些其他程序。 在这种情况下,我需要提示input密码。 我有什么方法来掩盖input的文字。 我不需要打印*******字符而不是input字符。 Linux的密码提示行为(键入时不打印)就足够了。

@echo off SET /P variable=Password : echo %variable% Pause 

这将读取input,但我不能掩盖使用这种方法的文字。

到XP和Server 2003,你可以使用另一个包含的工具(VBScript) – 以下两个脚本来完成你想要的工作。

首先, getpwd.cmd

 @echo off <nul: set /p passwd=Password: for /f "delims=" %%i in ('cscript /nologo getpwd.vbs') do set passwd=%%i echo. 

然后, getpwd.vbs

 Set oScriptPW = CreateObject("ScriptPW.Password") strPassword = oScriptPW.GetPassword() Wscript.StdOut.WriteLine strPassword 

getpwd.vbs只是使用密码对象从用户input密码,然后打印到标准输出(下一段将解释为什么不显示在terminal中)。

getpwd.cmd命令脚本有点复杂,但基本上如下所示。

"<nul: set /p passwd=Password: "命令的作用是输出没有结尾换行符的提示 – 这是一种偷偷摸摸地从bash shell模拟"echo -n"命令的方法。 它将passwd设置为空string作为不相关的副作用,并且不会等待来自nul: device的input。

"for /f "delims=" %%i in ('cscript /nologo getpwd.vbs') do set passwd=%%i"语句是最棘手的一点。 它运行没有Microsoft“广告”的VBScript,所以唯一的行输出是密码(来自VBscript "Wscript.StdOut.WriteLine strPassword"

将分隔符设置为无,需要用空格捕获整个input行,否则只需要input第一个单词。 "for ... do set ..."位被设置为从VBScript输出的实际密码。

然后,我们回显一个空白行(终止"Password: "行),密码将在代码运行后位于passwd环境variables中。


现在,如上所述, scriptpw.dll只可用于XP / 2003。 为了解决这个问题,你可以简单地把scriptpw.dll文件从XP / 2003系统的Windows\System32文件夹复制到你自己的系统上的Winnt\System32Windows\System32文件夹中。 一旦DLL被复制,你将需要通过运行注册它:

 regsvr32 scriptpw.dll 

要在Vista和更高版本上成功注册DLL,您将需要pipe理员权限。 我还没有研究过这么一个洞穴议员的合法性。


如果您不是过分热衷于追踪和注册较旧的DLL文件(为了方便或法律方面的原因),还有另一种方法。 Windows的更新版本( 没有所需DLL的版本)应该可以使用Powershell。

事实上,你真的应该考虑升级你的脚本来使用它,因为它是一个比cmd.exe更强大的脚本语言。 但是,如果要将大部分代码保存为cmd.exe脚本(例如,如果您有大量不想转换的代码),则可以使用相同的技巧。

首先,修改cmd脚本,使其调用Powershell而不是CScript:

 @echo off for /f "delims=" %%i in ('powershell -file getpwd.ps1') do set passwd=%%i 

Powershell脚本同样简单:

 $password = Read-Host "Enter password" -AsSecureString $password = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($password) $password = [Runtime.InteropServices.Marshal]::PtrToStringAuto($password) echo $password 

虽然用一些编组来获取实际的密码文本。

请记住,要在机器上运行本地未签名的Powershell脚本,您可能需要修改(draconian,虽然非常安全)默认的执行策略,如下所示:

 set-executionpolicy remotesigned 

从Powershell本身。

是的,我迟到了4年。

但是我find了一种方法来做到这一点,而不必创build一个外部脚本; 通过从batch file中调用powershell命令。

感谢TessellatingHeckler – 没有输出到一个文本文件(我把powershell命令放在一个variables中,因为在for循环里面的一个很长的行里面很乱)。

 @echo off set "psCommand=powershell -Command "$pword = read-host 'Enter Password' -AsSecureString ; ^ $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^ [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)"" for /f "usebackq delims=" %%p in (`%psCommand%`) do set password=%%p echo %password% 

最初我写它输出到一个文本文件,然后从该文本文件中读取。 但是上面的方法比较好。 在一个非常漫长而难以理解的界限中:

 @echo off powershell -Command $pword = read-host "Enter password" -AsSecureString ; $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword) ; [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) > .tmp.txt & set /p password=<.tmp.txt & del .tmp.txt echo %password% 

我会解决这个问题 – 你可以把它分成几行,用caret ^ ,这个好多了。

 @echo off powershell -Command $pword = read-host "Enter password" -AsSecureString ; ^ $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword) ; ^ [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) > .tmp.txt set /p password=<.tmp.txt & del .tmp.txt echo %password% 

本文解释了什么是PowerShell命令正在做的事情; 本质上它使用Read-Host -AsSecureString获取input – 以下两行将该安全string转换回纯文本,然后使用>.tmp.txt将输出(纯文本密码)发送到文本文件。 该文件然后被读入一个variables并被删除。

1. (ab)使用XCOPY命令及其/P /L开关的纯批处理解决scheme ( 这里 可以find一些改进):

 :: Hidden.cmd ::Tom Lavedas, 02/05/2013, 02/20/2013 ::Carlos, 02/22/2013 ::https://groups.google.com/forum/#!topic/alt.msdos.batch.nt/f7mb_f99lYI @Echo Off :HInput SetLocal EnableExtensions EnableDelayedExpansion Set "FILE=%Temp%.\T" Set "FILE=.\T" Keys List >"%File%" Set /P "=Hidden text ending with Ctrl-C?: " <Nul Echo. Set "HInput=" :HInput_ For /F "tokens=1* delims=?" %%A In ( '"Xcopy /P /L "%FILE%" "%FILE%" 2>Nul"' ) Do ( Set "Text=%%B" If Defined Text ( Set "Char=!Text:~1,1!" Set "Intro=1" For /F delims^=^ eol^= %%Z in ("!Char!") Do Set "Intro=0" Rem If press Intro If 1 Equ !Intro! Goto :HInput# Set "HInput=!HInput!!Char!" ) ) Goto :HInput_ :HInput# Echo(!HInput! Goto :Eof 

1.2 另一种基于replace命令的方法

 @Echo Off SetLocal EnableExtensions EnableDelayedExpansion Set /P "=Enter a Password:" < Nul Call :PasswordInput Echo(Your input was:!Line! Goto :Eof :PasswordInput ::Author: Carlos Montiers Aguilera ::Last updated: 20150401. Created: 20150401. ::Set in variable Line a input password For /F skip^=1^ delims^=^ eol^= %%# in ( '"Echo(|Replace.exe "%~f0" . /U /W"') Do Set "CR=%%#" For /F %%# In ( '"Prompt $H &For %%_ In (_) Do Rem"') Do Set "BS=%%#" Set "Line=" :_PasswordInput_Kbd Set "CHR=" & For /F skip^=1^ delims^=^ eol^= %%# in ( 'Replace.exe "%~f0" . /U /W') Do Set "CHR=%%#" If !CHR!==!CR! Echo(&Goto :Eof If !CHR!==!BS! (If Defined Line (Set /P "=!BS! !BS!" <Nul Set "Line=!Line:~0,-1!" ) ) Else (Set /P "=*" <Nul If !CHR!==! (Set "Line=!Line!^!" ) Else Set "Line=!Line!!CHR!" ) Goto :_PasswordInput_Kbd 

2.使用HTApopup窗口的密码提交者 。 这是一个.bat / jscript / mshta文件,应保存为.bat :

 <!-- : :: PasswordSubmitter.bat @echo off for /f "tokens=* delims=" %%p in ('mshta.exe "%~f0"') do ( set "pass=%%p" ) echo your password is %pass% exit /b --> <html> <head><title>Password submitter</title></head> <body> <script language='javascript' > window.resizeTo(300,150); function entperPressed(e){ if (e.keyCode == 13) { pipePass(); } } function pipePass() { var pass=document.getElementById('pass').value; var fso= new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1); close(fso.Write(pass)); } </script> <input type='password' name='pass' size='15' onkeypress="return entperPressed(event)" ></input> <hr> <button onclick='pipePass()'>Submit</button> </body> </html> 

3. 一个自编译的.net混合文件,另外应该保存为.bat 。与其他解决scheme不同的是,它会创build/编译一个小的.exe文件,这个文件将会被调用(如果你希望删除的话)。 还需要安装.NET框架,但这不是一个问题:

 @if (@X)==(@Y) @end /* JScript comment @echo off setlocal enableDelayedExpansion for /f "tokens=* delims=" %%v in ('dir /b /s /a:-d /o:-n "%SystemRoot%\Microsoft.NET\Framework\*jsc.exe"') do ( set "jsc=%%v" ) if not exist "%~n0.exe" ( "%jsc%" /nologo /out:"%~n0.exe" "%~dpsfnx0" ) for /f "tokens=* delims=" %%p in ('"%~n0.exe"') do ( set "pass=%%p" ) echo your password is !pass! endlocal & exit /b %errorlevel% */ import System; var pwd = ""; var key; Console.Error.Write("Enter password: "); do { key = Console.ReadKey(true); if ( (key.KeyChar.ToString().charCodeAt(0)) >= 20 && (key.KeyChar.ToString().charCodeAt(0) <= 126) ) { pwd=pwd+(key.KeyChar.ToString()); Console.Error.Write("*"); } if ( key.Key == ConsoleKey.Backspace && pwd.Length > 0 ) { pwd=pwd.Remove(pwd.Length-1); Console.Error.Write("\b \b"); } } while (key.Key != ConsoleKey.Enter); Console.Error.WriteLine(); Console.WriteLine(pwd); 

我可能会做:

 .. echo Before you enter your password, make sure no-one is looking! set /P password=Password: cls echo Thanks, got that. .. 

所以你得到一个提示,然后屏幕进入后清除。

请注意,如果从命令提示符执行batch file,则input的密码将存储在CMD历史logging中(谢谢@Mark K Cowan )。

如果这不够好,我会切换到python,或写一个可执行文件而不是脚本。

我知道这些都不是完美的解决scheme,但也许你已经足够了:)

另一种select是我的EditV32(x86)或EditV64(x64)命令行工具。 例如:

 editv32 -m -p "Password: " PWD 

-m表示“被屏蔽的input”,-p是提示符。 用户的input存储在PWD环境variables中。 你可以在这里得到它:

http://www.westmesatech.com/editv.html

如果缺乏源代码困扰你,我有另一种select。

 @echo off for /f "delims=" %%p in ('ReadLine -h -p "Enter password: "') do set PWD=%%p echo You entered: %PWD% 

你可以从http://www.westmesatech.com/misctools.html得到它。; 包括源代码。

我使用了Blorgbeard的上述解决scheme,这在我看来确实很棒。 然后我对其进行了如下改进:

  1. Google的ansicon
  2. 下载压缩文件和示例文本文件。
  3. 安装(即将2个文件复制到system32中)

像这样使用它:

 @echo off ansicon -p set /p pwd=Password:ESC[0;37;47m echo ESC[0m 

这会将控制台切换为灰色,以便您input密码,并在完成后切换回来。 ESC实际上应该是一个不可打印的字符,您可以从下载的示例文本文件(在记事本中显示为左箭头)复制到您的batch file中。 您可以使用示例文本文件来查找所有颜色组合的代码。

如果您不是机器的pipe理员,那么您可能会将这些文件安装到非系统目录中,然后在调用程序并使用转义序列之前,必须将该目录追加到脚本中的PATH中。 这可能甚至是当前目录,如果你需要一个只有几个文件的非pipe理员可分发包。

创build一个batch file,调用不可见字符所需的文件,然后为正在调用的batch file创build一个快捷方式。

右键点击

性能

颜色

文字==黑

背景==黑色

应用

希望从而帮助你!!!!!!!!

您可以使用ReadFormattedLine子例程来处理所有types的input。 例如,下面的命令读取8个字符的密码,在屏幕上显示星号,并自动继续,不需要按Enter键:

 call :ReadFormattedLine password="********" /M "Enter password (8 chars): " 

这个子程序是用纯批量编写的,因此它不需要任何额外的程序,它允许进行多种格式化的input操作,比如只读数字,将字母转换为大写等等。您可以从Read行中下载ReadFormattedLine子程序。

更新:
我添加了两个新的方法,而不是使用CLS来隐藏input,他们只创build一个新的popup窗口。

缺点是一种方法(方法2)会在registry中留下垃圾 – “如果没有正确的权限运行”,另一种方法(方法三)会在脚本中附加一些垃圾。 不用说,它可以很容易地写入任何tmp文件,并删除我只是试图想出一个替代scheme。

限制:密码只能是字母数字 – 不能是其他字符!

 @echo off if "%1"=="method%choice%" goto :method%choice% :::::::::::::::::: ::Your code here:: :::::::::::::::::: cls echo ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: echo :::: Batch script to prompt for password! ::: echo ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :choice echo. echo 1. First method echo. echo 2. Second method echo. echo 3. Third method echo. set/p choice=Choose a method: if "%choice%" gtr "3" echo. & echo invalid option & echo. & pause & goto choice call :vars set options= %num%%smAlph%%cpAlph% set pwdLen=6 if "%choice%" == "1" ( set /p=Password: <nul for /l %%i in (1,1,%pwdLen%) do call :password ) else ( start /wait cmd /c call "%~f0" method%choice% ) call :result%choice% ::just to see if it worked! echo. echo The Password you entered is: "%pwd%"&pause>nul :::::::::::::::::: ::More code here:: :::::::::::::::::: exit /b :vars set num=1234567890 set smAlph=abcdefghijklmnopqrstuvwxyz set cpAlph=ABCDEFGHIJKLMNOPQRSTUVWXYZ set pwd= goto :EOF :method2 call :popUp setx result %pwd% >nul goto :EOF :method3 call :popUp >> "%~f0" echo. >> "%~f0" echo :result%choice% >> "%~f0" echo set pwd=%pwd% goto :EOF :popUp title Password mode con lines=1 cols=30 color 5a set /p=Password: <nul for /l %%i in (1,1,%pwdLen%) do call :password goto :EOF :password :: If you don't want case sensative remove "/cs" but remember to remove %cpAlph% from the %options% choice /c %options% /n /cs >nul call SET pwd=%pwd%%%options:~%errorlevel%,1%% set /p =*<nul GOTO :EOF :result2 for /f "tokens=3" %%a in ('reg query hkcu\environment /v result') do set pwd=%%a setx result "" >nul reg delete hkcu\environment /v result /f >nul 2>&1 :result1 goto :EOF ::You can delete from here whenever you want. 

更新:我发现sachadee的post是完美的 ,我只是添加了我的“popup”怪癖。

 @Echo Off SetLocal EnableDelayedExpansion if "%1"==":HInput" goto :HInput set r=r%random% start /wait cmd /c call "%~f0" :HInput For /f "tokens=2,13 delims=, " %%a in ( 'tasklist /v /fo csv /fi "imagename eq cmd.exe" ^|findstr /v "Windows\\system32\\cmd.exe" ^|findstr "set /p=%r%"' ) do ( set pid=%%a set Line=%%b set Line=!Line:%r%=! set Line=!Line:~,-2! ) taskkill /pid %pid:"=%>nul goto :HIEnd :HInput SetLocal DisableDelayedExpansion title Password mode con lines=2 cols=30 Echo Enter your Code : Set "Line=" For /F %%# In ( '"Prompt;$H&For %%# in (1) Do Rem"' ) Do Set "BS=%%#" :HILoop Set "Key=" For /F "delims=" %%# In ( 'Xcopy /W "%~f0" "%~f0" 2^>Nul' ) Do If Not Defined Key Set "Key=%%#" Set "Key=%Key:~-1%" SetLocal EnableDelayedExpansion If Not Defined Key start /min cmd /k mode con lines=1 cols=14 ^&set/p %r%!Line!=&exit If %BS%==^%Key% (Set /P "=%BS% %BS%" <Nul Set "Key=" If Defined Line Set "Line=!Line:~0,-1!" ) Else Set /P "=*" <Nul If Not Defined Line (EndLocal &Set "Line=%Key%" ) Else For /F delims^=^ eol^= %%# In ( "!Line!") Do EndLocal &Set "Line=%%#%Key%" Goto :HILoop :HIEnd Echo( Echo Your code is : "!Line!" Pause Goto :Eof 

这可能是一个较老的话题,但如果你使用的是Windows Vista或7,我有一个解决scheme,将工作得很好。 我在这里做了一个video: http : //www.youtube.com/watch?v = mk8uAa6PIFM

batch file的Pastebin在这里

如果你安装了Python,你可以使用:

 for /f "delims=" %%A in ('python -c "import getpass; print(getpass.getpass('Enter the CVS password: '));"') do @set CVSPASS=%%A echo PASS: %CVSPASS% 

输出:

 Enter the CVS password: PASS: 123 
 @echo off color 0f MODE CON COLS=132 LINES=50 :start cls choice /C ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!?.# /N /CS /M Please enter your password to continue. (Valid characters include all letters, numbers, and ! ? .) Press # to submit: SET ecode=%ERRORLEVEL% IF %ecode% EQU 66 goto submit IF %ecode% EQU 1 SET out=A IF %ecode% EQU 2 SET out=B IF %ecode% EQU 3 SET out=C IF %ecode% EQU 4 SET out=D IF %ecode% EQU 5 SET out=E IF %ecode% EQU 6 SET out=F IF %ecode% EQU 7 SET out=G IF %ecode% EQU 8 SET out=H IF %ecode% EQU 9 SET out=I IF %ecode% EQU 10 SET out=J IF %ecode% EQU 11 SET out=K IF %ecode% EQU 12 SET out=L IF %ecode% EQU 13 SET out=M IF %ecode% EQU 14 SET out=N IF %ecode% EQU 15 SET out=O IF %ecode% EQU 16 SET out=P IF %ecode% EQU 17 SET out=Q IF %ecode% EQU 18 SET out=R IF %ecode% EQU 19 SET out=S IF %ecode% EQU 20 SET out=T IF %ecode% EQU 21 SET out=U IF %ecode% EQU 22 SET out=V IF %ecode% EQU 23 SET out=W IF %ecode% EQU 24 SET out=X IF %ecode% EQU 25 SET out=Y IF %ecode% EQU 26 SET out=Z IF %ecode% EQU 27 SET out=a IF %ecode% EQU 28 SET out=b IF %ecode% EQU 29 SET out=c IF %ecode% EQU 30 SET out=d IF %ecode% EQU 31 SET out=e IF %ecode% EQU 32 SET out=f IF %ecode% EQU 33 SET out=g IF %ecode% EQU 34 SET out=h IF %ecode% EQU 35 SET out=i IF %ecode% EQU 36 SET out=j IF %ecode% EQU 37 SET out=k IF %ecode% EQU 38 SET out=l IF %ecode% EQU 39 SET out=m IF %ecode% EQU 40 SET out=n IF %ecode% EQU 41 SET out=o IF %ecode% EQU 42 SET out=p IF %ecode% EQU 43 SET out=q IF %ecode% EQU 44 SET out=r IF %ecode% EQU 45 SET out=s IF %ecode% EQU 46 SET out=t IF %ecode% EQU 47 SET out=u IF %ecode% EQU 48 SET out=v IF %ecode% EQU 49 SET out=w IF %ecode% EQU 50 SET out=x IF %ecode% EQU 51 SET out=y IF %ecode% EQU 52 SET out=z IF %ecode% EQU 53 SET out=0 IF %ecode% EQU 54 SET out=1 IF %ecode% EQU 55 SET out=2 IF %ecode% EQU 56 SET out=3 IF %ecode% EQU 57 SET out=4 IF %ecode% EQU 58 SET out=5 IF %ecode% EQU 59 SET out=6 IF %ecode% EQU 60 SET out=7 IF %ecode% EQU 61 SET out=8 IF %ecode% EQU 62 SET out=9 IF %ecode% EQU 63 SET out=! IF %ecode% EQU 64 SET out=? IF %ecode% EQU 65 SET out=. SET code=%out% SET show=* :loop cls choice /C ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!?.# /N /CS /M Please enter your password to continue. (Valid characters include all letters, numbers, and ! ? .) Press # to submit: %code% SET ecode=%ERRORLEVEL% IF %ecode% EQU 66 goto submit IF %ecode% EQU 1 SET out=A IF %ecode% EQU 2 SET out=B IF %ecode% EQU 3 SET out=C IF %ecode% EQU 4 SET out=D IF %ecode% EQU 5 SET out=E IF %ecode% EQU 6 SET out=F IF %ecode% EQU 7 SET out=G IF %ecode% EQU 8 SET out=H IF %ecode% EQU 9 SET out=I IF %ecode% EQU 10 SET out=J IF %ecode% EQU 11 SET out=K IF %ecode% EQU 12 SET out=L IF %ecode% EQU 13 SET out=M IF %ecode% EQU 14 SET out=N IF %ecode% EQU 15 SET out=O IF %ecode% EQU 16 SET out=P IF %ecode% EQU 17 SET out=Q IF %ecode% EQU 18 SET out=R IF %ecode% EQU 19 SET out=S IF %ecode% EQU 20 SET out=T IF %ecode% EQU 21 SET out=U IF %ecode% EQU 22 SET out=V IF %ecode% EQU 23 SET out=W IF %ecode% EQU 24 SET out=X IF %ecode% EQU 25 SET out=Y IF %ecode% EQU 26 SET out=Z IF %ecode% EQU 27 SET out=a IF %ecode% EQU 28 SET out=b IF %ecode% EQU 29 SET out=c IF %ecode% EQU 30 SET out=d IF %ecode% EQU 31 SET out=e IF %ecode% EQU 32 SET out=f IF %ecode% EQU 33 SET out=g IF %ecode% EQU 34 SET out=h IF %ecode% EQU 35 SET out=i IF %ecode% EQU 36 SET out=j IF %ecode% EQU 37 SET out=k IF %ecode% EQU 38 SET out=l IF %ecode% EQU 39 SET out=m IF %ecode% EQU 40 SET out=n IF %ecode% EQU 41 SET out=o IF %ecode% EQU 42 SET out=p IF %ecode% EQU 43 SET out=q IF %ecode% EQU 44 SET out=r IF %ecode% EQU 45 SET out=s IF %ecode% EQU 46 SET out=t IF %ecode% EQU 47 SET out=u IF %ecode% EQU 48 SET out=v IF %ecode% EQU 49 SET out=w IF %ecode% EQU 50 SET out=x IF %ecode% EQU 51 SET out=y IF %ecode% EQU 52 SET out=z IF %ecode% EQU 53 SET out=0 IF %ecode% EQU 54 SET out=1 IF %ecode% EQU 55 SET out=2 IF %ecode% EQU 56 SET out=3 IF %ecode% EQU 57 SET out=4 IF %ecode% EQU 58 SET out=5 IF %ecode% EQU 59 SET out=6 IF %ecode% EQU 60 SET out=7 IF %ecode% EQU 61 SET out=8 IF %ecode% EQU 62 SET out=9 IF %ecode% EQU 63 SET out=! IF %ecode% EQU 64 SET out=? IF %ecode% EQU 65 SET out=. SET code=%code%%out% SET show=%show%* goto loop :submit cls SET password=%code% IF %password% EQU 0cZrocks! SET result=1 IF ELSE SET result=2 IF %result% EQU 1 echo password correct IF %result% EQU 2 echo password incorrect timeout /T 2 /NOBREAK >nul cls IF %result% EQU 1 goto end IF ELSE goto start :end 

我读到了networking上所有笨重的解决scheme,关于如何在batch file中掩盖密码,使用hide.com解决scheme,甚至是使文本和背景颜色相同的解决scheme。 hide.com解决scheme工作得体,它不是很安全,并且在64位Windows中不起作用。 所以无论如何,使用100%的Microsoft公用事业,有一个办法!

首先,让我解释一下我的用法。 我有大约20个自动login到Windows的工作站。 他们的桌面上有一个快捷方式 – 临床应用。 机器被locking,他们不能右键点击,他们不能做任何事,只能访问他们的桌面上的一个快捷方式。 有时,技术人员需要启动一些debugging应用程序,浏览Windows资源pipe理器并查看日志文件,而不closures自动login用户帐户。

所以这就是我所做的。

不pipe你希望如何,但是我把我的两个batch file放在一个被locking的计算机可以访问的networking共享中。

我的解决scheme利用Windows的一个主要组件 – runas。 把客户端的快捷方式放到你即将创build的runas.bat中。 仅供参考,在我的客户端,我将该快捷方式重命名为更好的查看目的并更改了图标。

您将需要创build两个batch file。

我将batch file命名为runas.batDebug Support.bat

runas.bat包含以下代码:

 cls @echo off TITLE CHECK CREDENTIALS goto menu :menu cls echo. echo .................................... echo ~Written by Cajun Wonder 4/1/2010~ echo .................................... echo. @set /p un=What is your domain username? if "%un%"=="PUT-YOUR-DOMAIN-USERNAME-HERE" goto debugsupport if not "%un%"=="PUT-YOUR-DOMAIN-USERNAME-HERE" goto noaccess echo. :debugsupport "%SYSTEMROOT%\system32\runas" /netonly /user:PUT-YOUR-DOMAIN-NAME-HERE\%un% "\\PUT-YOUR-NETWORK-SHARE-PATH-HERE\Debug Support.bat" @echo ACCESS GRANTED! LAUNCHING THE DEBUG UTILITIES.... @ping -n 4 127.0.0.1 > NUL goto quit :noaccess cls @echo. @echo. @echo. @echo. @echo \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ @echo \\ \\ @echo \\ Insufficient privileges \\ @echo \\ \\ @echo \\ Call Cajun Wonder \\ @echo \\ \\ @echo \\ At \\ @echo \\ \\ @echo \\ 555-555-5555 \\ @echo \\ \\ @echo \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ @ping -n 4 127.0.0.1 > NUL goto quit @pause :quit @exit 

如果您想要访问的所有用户都可以添加“%un%” ,如果不是“%un%”, 可以添加多less个。 @ping是我制作秒计时器的库纳斯方式。

所以,照顾的第一批文件 – 很简单的呃?

这里是Debug Support.bat的代码:

 cls @echo off TITLE SUPPORT UTILITIES goto menu :menu cls @echo %username% echo. echo ..................................... echo ~Written by Cajun Wonder 4/1/2010~ echo ..................................... echo. echo What do you want to do? echo. echo [1] Launch notepad echo. :choice set /PC=[Option]? if "%C%"=="1" goto notepad goto choice :notepad echo. @echo starting notepad.... @ping -n 3 127.0.0.1 > NUL start notepad cls goto menu 

我不是一个编码器,大概一年前才开始进入批处理脚本,而这一轮我发现在batch file中掩盖密码的方式非常棒!

我希望听到除我之外的其他人能够从中获得一些用处!