You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:39:05