Saya menulis file batch untuk menjalankan beberapa program lain. Dalam hal ini saya perlu meminta kata sandi. Apakah saya punya cara untuk menutupi teks masukan? Saya tidak perlu mencetak karakter ******* alih-alih karakter input. Perilaku prompt Kata Sandi Linux (Tidak mencetak apa pun saat mengetik) sudah cukup.
@echo off
SET /P variable=Password :
echo %variable%
Pause
Ini akan membaca input tetapi saya tidak bisa menutupi teks menggunakan pendekatan ini.
batch-file
cmd
command-prompt
Chathuranga Chandrasekara
sumber
sumber
Jawaban:
Hingga XP dan Server 2003, Anda dapat menggunakan alat lain yang disertakan (VBScript) - dua skrip berikut melakukan pekerjaan yang Anda inginkan.
Pertama,
getpwd.cmd
:Kemudian,
getpwd.vbs
:The
getpwd.vbs
hanya menggunakan objek password untuk input password dari pengguna dan kemudian mencetaknya ke output standar (paragraf berikutnya akan menjelaskan mengapa yang tidak muncul di terminal).The
getpwd.cmd
Script perintah adalah rumit sedikit tapi pada dasarnya bekerja sebagai berikut.Efek dari
"<nul: set /p passwd=Password: "
perintah ini adalah untuk menampilkan prompt tanpa karakter baris baru - ini adalah cara licik untuk meniru"echo -n"
perintah daribash
shell. Ini disetelpasswd
ke string kosong sebagai efek samping yang tidak relevan dan tidak menunggu masukan karena mengambil masukan darinul:
perangkat.The
"for /f "delims=" %%i in ('cscript /nologo getpwd.vbs') do set passwd=%%i"
pernyataan adalah bit paling sulit. Ini menjalankan VBScript tanpa "iklan" Microsoft, sehingga satu-satunya keluaran baris adalah kata sandi (dari VBscript"Wscript.StdOut.WriteLine strPassword"
.Mengatur pembatas menjadi tidak ada diperlukan untuk menangkap seluruh baris masukan dengan spasi, jika tidak, Anda hanya akan mendapatkan kata pertama. The
"for ... do set ..."
bit setpasswd
menjadi output password yang sebenarnya dari VBScript.Kemudian kami menggemakan baris kosong (untuk menghentikan
"Password: "
baris) dan kata sandi akan berada dipasswd
variabel lingkungan setelah kode dijalankan.Sekarang, seperti yang disebutkan,
scriptpw.dll
hanya tersedia hingga XP / 2003. Untuk memperbaikinya, Anda cukup menyalinscriptpw.dll
file dariWindows\System32
folder sistem XP / 2003 ke folderWinnt\System32
atauWindows\System32
di sistem Anda sendiri. Setelah DLL disalin, Anda harus mendaftarkannya dengan menjalankan:Untuk berhasil mendaftarkan DLL di Vista dan yang lebih baru, Anda memerlukan hak administrator. Saya belum memeriksa legalitas dari langkah seperti itu jadi lektor gua.
Jika Anda tidak terlalu tertarik untuk mencoba melacak dan mendaftarkan file DLL yang lebih lama (untuk kenyamanan atau alasan hukum), ada cara lain. Versi Windows yang lebih baru (yang tidak memiliki DLL yang diperlukan) seharusnya memiliki Powershell yang tersedia untuk Anda.
Dan, pada kenyataannya, Anda benar-benar harus mempertimbangkan untuk meningkatkan skrip Anda untuk menggunakannya sepenuhnya karena ini adalah bahasa skrip yang jauh lebih mumpuni daripada
cmd.exe
. Namun, jika Anda ingin menyimpan sebagian besar kode Anda sebagaicmd.exe
skrip (seperti jika Anda memiliki banyak kode yang tidak ingin Anda ubah), Anda dapat menggunakan trik yang sama.Pertama, ubah
cmd
skrip sehingga memanggil Powershell daripada CScript:Skrip Powershell sama sederhananya:
meskipun dengan beberapa pengaturan untuk mendapatkan teks kata sandi yang sebenarnya.
Ingatlah bahwa, untuk menjalankan skrip Powershell lokal yang tidak ditandatangani di komputer Anda, Anda mungkin perlu mengubah kebijakan eksekusi dari default (draconian, meskipun sangat aman), dengan sesuatu seperti:
dari dalam Powershell itu sendiri.
sumber
scriptpw.dll
.Ya - Saya terlambat 4 tahun.
Tetapi saya menemukan cara untuk melakukan ini dalam satu baris tanpa harus membuat skrip eksternal; dengan memanggil perintah PowerShell dari file batch.
Terima kasih kepada TessellatingHeckler - tanpa menghasilkan file teks (saya mengatur perintah PowerShell dalam variabel, karena cukup berantakan dalam satu baris panjang di dalam for loop).
Awalnya saya menulisnya ke output ke file teks, lalu membaca dari file teks itu. Tetapi cara di atas lebih baik. Dalam satu baris yang sangat panjang dan hampir tidak bisa dipahami:
Saya akan memecahnya - Anda dapat membaginya menjadi beberapa baris menggunakan tanda sisipan
^
, yang jauh lebih bagus ...Artikel ini menjelaskan apa yang dilakukan oleh perintah PowerShell; pada dasarnya itu mendapat input menggunakan
Read-Host -AsSecureString
- dua baris berikut mengubah string aman itu kembali menjadi teks biasa, output (kata sandi teks biasa) kemudian dikirim ke file teks menggunakan>.tmp.txt
. File itu kemudian dibaca menjadi variabel dan dihapus.sumber
for /f "usebackq tokens=*" %%p in (``powershell -Command "$pword = read-host 'Enter Password' -AsSecureString ; $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)"``) do set password=%%p
dan kemudianecho %password%
. NB. Saya tidak bisa mendapatkan komentar ini untuk menghindari pukulan balik dengan benar - sebelum "PowerShell", dan sebelum akhir ")" adalah dua pukulan balik, tetapi harus satu pukulan balasan.1. Solusi batch murni yang (ab) menggunakan
XCOPY
perintah dan/P /L
sakelar - sakunya ditemukan di sini (beberapa peningkatan pada hal ini dapat ditemukan di sini ):1.2 Cara lain berdasarkan perintah ganti
2. Pengirim kata sandi yang menggunakan pop-up HTA . Ini adalah file .bat / jscript / mshta hybrit dan harus disimpan sebagai .bat :
3. Hibrid .net yang dikompilasi sendiri. Sekali lagi harus disimpan sebagai
.bat
. Berbeda dengan solusi lain, ia akan membuat / mengompilasi file .exe kecil yang akan dipanggil (jika Anda ingin, Anda dapat menghapusnya). Juga membutuhkan kerangka kerja .net yang diinstal tetapi itu bukan masalah:sumber
Saya mungkin hanya akan melakukan:
Jadi Anda mendapatkan prompt, lalu layar bersih setelah masuk.
Perhatikan bahwa kata sandi yang dimasukkan akan disimpan dalam sejarah CMD jika file batch dijalankan dari prompt perintah (Terima kasih @Mark K Cowan ).
Jika itu tidak cukup baik, saya akan beralih ke python, atau menulis yang dapat dieksekusi alih-alih skrip.
Saya tahu tidak ada yang sempurna, tapi mungkin satu cukup baik untuk Anda :)
sumber
doskey /reinstall
untuk menghapus buffer perintah sebelumnya segera setelahnyacls
, jika riwayat perintah di konsol tidak penting bagi Anda.C:\>start "console" cmd /c ireadconsole.bat
Anda dapat menggunakan subrutin ReadFormattedLine untuk semua jenis masukan yang diformat. Misalnya, perintah di bawah ini membaca kata sandi yang terdiri dari 8 karakter, menampilkan tanda bintang di layar, dan melanjutkan secara otomatis tanpa perlu menekan Enter:
Subrutin ini ditulis dalam Batch murni sehingga tidak memerlukan program tambahan apa pun, dan memungkinkan beberapa operasi input yang diformat, seperti membaca angka saja, mengubah huruf menjadi huruf besar, dll. Anda dapat mengunduh subrutin ReadFormattedLine dari Membaca baris dengan format tertentu .
EDIT 18-08-2018 : Metode baru untuk memasukkan kata sandi "tidak terlihat"
Perintah FINDSTR memiliki bug aneh yang terjadi saat perintah ini digunakan untuk menampilkan karakter dalam warna DAN output dari perintah semacam itu diarahkan ke perangkat CON. Untuk detail tentang bagaimana menggunakan perintah FINDSTR untuk menampilkan teks berwarna, lihat topik ini .
Ketika keluaran dari bentuk perintah FINDSTR ini diarahkan ke CON, sesuatu yang aneh terjadi setelah teks dikeluarkan dalam warna yang diinginkan: semua teks setelah itu dikeluarkan sebagai karakter "tidak terlihat", meskipun penjelasan yang lebih tepat adalah bahwa teks tersebut adalah keluaran sebagai teks hitam di atas latar belakang hitam. Teks asli akan muncul jika Anda menggunakan perintah COLOR untuk mengatur ulang warna latar depan dan latar belakang seluruh layar. Namun, jika teks "tidak terlihat", kita dapat menjalankan perintah SET / P, sehingga semua karakter yang dimasukkan tidak akan muncul di layar.
sumber
Alternatif lain adalah alat baris perintah EditV32 (x86) atau EditV64 (x64) saya. Sebagai contoh:
-m berarti "input bertopeng" dan -p adalah promptnya. Masukan pengguna disimpan di variabel lingkungan PWD. Anda bisa mendapatkannya disini:
https://westmesatech.com/?page_id=19
sumber
Jika kurangnya kode sumber mengganggu Anda, saya punya alternatif lain.
Anda bisa mendapatkannya dari https://westmesatech.com/?page_id=49 . Kode sumber disertakan.
sumber
Jika Anda menginstal Python, Anda dapat menggunakan:
hasil:
sumber
Saya menggunakan solusi Blorgbeard di atas yang sebenarnya bagus menurut saya. Lalu saya tingkatkan sebagai berikut:
Gunakan seperti ini:
Ini mengubah konsol menjadi abu-abu pada abu-abu untuk entri kata sandi Anda dan beralih kembali ketika Anda selesai. ESC seharusnya merupakan karakter yang tidak dapat dicetak, yang dapat Anda salin dari file teks sampel yang diunduh (tampak seperti panah kiri di Notepad) ke dalam file batch Anda. Anda dapat menggunakan file teks contoh untuk menemukan kode untuk semua kombinasi warna.
Jika Anda bukan admin mesin, Anda mungkin dapat menginstal file di direktori non-sistem, lalu Anda harus menambahkan direktori ke PATH di skrip Anda sebelum memanggil program dan menggunakan urutan escape. Ini bahkan bisa menjadi direktori saat ini, jika Anda memerlukan paket yang dapat didistribusikan non-admin hanya dari beberapa file.
sumber
buat file batch yang memanggil file yang diperlukan untuk karakter tak terlihat, lalu buat pintasan untuk file batch yang dipanggil.
klik kanan
properti
warna
teks == hitam
background == hitam
menerapkan
baik
berharap dapat membantu Anda !!!!!!!!
sumber
UPDATE:
Saya menambahkan dua metode baru yang alih-alih menggunakan cls untuk menyembunyikan input, mereka membuat pop-up baru dengan satu baris saja.
Kekurangannya adalah bahwa satu metode (metode 2) meninggalkan sampah di registri - "Jika dijalankan tanpa hak yang tepat", dan metode lainnya (metode tiga) menambahkan beberapa sampah ke skrip. Tak perlu dikatakan bahwa itu dapat dengan mudah ditulis ke file tmp apa pun dan dihapus, saya hanya mencoba mencari alternatif.
Batasan: Kata sandi hanya boleh alfanumerik - tidak ada karakter lain!
Pembaruan: Saya menemukan posting sachadee menjadi sempurna dan saya baru saja menambahkan kekhasan "pop-up" saya untuk itu.
sumber
Saya menulis program sumber terbuka yang disebut
editenv
yang menggantikaneditv32
/editv64
utilitas lama saya :https://github.com/Bill-Stewart/editenv
Opsi
--maskinput
(-m
) [*] memungkinkan Anda menyembunyikan (menutupi) input yang diketik dan memiliki karakter yang dapat dikonfigurasi (karakter default adalah*
); misalnya:Opsi
--prompt
(-p
) memungkinkan Anda menentukan prompt input. Di atas akan menampilkanPassword:
prompt dan menunggu Anda memasukkan sesuatu. Karakter yang diketik akan muncul sebagai*
. Menekan Ctrl+ Cakan mengakhiri program dengan kode keluar 1223.Unduh di sini:
https://github.com/Bill-Stewart/editenv/releases
[*] Perhatikan bahwa opsi
--maskinput
(-m
) tidak aman - string yang dimasukkan dimasukkan sebagai teks biasa di lingkungan. Fitur ini hanya untuk kenyamanan.sumber
Ini mungkin topik yang lebih lama, tetapi jika Anda menggunakan Windows Vista atau 7, saya memiliki solusi yang akan bekerja dengan sangat baik. Saya membuat videonya di sini: http://www.youtube.com/watch?v=mk8uAa6PIFM
Pastebin untuk file batch ada di sini
sumber
sumber
Pilihan lain, sepanjang baris yang sama seperti Blorgbeard keluar , adalah menggunakan sesuatu seperti:
Itu
^
lolos>
sehingga prompt kata sandi akan terlihat seperti prompt konsol cmd standar.sumber
Saya membaca semua solusi kikuk di internet tentang cara menutupi kata sandi dalam file batch, yang menggunakan solusi hide.com dan bahkan yang membuat teks dan latar belakang memiliki warna yang sama. Solusi hide.com berfungsi dengan baik, tidak terlalu aman, dan tidak bekerja di Windows 64-bit. Jadi, dengan menggunakan 100% utilitas Microsoft, ada caranya!
Pertama, izinkan saya menjelaskan penggunaan saya. Saya memiliki sekitar 20 workstation yang logon otomatis ke Windows. Mereka memiliki satu pintasan di desktop mereka - ke aplikasi klinis. Mesin terkunci, mereka tidak dapat mengklik kanan, mereka tidak dapat melakukan apa pun selain mengakses satu pintasan di desktop mereka. Kadang-kadang teknisi perlu menjalankan beberapa aplikasi debug, menjelajahi windows explorer dan melihat file log tanpa logout akun pengguna autolog.
Jadi inilah yang telah saya lakukan.
Lakukan sesuka Anda, tetapi saya meletakkan dua file batch saya di jaringan bersama yang dapat diakses oleh komputer yang terkunci.
Solusi saya menggunakan 1 komponen utama Windows - runas. Letakkan pintasan pada klien ke runas.bat yang akan Anda buat. FYI, pada klien saya, saya mengganti nama pintasan untuk tujuan tampilan yang lebih baik dan mengubah ikon.
Anda perlu membuat dua file batch.
Saya menamai file batch runas.bat dan Debug Support.bat
runas.bat berisi kode berikut:
Anda dapat menambahkan sebanyak "% un%" dan jika tidak "% un%" untuk semua pengguna yang ingin Anda beri akses. @Ping adalah cara coonass saya untuk membuat timer detik.
Jadi itu menangani file batch pertama - cukup sederhana ya?
Berikut adalah kode untuk Debug Support.bat:
Saya bukan seorang pembuat kode dan benar-benar baru mulai masuk ke skrip batch sekitar setahun yang lalu, dan putaran ini tentang cara saya menemukan penyamaran kata sandi dalam file batch cukup mengagumkan!
Saya berharap mendengar bahwa orang lain selain saya bisa memanfaatkannya!
sumber