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?

pai
sumber
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
pai
sumber
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)
}
pai
sumber