Skrip PowerShell untuk menguji kata sandi - $ LASTEXITCODE


0

Saya memiliki kode ini dalam skrip PowerShell:

$passwords = Get-Content "passwords.txt"
$TCPath = "c:\Program Files\TrueCrypt\TrueCrypt.exe"
$TCfile = "container.tc"
foreach ($password in $passwords)
{
    $LASTEXITCODE=99
    & $TCPath "/l z /s /q /p$password $TCfile"
    if ($LASTEXITCODE)
    {
        write-host YES
    }
    else
    {
        write-host NO
    }
}

$ LASTEXITCODE selalu 99 setelah panggilan ke TCPath, jadi skrip selalu dicetak YES. Panggilan ke TC tidak mengubah apa pun dalam $ LASTEXITCODE. Apa yang harus saya lakukan untuk mendapatkan kode keluar dari TrueCrypt?


Apa yang terjadi jika Anda menulis IF ($LASTEXITCODE -eq 99)? Jika menunggu bool dan mencoba untuk melemparkan nilai ke bool.
— Lotings

Ini mengkonfirmasi kondisinya.
— pai

Saya tidak tahu apakah errorlevel truecrypt kembali - tetapi kecuali 0, Anda akan selalu mendapatkan "Ya". Jalankan baris ini -5 .. 5 |%{if ($_) {write-host "yes $_"} else {write-host "no $_"} } untuk melihat apa yang saya maksud.
— Lot,

TC mengembalikan 0 jika perintah berhasil, nilai lebih tinggi jika tidak. Ini dimungkinkan dengan tingkat kesalahan dalam file batch, tetapi tampaknya tidak dalam skrip PS.
— pai

Terlepas dari keraguan tentang tujuan Anda untuk skrip ini, Anda tampaknya tidak memahami bahwa jika dalam skrip Anda hanya mengembalikan kondisi $ true jika $ LASTEXITCODE sama sekali tidak 0. Untuk mengetahui nilai sebenarnya, Anda write-host "Yes $LASTEXTICODE and $?"hanya perlu YA
— LotPings

Jawaban:


0

Jadi, setelah banyak penelitian saya dapat melihat bahwa TrueCrypt tidak dapat menetapkan $ LASTEXITCODE dan masalahnya tidak dapat diselesaikan oleh $ ?. Jadi satu-satunya cara untuk menguji kata sandi adalah file batch. Satu liner sudah cukup:

@FOR /F "tokens=*" %%A IN (passwords.txt) DO @"C:\Program Files\TrueCrypt\TrueCrypt.exe" /a /s /l z /q /v container.tc /p "%%A" & echo %%A

0

Solusi yang tepat untuk pengambilan kode keluar yang benar dari TC adalah dengan menggunakan perintah Mulai-Proses.

$process = (Start-Process -FilePath "$TrueCrypt" -ArgumentList "/a /s /q /l z /m ro /v $container /p $password" -PassThru -Wait)
if ($process.ExitCode -eq 0)
{
    success($password)
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.