Power shell 脚本删除一些旧数据以释放 space 达到一定限度

Power shell script to delete some old data to free up space upto certain limit

我是 power shell 脚本的新手。我有一个 Power shell 脚本来检查可用磁盘 space 并从文件夹中删除一些旧的子文件夹,直到空闲 space 达到阈值级别。

我的代码删除了所有文件夹并且它不会退出任何地方。我正在检查 free space 是否大于 available space 并尝试终止它。 ( $part.FreeSpace -gt $desiredBytes)..

我已回复 $desiredBytes、$part.FreeSpace、$directoryInfo.count。即使删除了一个巨大的文件夹,这些变量的值也不会更新。所以,所有的文件夹都被删除了,但它仍然没有终止。

有人可以帮我解决这个问题吗?提前致谢:)

[WMI]$part = "Win32_LogicalDisk.DeviceID='D:'"
$directory = "D:\Suba\Suba\"
$desiredGiB = 262

$desiredBytes = $desiredGiB * 1073741824

$directoryInfo = Get-ChildItem $directory | Measure-Object
$directoryInfo.count #Returns the count of all of the objects in the directory

do{
if($part.FreeSpace -gt $desiredBytes)
{ exit
}
if ($directoryInfo.count -gt 0) {
echo $desiredBytes
echo $part.FreeSpace
echo $directoryInfo.count
    foreach ($root in $directory) {
      Get-ChildItem $root -Recurse |
            Sort-Object CreationTime |
             Select-Object -First 1 |
            Remove-Item -Force 
   }
 }
else
{ 
    Write-Host "Enough Files are not there in this directory!!"
    exit
}
}
while($part.FreeSpace -lt $desiredBytes)

问题是,每次删除子文件夹后,您都需要再次进行WMI查询,因此更新了免费的space。

查看我的版本:

$drive = "D:"
$directory = "$drive\Suba\Suba"
$desiredSpace = 262 * 1gb

$subfolders = [System.Collections.ArrayList]@(Get-ChildItem $directory | where { $_.PSIsContainer } | sort LastWriteTime)
while (([wmi]"Win32_LogicalDisk.DeviceID='$drive'").FreeSpace -lt $desiredSpace) {
    if ($subfolders.Count -eq 0) {
        Write-Warning "Not enough sub-folders to delete."
        break
    }
    Remove-Item $subfolders[0].FullName -Recurse -Force -Confirm:$false
    $subfolders.RemoveAt(0)
}