Я полностью изменил ваш код, потому что он нестабилен, и этот код решает все ваши проблемы.
HTML
<div class="card mb-2">
<div class="card-body">
<div class="card-text w-100 border rounded p-1 my-1">
<div class="form-actions">
<span class="control-label ml-2">Answer(s):</span>
<a class="btn btn-primary add_fields" href="#">Add Answer</a>
</div>
<div class="input-group mb-3">
<input type="text" class="form-control" placeholder="Recipient's username" aria-label="Recipient's username" aria-describedby="addon">
<div class="input-group-append">
<a class="btn btn-primary" href="#">
<svg id="addon" class="octicon octicon-trashcan svg-white" aria-label="remove" viewBox="0 0 12 16" version="1.1" width="12" height="16" role="img"><path fill-rule="evenodd" d="M11 2H9c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1H2c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1v9c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V5c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm-1 12H3V5h1v8h1V5h1v8h1V5h1v8h1V5h1v9zm1-10H2V3h9v1z"/></svg>
</a>
</div>
</div>
</div>
</div>
</div>
CSS
.svg-white{
fill:#fff;
}
Живой фрагмент
[ 114]
.svg-white{
fill:#fff;
}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css">
<div class="card mb-2">
<div class="card-body">
<div class="card-text w-100 border rounded p-1 my-1">
<div class="form-actions">
<span class="control-label ml-2">Answer(s):</span>
<a class="btn btn-primary add_fields" href="#">Add Answer</a>
</div>
<div class="input-group mb-3">
<input type="text" class="form-control" placeholder="Recipient's username" aria-label="Recipient's username" aria-describedby="addon">
<div class="input-group-append">
<a class="btn btn-primary" href="#">
<svg id="addon" class="octicon octicon-trashcan svg-white" aria-label="remove" viewBox="0 0 12 16" version="1.1" width="12" height="16" role="img"><path fill-rule="evenodd" d="M11 2H9c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1H2c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1v9c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V5c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm-1 12H3V5h1v8h1V5h1v8h1V5h1v8h1V5h1v9zm1-10H2V3h9v1z"/></svg>
</a>
</div>
</div>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js"></script>
До XP и Сервера 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
просто использование объект пароля ввести пароль от пользователя и затем распечатать его к стандартному выводу (следующий абзац объяснит, почему это не обнаруживается в терминале).
getpwd.cmd
командный сценарий немного более хитер, но он в основном работает следующим образом.
эффект эти "<nul: set /p passwd=Password: "
команда должна произвести подсказку без запаздывающего символа новой строки - это - подлый способ эмулировать эти "echo -n"
команда от эти bash
оболочка. Это устанавливает passwd
на пустую строку как несоответствующий побочный эффект и не ожидает входа, так как это берет свой вход от nul:
устройство.
"for /f "delims=" %%i in ('cscript /nologo getpwd.vbs') do set passwd=%%i"
оператор является самым хитрым битом. Это выполняет VBScript без Microsoft "реклама", так, чтобы единственный вывод строки был паролем (от VBscript "Wscript.StdOut.WriteLine strPassword"
.
Установка разделителей ни к чему требуется, чтобы получать всю входную строку с пробелами, иначе Вы просто получаете первое слово. Эти "for ... do set ..."
наборы битов passwd
, чтобы быть фактическим выводом пароля от VBScript.
Тогда мы повторяем пустую строку (для завершения "Password: "
строка), и пароль будет в passwd
переменная среды после того, как код работал.
Теперь, как упомянуто, scriptpw.dll
доступно только до XP/2003. Для исправления этого можно просто скопировать scriptpw.dll
файл от Windows\System32
папка системы XP/2003 к Winnt\System32
или Windows\System32
папка в собственной системе. Как только DLL был скопирован, необходимо будет зарегистрировать его путем выполнения:
regsvr32 scriptpw.dll
Для успешной регистрации DLL на Vista и позже Вам будут нужны права администратора. Я не исследовал законность такого перемещения как чтец пещеры.
<час>, Если Вы не чрезмерно увлечены попыткой разыскать и зарегистрировать более старые файлы DLL (для удобства или легальных причин), существует иначе. Более поздние версии Windows (у тех, которые не делают , есть необходимый DLL) должны иметь Powershell в наличии для Вас.
И, на самом деле, действительно необходимо полагать, что обновление сценариев использует его полностью, так как это - намного более способный язык сценариев, чем [1 126]. Однако, если Вы хотите сохранить объем своего кода как [1 127] сценарии (такой, как будто Вы имеете партия из кода, который Вы не хотите преобразовывать), можно использовать тот же прием.
Первый, измените 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 на машине Вы, возможно, должны изменить политику выполнения от (драконовский, хотя очень безопасный) значение по умолчанию, с чем-то как:
set-executionpolicy remotesigned
из самого Powershell.
Я, вероятно, просто сделал бы:
..
echo Before you enter your password, make sure no-one is looking!
set /P password=Password:
cls
echo Thanks, got that.
..
, Таким образом, Вы получаете подсказку, тогда экран очищается после того, как он вводится.
Примечание, что введенный пароль будет сохранен в истории CMD, если пакетный файл будет выполняться от командной строки (Спасибо @Mark K Кауэн ).
, Если бы это не было достаточно хорошо, я или переключился бы на Python или записал бы исполняемый файл вместо сценария.
я знаю, что ни один из них не идеальный soutions, но возможно каждый достаточно хорош для Вас:)
другой альтернативой являются мои инструменты командной строки EditV32 (x86) или EditV64 (x64) . Например:
editv32 -m -p "Password: " PWD
-m означает «маскированный ввод», а -p - это приглашение. Ввод пользователя сохраняется в переменной среды PWD. Вы можете получить его здесь:
Я прочитал в сети все неуклюжие решения о том, как маскировать пароли в пакетном файле, от решения hide.com и даже о тех, которые делают текст и фон одинаковыми по цвету. Решение hide.com работает прилично, не очень безопасно и не работает в 64-битной Windows. Так или иначе, используя 100% утилиты Microsoft, выход есть!
Во-первых, позвольте мне объяснить, как я использую. У меня около 20 рабочих станций с автоматическим входом в Windows. У них на рабочем столе есть один ярлык - к клиническому приложению. Машины заблокированы, они не могут щелкнуть правой кнопкой мыши, они не могут ничего делать, кроме доступа к одному ярлыку на своем рабочем столе. Иногда техническому специалисту необходимо запустить некоторые отладочные приложения, просмотреть проводник Windows и просмотреть файлы журнала без выхода из учетной записи пользователя autolog.
Итак, вот что я сделал.
Делайте это как хотите, но я поместил два своих командных файла в общий сетевой ресурс, к которому у заблокированного компьютера есть доступ.
В моем решении используется 1 главный компонент Windows - runas. Поместите ярлык на клиентах для runas.bat, который вы собираетесь создать. К вашему сведению, на своих клиентах я переименовал ярлык для лучшего просмотра и изменил значок.
Вам нужно будет создать два командных файла.
Я назвал командные файлы runas.bat и Debug 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% "для всех пользователей, которым вы хотите предоставить доступ. @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 /P C=[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
Я не программист и действительно только начал заниматься пакетным скриптингом около года назад, и этот обходной путь, который я обнаружил для маскировки пароля в пакетном файле, довольно крутой!
Я надеюсь услышать, что кто-то, кроме меня, сможет извлечь из этого пользу!