¿Cuál sería el lote de Windows equivalente para el tipo de entrada de HTML = “contraseña”?

Necesito obtener credenciales de autenticación de los usuarios dentro de un script de Windows, pero el enfoque clásico de “primer resultado de Google”:

SET /P USR=Username: SET /P PWD=Password: 

es menos que satisfactorio, entonces me preguntaba si podríamos decir un “equivalente” al tipo de entrada de HTML = “contraseña” ?

Cualquier comentario sería muy apreciado, ¡muchas gracias de antemano!

mira esto

http://www.netikka.net/tsneti/info/tscmd052.htm

 @echo off & setlocal enableextensions :: Build a Visual Basic Script set vbs_=%temp%\tmp$$$.vbs set skip= findstr "'%skip%VBS" "%~f0" > "%vbs_%" :: :: Prompting without linefeed as in Item #15 echo.|set /p="Password: " :: Run the script with Microsoft Windows Script Host Version 5.6 for /f "tokens=* delims=" %%a in ('cscript //nologo "%vbs_%"') do set MyPass1=%%a :: ::echo. echo.|set /p="Retype : " for /f "tokens=* delims=" %%a in ('cscript //nologo "%vbs_%"') do set MyPass2=%%a :: :: Clean up for %%f in ("%vbs_%") do if exist %%f del %%f :: :: Demonstrate the result echo. if "%MyPass1%"=="%MyPass2%" ( echo The entered password was %MyPass1% ) else ( echo No match) endlocal & goto :EOF ' 'The Visual Basic Script Set WshPass = WScript.CreateObject("ScriptPW.Password") 'VBS Password=WshPass.GetPassWord() 'VBS WScript.Echo PassWord 'VBS 

Mediante el uso juicioso de otra herramienta disponible gratuitamente en Windows, las siguientes dos secuencias de comandos hacen el trabajo que desea.

Primero, GetPwd.cmd:

 @echo off :: GetPwd.cmd - Get password with no echo.  

Explicación:

GetPwd.vbs simplemente usa el objeto de contraseña para ingresar la contraseña del usuario y luego imprimirla a la salida estándar (el siguiente párrafo explicará por qué eso no aparece en la terminal).

GetPwd.cmd es un poco más complicado (pero los scripts de comandos por lo general son).

El comando " simplemente emite el prompt sin CR / LF rezagado - es una forma furtiva de emular el "echo -n" bash. Establece la passwd de una cadena vacía como un efecto secundario y no espera la entrada ya que está recibiendo su entrada desde el nul: dispositivo.

