由于勒索软件攻击(没什么大不了的,所有文件都从备份中恢复),我想清理网络共享上的目录和子目录,攻击发生在这些目录和子目录中,这些目录和子目录创建了大量乱码文件。它们都属于使用受感染 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()}
几天来我一直使用这个来删除通过从备份中恢复未被恶意软件影响的文件而创建的文件。我只是恢复了整个共享
但我会尝试一下。
关于你的另一个提示,我必须解释一下,运行勒索软件的用户帐户在该网络驱动器上没有自创文件。对于该用户来说,读取权限就足够了。
不幸的是,此共享对每个人都具有更改访问权限。这是从我们与勒索软件没有太多关系的早期开始的。当然,当主要工作完成后,我会更改这些访问权限。
因此,我需要建议以便删除该特殊帐户拥有的文件。
答案1
首先,您的代码中有一些拼写错误。 where 子句中列表的单个对象由$_
而不是 来处理$
。
而且你的想法很肤浅。你的方法有点复杂。试试这个 :)
Get-ChildItem Z:\ -Recurse | where { $_.GetAccessControl().Owner -eq "DOMAIN\username"} | Remove-Item
虽然我个人并不认为这是最好的方法,因为所有者它可能并不总是你想象的那样。