2

私たちのサイトの 1 つが最近、CryptoLocker の感染に見舞われました。幸いなことに、私たちはそれを早期に発見し、ファイル システム上の 200k ほどのファイルのうち、約 8k のファイルしか暗号化していませんでした。バックアップも良好だったので、ファイルを復元できます

暗号化されたファイルの約 8k のすべてのリストを、おおよそ次の形式で、改行ごとに 1 つのファイルにしています。

\\nas001\DATA\IQC\file.xls
\\nas001\DATA\IQC\file2.xls
\\nas001\DATA\IQC\folder1\file1.xls
\\nas001\DATA\IQC\folder3\file1.xls

適切なデータのスナップショットの ndmp コピーを作成したため、復元するバックアップは、特定の時点以降の同じフォルダー構造を持つ NAS 上の別のボリュームです。

\\nas001\IQC_restore\file.xls
\\nas001\IQC_restore\file2.xls
\\nas001\IQC_restore\folder1\file1.xls
\\nas001\IQC_restore\folder3\file1.xls

PowerShell (または実際には、バッチ スクリプトまたは robocopy) を使用して、暗号化されたファイルのリストを使用してファイルを解析し、それらのファイルのみをバックアップから元の場所にコピーして、暗号化されたファイルを上書きする簡単な方法はありますか? 別の解決策では、次のスクリプトを見つけました。

$a = Get-Content "C:\script\hname.txt" 
foreach ($i in $a) 
    {$files= get-content "C:\script\src.txt"
    foreach ($file in $files)
    {Copy-Item $file -Destination \\$i\C$\temp -force}
    }

これはほとんど私が必要とするものです - foreach $i in $a$i が 1 つしかないため、ステートメントは冗長です。フォルダー構造を保持する方法でファイルをコピーするのではなく、にリストされているすべてのファイルを単一のフォルダーにコピーします。

これを行う最善の方法は何ですか?2つの別々のファイルを渡して、2行ずつリンクするように指示できますか?ファイルaの各行に対して、ファイルをファイルbのパスにコピーしますか? 1 セットのファイル (ファイルa )を渡し、文字列の置換を実行し、その場所にコピーする方が簡単ですか?

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

4

1 に答える 1

2

私はここであまりにも広い仮定をしているかもしれませ\\nas001\DATA\IQC\\nas001\IQC_restore. もしそうなら....

「既知の不良ファイル」ファイル ( hname.txt?) から各ファイルを取得し、String.Replaceメソッドを使用して宛先の正しいパスを置き換えることができます。

$files = Get-Content C:\script\hname.txt
foreach ($file in $files) {
    $src = $file.Replace("\\nas001\DATA\IQC","\\nas001\IQC_restore")
    Copy-Item $src -Destination $file -Force
}

または、さらに簡潔に言うと、次のようになります。

$enc = '\\nas001\DATA\IQC'      # encrypted files share/folder
$good = '\\nas001\IQC_restore'  # clean share/folder
gc c:\scripts\hname.txt | % { copy $_.replace($enc,$good) -dest $_ -force }

シークレット デコーダ リング:

  • gcGet-Contentコマンドレットのエイリアスです
  • %ForEach-Objectコマンドレットのエイリアスです
  • $_は、パイプラインから渡される「現在の項目」を表す foreach スクリプト ブロック内の特別な変数です。この場合、入力ファイル hname.txt の各行です。
于 2013-11-11T22:04:49.193 に答える