【问题标题】:Can you differentiate between Windows 7 and Windows Server 2008 R2?您能区分 Windows 7 和 Windows Server 2008 R2 吗?
【发布时间】:2017-02-03 14:27:15
【问题描述】:

我所追求的用例:我的目标是能够通过自动化将 PowerShell 5 仅部署到工作站,我需要能够防止我的部署撞到服务器,以便我不要让世界自发崩溃。

我目前正在使用以下代码来获取power shell版本

$BuildVersion = [System.Environment]::OSVersion.Version
Write-Host($BuildVersion)

并使用

if ($BuildVersion.Major -le '6')

为了排除任何不运行至少 7 的计算机,但我发现我会遇到问题,因为 Windows 7 和 Windows Server 2008 R2 具有相同的主要内部版本号。

我的第一个想法是更改代码以仅允许特定的内部版本号

但通过谷歌搜索,我发现 7 和 2008 R2 共享相同的内部版本号 6.1.7601。

我想知道的是,PowerShell 2.0 中是否有其他方法可以识别满足我需求的 Windows 版本。

我查看了堆栈溢出,但找不到任何可以直接解决我的问题的方法。

【问题讨论】:

    标签: powershell powershell-2.0


    【解决方案1】:

    查询Win32_OperatingSystem class。它的属性之一是ProductType 值。 1 表示客户端(即 Windows 7),2 表示域控制器,3 表示服务器(均为 Windows Server 2008 R2)。

    对于版本,[System.Version] 类型通常具有可比性,因此您不必同时检查 MajorMinor 版本($BuildVersion.Major -eq 6 将包括 Vista 和 7)

    # Define a minimum version (Win7 family pre-release build)
    $MinimumVersion = [version]'6.1'
    
    # Fetch ProductType from WMI
    $OSType = (Get-WmiObject -Class Win32_OperatingSystem -Property ProductType).ProductType
    
    if($OSType -eq 1 -and [Environment]::Version -ge $MinimumVersion){
        # client OS, 7 or newer
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-16
      • 2011-08-29
      • 2018-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多