PowerShell检测方法编写求助:判断用户配置文件是否存在及大小是否达标
问题根因
你之前的报错是因为文件不存在时直接调用Get-Item $path会抛出错误,导致$targetfile变量赋值失败,先判断路径是否存在的思路完全正确,补全逻辑即可。
修正后完整脚本
1. 可选优化:更简洁的当前用户获取方式
原来的字符串分割逻辑可以简化,同时替换已弃用的Get-WmiObject为官方推荐的Get-CimInstance:
Function CurrentUser { $fullUserName = (Get-CimInstance Win32_ComputerSystem).UserName # 格式为 域名\用户名 或 本地计算机名\用户名,取第二部分即可 return $fullUserName.Split('\')[1] }
2. 路径定义与检测逻辑
$user = CurrentUser # 用Join-Path拼接路径,避免手动拼写出错 $targetCfgPath = Join-Path "C:\Users\$user" "AppData\Roaming\folder\folder\settings.cfg" $expectedSize = 26831 # 先判断文件不存在的场景 if (-not (Test-Path $targetCfgPath -PathType Leaf)) { Write-Host "NOT installed" } # 文件存在时校验大小 elseif ((Get-Item $targetCfgPath).Length -ge $expectedSize) { Write-Host "installed" } # 文件存在但大小不符合要求 else { Write-Host "NOT installed" }
逻辑说明
Test-Path加了-PathType Leaf参数,确保匹配的是文件而非同名文件夹,避免误判- 只有确认文件存在后才会执行
Get-Item取大小,不会再出现不存在时的报错,也不会出现取字符串长度的问题 - 把
$expectedSize定义为变量,后续需要调整阈值时只需要改一处即可
如果需要更紧凑的写法,也可以把两个判断条件合并:
# 适用于所有PowerShell版本 $isInstalled = (Test-Path $targetCfgPath -PathType Leaf) -and ((Get-Item $targetCfgPath).Length -ge $expectedSize) if ($isInstalled) { Write-Host "installed" } else { Write-Host "NOT installed" }
内容的提问来源于stack exchange,提问作者Jimbobbily
相关产品推荐
相关产品推荐

