Jusqu'à XP et Server 2003, vous pouvez utiliser un autre outil inclus (VBScript) - les deux scripts suivants font le travail que vous voulez.
D'abord, getpwd.cmd
:
@echo off
<nul: set /p passwd=Password:
for /f "delims=" %%i in ('cscript /nologo getpwd.vbs') do set passwd=%%i
echo.
Ensuite, getpwd.vbs
:
Set oScriptPW = CreateObject("ScriptPW.Password")
strPassword = oScriptPW.GetPassword()
Wscript.StdOut.WriteLine strPassword
Le site getpwd.vbs
utilise simplement l'objet password pour saisir le mot de passe de l'utilisateur et l'imprimer sur la sortie standard (le paragraphe suivant expliquera pourquoi cela ne s'affiche pas dans le terminal).
Le site getpwd.cmd
La commande script est un peu plus délicate mais elle fonctionne essentiellement comme suit.
L'effet de la "<nul: set /p passwd=Password: "
consiste à afficher l'invite sans caractère de fin de ligne - c'est une façon sournoise d'émuler la commande "echo -n"
à partir du bash
coquille. Il définit passwd
à une chaîne vide en tant qu'effet secondaire non pertinent et n'attend pas d'entrée puisqu'il prend son entrée à partir de l'élément nul:
appareil.
Le site "for /f "delims=" %%i in ('cscript /nologo getpwd.vbs') do set passwd=%%i"
La déclaration est la partie la plus délicate. Elle exécute le VBScript sans aucune "publicité" Microsoft, de sorte que la seule ligne de sortie est le mot de passe (du VBscript "Wscript.StdOut.WriteLine strPassword"
.
La définition des délimiteurs à rien est nécessaire pour capturer une ligne d'entrée entière avec des espaces, sinon vous obtenez juste le premier mot. Le site "for ... do set ..."
le bit est activé passwd
pour être le mot de passe réel produit par le VBScript.
Ensuite, nous affichons une ligne blanche (pour mettre fin à l'exécution de l'opération). "Password: "
) et le mot de passe sera dans la ligne passwd
après l'exécution du code.
Maintenant, comme mentionné, scriptpw.dll
n'est disponible que jusqu'à XP/2003. Pour remédier à cela, vous pouvez simplement copier le fichier scriptpw.dll
à partir du fichier Windows\System32
d'un système XP/2003 vers le dossier Winnt\System32
ou Windows\System32
sur votre propre système. Une fois que la DLL a été copiée, vous devrez l'enregistrer en exécutant :
regsvr32 scriptpw.dll
Pour réussir à enregistrer la DLL sur Vista et les versions ultérieures, vous aurez besoin des privilèges d'administrateur. Je n'ai pas examiné la légalité d'un tel mouvement, alors cave lector.
Si vous n'êtes pas excessivement Si vous ne voulez pas essayer de retrouver et d'enregistrer d'anciens fichiers DLL (pour des raisons pratiques ou juridiques), il existe une autre solution. Les versions ultérieures de Windows (celles qui Ne le fais pas. ont la DLL requise) devraient avoir Powershell à leur disposition.
En fait, vous devriez vraiment envisager de mettre à niveau vos scripts pour l'utiliser pleinement, car il s'agit d'un langage de script bien plus performant que le langage cmd.exe
. Cependant, si vous voulez garder la majeure partie de votre code en tant que cmd.exe
(par exemple, si vous disposez d'un script lot de code que vous ne voulez pas convertir), vous pouvez utiliser la même astuce.
Tout d'abord, modifiez le cmd
script pour qu'il appelle Powershell plutôt que CScript :
@echo off
for /f "delims=" %%i in ('powershell -file getpwd.ps1') do set passwd=%%i
Le script de Powershell est tout aussi simple :
$password = Read-Host "Enter password" -AsSecureString
$password = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($password)
$password = [Runtime.InteropServices.Marshal]::PtrToStringAuto($password)
echo $password
bien qu'avec un peu de marshalling pour obtenir le texte réel du mot de passe.
N'oubliez pas que, pour exécuter des scripts Powershell locaux non signés sur votre machine, vous devrez peut-être modifier la politique d'exécution par rapport à la politique par défaut (draconienne, mais très sûre), avec quelque chose comme :
set-executionpolicy remotesigned
à partir de Powershell lui-même.
1 votes
Duplicata possible de Quel serait l'équivalent Windows batch de l'entrée HTML type="password" ?