你能区分 Windows 7 和 Windows Server 2008 R2 吗?
Can you differentiate between Windows 7 and Windows Server 2008 R2?
我所追求的用例:我的目标是能够通过自动化将 PowerShell 5 静默部署到工作站,我需要能够防止我的部署影响服务器,所以我不会让世界自行崩溃。
我目前正在使用下面的代码抢权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 满足我需求的构建。
我查看了堆栈溢出,但找不到任何可以直接解决我的问题的东西。
查询Win32_OperatingSystem
class。它的属性之一是 ProductType
值。 1
表示客户端(即 Windows 7),2
表示域控制器,3
表示服务器(均为 Windows Server 2008 R2)。
对于版本,[System.Version]
类型在顺序上是可比较的,因此您不必同时检查 Major
和 Minor
版本($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
}
我所追求的用例:我的目标是能够通过自动化将 PowerShell 5 静默部署到工作站,我需要能够防止我的部署影响服务器,所以我不会让世界自行崩溃。
我目前正在使用下面的代码抢权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 满足我需求的构建。
我查看了堆栈溢出,但找不到任何可以直接解决我的问题的东西。
查询Win32_OperatingSystem
class。它的属性之一是 ProductType
值。 1
表示客户端(即 Windows 7),2
表示域控制器,3
表示服务器(均为 Windows Server 2008 R2)。
对于版本,[System.Version]
类型在顺序上是可比较的,因此您不必同时检查 Major
和 Minor
版本($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
}