Script de PowerShell para probar contraseñas - $ LASTEXITCODE

0

Tengo este código en el script de 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 siempre es 99 después de la llamada a TCPath, por lo que el script siempre se imprime YES. Call to TC no está cambiando nada en $ LASTEXITCODE. ¿Qué debo hacer para obtener el código de salida de TrueCrypt?

pbies
fuente
¿Qué pasa si escribes IF ($LASTEXITCODE -eq 99)? Si espera un bool e intenta convertir el valor en un bool.
LotPings
Confirma la condición.
pbies
No sé qué errorlevel devuelve truecrypt, pero a menos que sea 0 siempre obtendrá un "Sí". Ejecute esta línea -5 .. 5 |%{if ($_) {write-host "yes $_"} else {write-host "no $_"} } para ver a qué me refiero.
LotPings
TC devuelve 0 si el comando tuvo éxito, valor más alto si no. Esto es posible con errorlevel en el archivo por lotes, pero parece que no en el script PS.
pbies
Aparte de las dudas sobre su objetivo para estos scripts, no parece entender que el if en su script simplemente devuelve la condición $ true si $ LASTEXITCODE es cualquier cosa menos 0. Para saber cuál es realmente el valor, debe write-host "Yes $LASTEXTICODE and $?"hacerlo en lugar de solo SÍ
LotPings

Respuestas:

0

Entonces, después de mucha investigación, puedo ver que TrueCrypt no puede establecer $ LASTEXITCODE y el problema no puede resolverse con $ ?. Entonces, la única forma de probar las contraseñas es un archivo por lotes. Un revestimiento es suficiente:

@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
pbies
fuente
0

La solución adecuada para la recuperación correcta del código de salida de TC es utilizar el comando 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)
}
pbies
fuente