我正在尝试删除一个NTFS卷上的一堆OSX备用数据流。然而,无论我怎么尝试,我都无法让Powershell做到这一点。是的,我承认我的Powershell并不伟大。有人能帮忙吗?
**目标:**从卷中的任何目录中删除ADS“AFP_AfpInfo”。
当前代码:
Get-ChildItem E:\ -Directory -Recurse | ForEach-Object {
$streams = Get-Content -Path $_ -Stream AFP_AfpInfo -ErrorAction SilentlyContinue
if ($streams) {
$streams | ForEach-Object {
try {
Remove-Item -Path "$($_.PSPath)" -Stream AFP_AfpInfo -Recurse -Force -ErrorAction Silentlycontinue
}
catch {
Write-Host "An error occurred: $($_.Exception.Message)"
}
}
}
}
当前错误:
An error occurred: A parameter cannot be found that matches parameter name 'Stream'.
**注意:**运行Powershell 7.3
2条答案
按热度按时间qxgroojn1#
-Recurse
和-Stream
看起来并不一致,即使在文档中它们出现在相同的参数集中。在这种情况下,-Recurse
应被删除。提交GitHub Issue #9822是为了向Remove-Item
文档添加说明。另外,您正在寻找一个确切的流
AFP_AfpInfo
,所以我认为没有必要枚举$streams
。最后,为了提高效率,检查文件或文件夹是否有替代流应该使用Get-Item
而不是Get-Content
。最后,代码必须使用EngineIntrinsics中的
.Remove
方法才能工作,Remove-Item -Confirm:$false -Force
将总是要求确认文件夹,* 可以说是一个bug。* 如果-Stream
正在使用中,则Remove-Item
应该跳过确认检查,并且提交-Confirm:$false -Force
是为了跟进这一点。vm0i2vca2#
为什么不直接使用
Unblock-File
cmdlet来删除ADS?https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/unblock-file?view=powershell-7.3
描述此cmdlet仅适用于Windows和macOS平台。
Unblock-File cmdlet允许你打开从Internet下载的文件。它取消阻止从Internet下载的PowerShell脚本文件,以便你可以运行这些文件,即使PowerShell执行策略为RemoteSigned。默认情况下,阻止这些文件以保护计算机免受不受信任文件的攻击。
在使用Unblock-File cmdlet之前,请查看文件及其源,并验证打开该文件是否安全。
在内部,Unblock-File cmdlet删除Zone.Identifier备用数据流*,该数据流的值为3,表示它是从Internet下载的。
另请参阅
Get-Item
、Clear-Content
和Remove-Item
cmdlet用例:使用PowerShell和备用数据流https://jdhitsolutions.com/blog/scripting/8888/friday-fun-with-powershell-and-alternate-data-streams的星期五乐趣
您也可以使用MSSysinternals工具在PS代码中删除ADS。
https://learn.microsoft.com/en-us/sysinternals/downloads/streams