La "for /f "delims=" %%i in ('cscript /nologo GetPwd.vbs') do set passwd=%%i" es el bit más complicado. Ejecuta el vbscript sin publicidad de Microsoft ( /nologo ), de modo que la única salida de línea es la contraseña (del vbscript "Wscript.StdOut.WriteLine strPassword" .

Es necesario establecer los delimitadores para capturar las líneas de entrada con espacios; de lo contrario, solo obtendrá la primera palabra. El "for ... do set ..." establece passwd para ser la salida de contraseña real de vbscript.

Luego hacemos eco de una línea en blanco (en realidad termina la línea "Password: " ) y hacemos eco de la contraseña para que pueda verificar que funcione:

 C:\Pax> GetPwd Password: this is my password C:\Pax> 

El scriptpw.dll está disponible con XP y 2K3 pero no necesariamente versiones posteriores.

Las instrucciones para Vista y presumiblemente Win7 están debajo, pruébelas:

Para enmascarar la contraseña, el script aprovecha el objeto COM de ScriptPW. ScriptPW se carga de forma predeterminada en Windows XP y Windows 2003. Si está ejecutando Windows 2000 o Windows Vista, deberá copiar el archivo scriptpw.dll de la carpeta Windows\System32 de un sistema XP o sistema Windows 2003 al Carpeta Winnt\System32 o Windows\System32 en su sistema Windows 2000 o Vista. Una vez que la DLL ha sido copiada, necesitará registrarla ejecutando el comando:

regsvr32 scriptpw.dll

Para registrar correctamente el archivo DLL en un equipo con Vista, deberá abrir el símbolo del sistema como administrador. Para hacer esto, haga clic en Inicio | Todos los progtwigs | Accesorios. A continuación, haga clic con el botón derecho en el acceso directo del símbolo del sistema y seleccione "Ejecutar como administrador". Una vez en el símbolo del sistema como administrador, podrá ejecutar correctamente el comando regsvr32 scriptpw.dll para registrar el archivo DLL.

1. Solución de lote puro que (ab) utiliza el comando XCOPY y sus conmutadores /P /L se encuentran aquí :

 :: 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"' ) 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 

2. Usuario de contraseñas que usa una ventana emergente HTA . Este es un archivo hybrit .bat / jscript / mshta y debe guardarse como .bat:

   Password submitter    

3. Un híbrido de .NET autocompuesto . Una vez más debe guardarse como .bat . En diferencia con otras soluciones, creará / comstackrá un pequeño archivo .exe al que se llamará (si lo desea, puede eliminarlo). También requiere .NET Framework instalado, pero eso no es un problema:

 @if (@X)==(@Y) @end /* JScript comment @echo off setlocal 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("*"); } } while (key.Key != ConsoleKey.Enter); Console.Error.WriteLine(); Console.WriteLine(pwd); 

Supongo que no quiere que se haga eco de la contraseña en la pantalla.

Si una ventana emergente está bien para usted, podría usar, por ejemplo, VBScript para mostrar una ventana de IE que muestra un campo de contraseña. Aquí hay un ejemplo .

Como alternativa, puede llamar a su secuencia de comandos desde un archivo HTA (aplicación HTML) (consulte Introducción a las aplicaciones HTML (HTA) .

Saludos, divo

Si puede instalar Cygwin, obtendrá un shell bash por defecto, por lo que este comando funcionará:

leer -s -p “Contraseña:” CONTRASEÑA

El único problema ahora es que el valor de PASSWORD solo se establece en el shell bash, no como una variable de entorno que puede ver un archivo por lotes (no use PWD ya que esto significa algo más en cygwin). Por lo tanto, tendría que volver a escribir su secuencia de comandos como un script de shell bash (¡quizás no tan difícil dadas las limitaciones del símbolo del sistema!).

O puede pasar la contraseña a un script por lotes desde cygwin, pero esto significa ejecutar una nueva instancia del símbolo del sistema:

cmd /cyourbatchfile.bat $ CONTRASEÑA

Todo un poco intrincado y nada satisfactorio;)

Hacemos cosas como esta todo el tiempo, pero ponemos la contraseña en la línea de comandos y la pasamos a una variable en el archivo por lotes.

Otra alternativa son mis herramientas de línea de comandos EditV32 (x86) o EditV64 (x64). Por ejemplo:

 editv32 -m -p "Password: " PWD 

-m significa “entrada enmascarada” y -p es el aviso. La entrada del usuario se almacena en la variable de entorno PWD. Puedes obtenerlo aqui:

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

Otro enfoque es llamar a los comandos de PowerShell desde su secuencia de comandos por Batch . Aquí hay un ejemplo que configura la cuenta de inicio de sesión de un servicio:

 $password = Read-Host "Enter password" -AsSecureString; $decodedpassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($password)); & "sc.exe" config THE_SERVICE_NAME obj= THE_ACCOUNT password= $decodedPassword; 

donde THE_SERVICE_NAME es el nombre del servicio a configurar y THE_ACCOUNT es la cuenta de inicio de sesión.

Entonces podemos usarlo desde un script por lotes como ese:

 call powershell -Command "$password = Read-Host "Enter password" -AsSecureString; $decodedpassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($password)); & "sc.exe" config THE_SERVICE_NAME obj= THE_ACCOUNT password= $decodedPassword;" 

que simplemente llama a PowerShell.exe y pasa los tres comandos.

La ventaja de este enfoque es que la mayoría de las instalaciones de Windows actuales incluyen PowerShell , por lo que no se necesita ningún progtwig o script adicional. El inconveniente es que necesitará usar la contraseña dentro de la llamada de PowerShell (como en mi ejemplo) o almacenarla en una variable de entorno y luego usarla desde su script por lotes. Prefiero el primero porque es más seguro y simple.

Otra alternativa es ReadLine.exe . Ejemplo:

 @echo off setlocal enableextensions set PASSWORD= for /f "delims=" %%p in ('readline -h -p "Enter password: "') do set PASSWORD=%%p echo You entered: %PASSWORD% endlocal 

Puede usar la subrutina ReadFormattedLine para todo tipo de entrada formateada. Por ejemplo, los siguientes comandos leen un nombre de usuario y una contraseña de 8 caracteres cada uno, muestran asteriscos en la pantalla y continúan automáticamente sin necesidad de presionar Enter:

 call :ReadFormattedLine USR="********" /M "Username: " call :ReadFormattedLine PWD="********" /M "Password: " 

O de una manera diferente:

 call :ReadFormattedLine nameAndPass="******** / ********" /M "Enter Username / Password: " 

En el ejemplo anterior, cuando el usuario completaba el nombre de usuario, la subrutina mostraba la barra y leía la contraseña; si el usuario elimina caracteres, la barra también se elimina automáticamente.

Esta subrutina está escrita en lote puro por lo que no requiere ningún progtwig adicional, y permite varias operaciones de entrada formateadas, como leer solo números, convertir letras a mayúsculas, etc. Puede descargar la subrutina ReadFormattedLine desde Leer una línea con un formato específico .

ConSet es una herramienta gratuita escrita por Frank P. Westlake. Es una versión extendida del conjunto de comandos estándar de Windows.

ConSet.exe: muestra, establece o elimina las variables de entorno cmd.exe, modifica los parámetros de la consola y realiza las matemáticas de coma flotante.

Como no es una aplicación de consola estándar de Windows, el uso de esta herramienta requiere la distribución de esta herramienta junto con el archivo por lotes o la herramienta se almacena en un servidor compartido y el archivo por lotes llama a esta herramienta directamente desde el servidor compartido.

ConSet hace un aviso para una cadena de contraseña con la entrada oculta asignada a una variable de entorno muy fácil:

 ConSet.exe /PH "PWD=Password: " 

El parámetro adicional H resulta en la ocultación de la entrada del usuario.