web-dev-qa-db-ja.com

Windows PowerShellを使用して、特定の所有者からファイルを検索して削除します

ランサムウェア攻撃(大したことではなく、すべてバックアップから回復された)のため、攻撃が発生したネットワーク共有上のディレクトリとサブディレクトリをクリーンアップして、大量のスクランブルファイルを作成したいと思います。これらはすべて、感染したPCで作業するユーザーが所有しています。

これまでの私の最善の試みは次のようになります。

_Get-ChildItem Z:\ -Recurse | get-acl | where {($_.Owner -eq "DOMAIN\username")} | foreach { $_.Delete()}
_

ただし、_get-acl_は$_.Delete()をサポートしていないため、機能しません。


この_$_または_$__は私の問題ではないと思います。私は少し可能性が高い他のいくつかのコマンドを持っています。彼らは走る。

ここのように:

_Get-ChildItem -filter "~*.*" -path Z:\ -recurse | where {($_.LastWriteTime -lt (get-date).AddDays(-7))} | foreach { $_.Delete()}
_

マルウェアの影響を受けていないバックアップからファイルを復元することによって作成されたファイルを削除するために、私はこれを何日も使用しています。シェア全体を復元しただけです

しかし、私はそれを試してみます。

他のヒントについては、ランサムウェアを実行したユーザーアカウントには、そのネットワークドライブ上に自己作成ファイルがないことを説明する必要があります。そのユーザーには読み取り権限で十分でした。

残念ながら、この共有にはすべてのユーザーの変更アクセス権があります。それは、私たち全員がランサムウェアとあまり関係がなかった初期の時代からのものです。もちろん、主な作業が終わったら、これらのアクセス権を変更します。

この特別なアカウントが所有するファイルを削除するには、アドバイスが必要です。

2
Anna Nuema

まず、コードにいくつかのタイプミスがありました。 where句内のリストの個々のオブジェクトは、$_ではなく$によってアドレス指定されます。

そして、あなたは角を曲がったところで考えていました。あなたのアプローチは少し複雑でした。代わりにこれを試してください:)

Get-ChildItem Z:\ -Recurse | where { $_.GetAccessControl().Owner -eq "DOMAIN\username"} | Remove-Item

個人的には、これが本当に最善のアプローチだとは思いません。所有者が必ずしもあなたが思っている人であるとは限らないからです。

6
Daniel