У меня есть этот код в сценарии 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 всегда равен 99 после вызова TCPath, поэтому скрипт всегда печатает YES . Call to TC ничего не меняет в $ LASTEXITCODE. Что я должен сделать, чтобы получить код выхода из TrueCrypt?

2 ответа2

0

Итак, после долгих исследований я вижу, что TrueCrypt не может установить $ LASTEXITCODE, и проблема не может быть решена с помощью $?. Таким образом, единственный способ проверить пароли - это командный файл. Достаточно одного лайнера:

@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

Правильным решением для правильного получения кода выхода из TC является использование команды Start-Process.

$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)
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .