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

基于OS版本修改注册表的PowerShell条件判断语句失效问题求助

PowerShell操作系统版本判断失效问题修复方案

核心问题原因

  • 版本比较类型错误:(Get-WmiObject win32_operatingsystem).version返回的是字符串类型,直接用-lt/-gt和数值做比较时,会按照字符串逐字符匹配的规则执行,和版本号的数值比对逻辑完全不一致,导致条件判断永远不生效。
  • 注册表逻辑倒置:现有代码判断AzureADAccount路径存在时才执行新建项操作,会直接抛出「项已存在」的报错,实际应该是路径不存在时才需要新建。
  • 路径操作风险:直接用cd切换注册表路径容易受上下文环境影响,使用完整路径操作稳定性更高。
  • 废弃API兼容问题:Get-WmiObject是PowerShell已废弃的接口,替换为Get-CimInstance兼容性更好。

修复后代码

# 获取系统版本并转换为Version类型用于比对
$verCheckOS = [Version](Get-CimInstance Win32_OperatingSystem).Version

# 如需要包含17134、19043两个版本边界,可将-gt/-lt替换为-ge/-le
if ($verCheckOS -lt [Version]"10.0.19043" -and $verCheckOS -gt [Version]"10.0.17134")
{
    $regPath = "HKLM:\SOFTWARE\Policies\Microsoft\AzureADAccount"
    # 路径不存在时创建项,加-Force避免父路径权限问题报错
    if (-not (Test-Path $regPath))
    {
        New-Item -Path $regPath -Force | Out-Null
    }
    # 设置注册表属性,加-Force避免属性已存在时报错
    New-ItemProperty -Path $regPath -Name "AllowPasswordReset" -Value 1 -PropertyType DWord -Force | Out-Null
}

注意事项

  • 操作HKLM注册表路径需要以管理员身份运行PowerShell,否则会报权限不足错误。
  • 若需要包含版本边界(比如等于10.0.17134或者10.0.19043的系统也执行操作),将比较符-gt替换为-ge、-lt替换为-le即可。

内容的提问来源于stack exchange,提问作者harryc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:24:05