2016-08-26 22 views
0

初めての質問者です。 :)Powershell:パスワードで保護されたパスワードで保護された.zipファイル(プロセスのスピードアップ)

私はPowershellで遊んでいて、土地を築いて、あなたがそれで何ができるかを見てきました。それは実際に動作

# Stopwatch for measurement 
$stopWatch = [System.Diagnostics.Stopwatch]::startNew() 

$7zipExec = """-7z.exe (7zip) location-""" 
$input = """-.zip location-""" 
$output = """-where to drop contents of .zip file-""" 
$passwordfile = "-location of .txt file containing passwords-" 
$windowStyle = "Hidden" 
[long] $counter = 0 

# Correct password is 12341234 

foreach ($password in (get-content $passwordfile)) { 
$counter++ 
Write-Host -NoNewLine "Attempt #($counter): $password" 
$arguments = "x -o$output -p$password -aoa $input" 
$p = Start-Process $7zipExec -ArgumentList $arguments -Wait -PassThru -WindowStyle $windowStyle 

if ($p.ExitCode -eq 0) { 
    # Password OK 
    Write-Host " ...OK!" 
    Write-Host "" 
    Write-Host "Password is $password, found it after $counter tries." 
    break 
} 
elseif ($p.ExitCode -eq 2) { 
    # Wrong password 
    Write-Host " ...wrong" 
} 
else { 
    # Unknown 
    Write-Host " ...ERROR" 
} 
} 

# Halt the stopwatch and display the time spent for this process 
$stopWatch.Stop() 
Write-Host 
Write-Host "Done in $($stopWatch.Elapsed.Hours) hour(s), $($stopWatch.Elapsed.Minutes) minute(s) and $($stopWatch.Elapsed.Seconds) seconds(s)" 
Read-Host -Prompt "Press Enter to exit" 

:私たちはオンラインで見つける情報を(ほとんどはここで)使用して、我々は、パスワードのリストを含む.txtファイルを使用して、パスワードで保護された.zipファイルを強引に一緒にスクリプトを鞭打つことができました!たぶんきれいではないかもしれませんが、私たちは目標を達成して機能するスクリプトを作成しました。

ただし、パスワードの試行には約1秒かかりますし、万一最も一般的なパスワードが10,000のファイルがあるとしばらく時間がかかることがあります。

これで処理を高速化する方法を理解しようとしていますが、壁に当たって助けが必要です。私は誰かに頼まないことを求めているわけではありませんが、最近Powershellに入ったばかりの人のためのヒント/トリック/ヒントを本当にありがたく思っています。

+0

1. .zipファイルのサイズは? 2.なぜあなたは数十の最先端のスピードアップの仕掛を実装する専用のユーティリティを使用していませんか? 3. 'start-process'の必要はないと思って、直接実行して' $ lastExitCode'を使用してください。 – wOxxOm

+0

PowerShellがあなたのコードで実行時間の10%以上を占めるのではないかと疑います。ほとんどの時間は7-Zipそのものにかかっています。コードを並列化する以外に、すべてのコアを消費するためには、大幅な改善の余地がありません。 – PetSerAl

+0

start-processコマンドの実行に要する時間を確認する必要があります。ほとんどの場合、これが大部分を占める可能性があります。その場合は、おそらくマルチスレッド化する必要があります。しかし、複数の7zipが同時に同じファイルにアクセスしようとすると、それは醜いかもしれません。 –

答えて

0

私はスクリプトをスピードアップすることはできませんでしたが、私はそのプロセスをスピードアップすることができました。

私が今行っているのは、スクリプトの4つのインスタンスを同時に実行することです(追加のPSスクリプトを使用して起動します。これ自体はバッチファイルで開始できます)。

これらのすべてには独自のパスワードリストと独自の出力ディレクトリがあります(同じ場所を使用すると、パスワードで見つかったスクリプトで抽出されたファイルは使用できなくなります)。

このようにして、最も一般的に使用されているパスワードを10万回試すのに約7-8時間かかります。そこにはもっと速いスクリプト/プログラムがあると確信していますが、私はその結果にかなり満足しています。

ありがとうございました!

関連する問題