你能区分Windows 7和Windows Server 2008 R2吗?

4

我需要完成的任务是通过自动化默默地将PowerShell 5部署到工作站,但要防止我的部署影响服务器,以免导致世界崩溃。

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

$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构建。
我在stackoverflow上看了一下,没有找到任何直接解决我的问题的东西。
1个回答

3

查询 Win32_OperatingSystem。其中一个属性是 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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接