初めての質問者です。 :)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に入ったばかりの人のためのヒント/トリック/ヒントを本当にありがたく思っています。
1. .zipファイルのサイズは? 2.なぜあなたは数十の最先端のスピードアップの仕掛を実装する専用のユーティリティを使用していませんか? 3. 'start-process'の必要はないと思って、直接実行して' $ lastExitCode'を使用してください。 – wOxxOm
PowerShellがあなたのコードで実行時間の10%以上を占めるのではないかと疑います。ほとんどの時間は7-Zipそのものにかかっています。コードを並列化する以外に、すべてのコアを消費するためには、大幅な改善の余地がありません。 – PetSerAl
start-processコマンドの実行に要する時間を確認する必要があります。ほとんどの場合、これが大部分を占める可能性があります。その場合は、おそらくマルチスレッド化する必要があります。しかし、複数の7zipが同時に同じファイルにアクセスしようとすると、それは醜いかもしれません。 –