我正在编写一个脚本来清理 Autodesk 安装留下的许多 GB 的垃圾,并且我收到一个错误,关于一些深埋在仍在使用的文件夹结构中的日志文件。所以,我想得到$_.exception.GetType().fullname
这样我就可以有一个do/while
循环,只要那是失败的循环。或者更有可能循环直到成功或指定次数的尝试失败。为此,我在 C 驱动器上创建了一个 RTF 文件,在写字板中打开它并尝试使用此代码获取异常信息。
$path = 'C:\New folder\New Rich Text Document.rtf'
try {
Remove-Item $path -errorAction Stop
} catch {
Write-Host "$($_.exception.GetType().fullname)"
Write-Host "$($_.exception.message)"
}
最终结果,没有 -Force 标志,文件即使在打开时也被删除。我认为这真的不应该发生。这只是像微软从来没有费心用写字板实现文件锁定的愚蠢吗?还是我不明白这种行为有什么好的理由?更重要的是,有没有办法触发这个条件,这样我就可以真正编写和测试一些优雅响应的代码?理想情况下不使用 MS Office 等,因为我没有它。操作系统附带的东西将是理想的。我找到了这个使用 PowerShell 执行此操作的方法,因此我可以运行第二个脚本来锁定文件并在释放它之前循环一段时间,只要该时间小于我的删除超时时间,它就可以工作。但似乎我应该能够,只需打开文件。虽然我现在想到导致问题的文件是一个日志文件,所以它很可能是通过一种更像该链接的机制锁定的,而不是实际上是“打开的”。但在我看来,打开的文件仍然应该是可删除的。
此外,正如标题中所述,我也尝试过[System.IO.File]::Delete($path)
,令我惊讶的是,它也删除了。越来越好奇。