PowerShell磁盘文件分配脚本优化:适配小磁盘剩余空间需求
调整PowerShell脚本实现磁盘空间分配以触发SNOW告警
需要在SNOW中配置磁盘使用率超过85%时的告警,经计算触发告警需占用总磁盘空间57GB。原脚本将57GB平分到除S盘(SWAP盘)外的磁盘,但部分磁盘剩余空间仅2-4GB,无法容纳平分后的文件大小,导致脚本执行失败。
以下是调整后的脚本,采用动态分配逻辑,确保每个目标磁盘仅分配其能容纳的空间,最终凑够57GB总占用量:
# 目标总占用空间(GB) $targetTotalGB = 57 # 每个磁盘预留少量剩余空间(避免磁盘完全占满,可按需调整) $reservePerDriveGB = 0.5 # 获取所有本地磁盘,排除S盘(SWAP盘)且剩余空间大于0的磁盘 $drives = Get-WmiObject Win32_LogicalDisk | Where-Object { $_.DriveType -eq 3 -and $_.DeviceID -ne "S:" -and $_.FreeSpace -gt 0 } # 转换磁盘剩余空间为GB,计算可分配最大空间,并按可分配空间从大到小排序 $drivesWithFreeSpace = $drives | ForEach-Object { [PSCustomObject]@{ DeviceID = $_.DeviceID FreeGB = [math]::Round($_.FreeSpace / 1GB, 2) MaxAllocatableGB = [math]::Max($_.FreeSpace / 1GB - $reservePerDriveGB, 0) } } | Sort-Object -Property MaxAllocatableGB -Descending $totalAllocated = 0 if ($drivesWithFreeSpace.Count -gt 0) { foreach ($drive in $drivesWithFreeSpace) { # 已达到目标总占用量则停止分配 if ($totalAllocated -ge $targetTotalGB) { break } # 计算当前磁盘可分配的空间:取最大可分配量与剩余需分配量的最小值 $allocatable = [math]::Min($drive.MaxAllocatableGB, $targetTotalGB - $totalAllocated) if ($allocatable -le 0) { Write-Host "$($drive.DeviceID) 剩余空间不足,跳过" continue } $filePath = "$($drive.DeviceID)\TestFile.txt" # 转换为字节数(每个空格占1字节,用于生成对应大小的文件) $allocatableBytes = [math]::Round($allocatable * 1GB) # 创建指定大小的文件,覆盖已存在的同名文件 try { $null = New-Item -Path $filePath -ItemType File -Value (" " * $allocatableBytes) -Force Write-Host "在$($drive.DeviceID)创建了$([math]::Round($allocatable,2)) GB的文件" $totalAllocated += $allocatable } catch { Write-Host "无法在$($drive.DeviceID)创建文件:$_" } } Write-Host "`n总已分配空间:$([math]::Round($totalAllocated,2)) GB,目标:$targetTotalGB GB" if ($totalAllocated -lt $targetTotalGB) { Write-Host "警告:所有可用磁盘剩余空间总和不足$targetTotalGB GB,无法达到目标占用量" } } else { Write-Host "未找到符合条件的本地磁盘" }
关键逻辑说明
- 单位转换:将Win32_LogicalDisk返回的字节数转换为GB,简化空间计算
- 磁盘排序:优先使用剩余空间多的磁盘,确保快速凑够目标总占用量
- 动态分配:每个磁盘仅分配其能容纳的最大空间(预留少量空间避免磁盘完全占满),不会超出磁盘剩余容量
- 异常处理:捕获文件创建时的错误,单个磁盘失败不会导致整个脚本终止
- 状态反馈:实时输出分配进度,最后汇总结果,若无法达到目标则给出明确警告
内容的提问来源于stack exchange,提问作者snehasish nandy
相关产品推荐
相关产品推荐

