You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何利用Get-WmiObject判断系统版本并执行对应PowerShell脚本?

根据Windows系统版本动态加载对应脚本的PowerShell实现

没问题,我帮你整理出一套完整的PowerShell实现方案,用来根据Windows系统版本自动下载并运行对应脚本,包括代理凭据的处理:

1. 代理凭据配置(可选但实用)

如果你的环境需要通过代理访问脚本服务器,可以先设置WebClient使用当前用户的默认网络凭据,避免手动输入账号密码:

# 设置代理使用当前用户的默认网络凭据
(New-Object Net.WebClient).Proxy.Credentials = [Net.CredentialCache]::DefaultNetworkCredentials

2. 核心:系统版本判断与脚本分发

我们通过Get-WmiObject Win32_OperatingSystem获取系统的完整名称(Caption属性),然后根据不同版本分支处理。这里推荐用switch -Wildcard来替代多个elseif,代码更简洁易维护:

# 获取当前操作系统的完整名称
$hostOS = (Get-WmiObject Win32_OperatingSystem).Caption

# 根据系统版本匹配并执行对应脚本
switch -Wildcard ($hostOS) {
    '*Windows 7*' {
        Write-Host "[+] 正在下载Windows 7专属脚本"
        $scriptUrl = "http://example.com/win7-script.ps1"
        # 下载并执行脚本
        IEX (New-Object Net.WebClient).DownloadString($scriptUrl)
        break
    }
    '*Windows 8*' {
        Write-Host "[+] 正在下载Windows 8专属脚本"
        $scriptUrl = "http://example.com/win8-script.ps1"
        IEX (New-Object Net.WebClient).DownloadString($scriptUrl)
        break
    }
    '*Windows 10*' {
        # 可以扩展更多版本的处理逻辑
        Write-Host "[+] 正在下载Windows 10专属脚本"
        $scriptUrl = "http://example.com/win10-script.ps1"
        IEX (New-Object Net.WebClient).DownloadString($scriptUrl)
        break
    }
    default {
        Write-Host "[!] 无法识别的系统版本: $hostOS"
        # 可选:添加默认处理逻辑,比如下载通用脚本或抛出提示
    }
}

关键注意事项

  • 系统名称匹配:如果你的系统Caption包含更详细的版本后缀(比如“Microsoft Windows 7 专业版”),用-Wildcard的模糊匹配比直接-eq更可靠,不会因为版本后缀导致匹配失败。
  • 安全提醒IEX(Invoke-Expression)会直接执行远程下载的脚本,在生产环境中务必确保脚本来源是完全可信的,避免引入安全风险。
  • 替代写法:如果你的PowerShell版本是5.1及以上,也可以用Invoke-WebRequest(别名iwr)来下载脚本,写法如下:
    IEX (iwr -Uri $scriptUrl -UseDefaultCredentials).Content
    

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

火山引擎 最新活动