如何删除 Powershell 脚本本身正在使用的文件?

How to delete a file that is being used by the Powershell script itself?

我正在尝试遍历给定目录中的所有图片,检查它们的大小和尺寸。当某些 属性 不符合我的约束时,我想立即删除该文件。否则我想执行一些其他操作。

Add-Type -AssemblyName System.Drawing

$maxFileSizeKB = 100
$minPicWidth = 500
$minPicHeight = 500

foreach ($file in Get-ChildItem -Path ..\pics) {
    $fname = $file.fullname
    $fsizeKB = $file.length/1KB
    $image = [System.Drawing.Image]::FromFile($file.FullName)
    $iWidth = $image.width
    $iHeight = $image.height
    $fLastWrite = $file.LastWriteTime

    if( $fsizeKB -gt $maxFileSizeKB -or
        $iWidth -lt $minPicWidth -or
        $iHeight -lt $minPicHeight) {
        Write-Host "`tDoes'nt match criteria - deleting and continueing with next Image ..."
        Remove-Item -Force $fname
        continue
    }
    Write-Host "other action"
}

我希望在相应的输出中删除尺寸或尺寸太小的图片。如果一张图片符合所有要求,我想看到输出 "other action"

除删除外它都有效,这给了我这个错误:

Remove-Item : Das Element pics\tooSmall2.PNG kann nicht entfernt werden: Der
Prozess kann nicht auf die Datei "pics\tooSmall2.PNG" zugreifen, da sie von
einem anderen Prozess verwendet wird.
In PowerShell\ADPhotoHandler.ps1:27 Zeichen:9
+         Remove-Item -Force $fname
+         ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (\tooSmall2.PNG:FileInfo) [Remove-Item], IOException
    + FullyQualifiedErrorId : RemoveFileSystemItemIOError,Microsoft.PowerShell.Commands.RemoveItemCommand

System.Drawing.Image.FromFile() 文档指出:

The file remains locked until the Image is disposed.

因此,请在尝试删除基础文件之前调用 $image.Dispose()