Home > Windows にまつわる e.t.c.

Windows のバージョンを PowerShell で確認する


Windows のバージョンを確認する方法は色々ありますが、PowerShell は WMI を簡単にハンドリングできるので、僕は WMI を使う方法をよく使います。

こんな感じですね。

$OSData = Get-WmiObject Win32_OperatingSystem
$BuildNumber = $OSData.BuildNumber
$strVersion = $OSData.Version
$strVersion = $strVersion.Replace( ".$BuildNumber", "" )
$WinVer = [decimal]$strVersion
if( $WinVer -lt 6.0 ){
    echo "not support vertion"
}
elseif(($WinVer -ge 6.0) -and ($WinVer -lt 6.1)){
    # 6.0
    echo "Windows Vista or Windows Server 2008"
}
elseif(($WinVer -ge 6.1) -and ($WinVer -lt 6.2)){
    # 6.1
    echo "Windows 7 or Windows Server 2008 R2"
}
elseif(($WinVer -ge 6.2) -and ($WinVer -lt 6.3)){
    # 6.2
    echo "Windows 8 or Windows Server 2012"
}
elseif(($WinVer -ge 6.3) -and ($WinVer -lt 6.4)){
    # 6.3
    echo "Windows 8.1 or Windows Server 2012 R2"
}
else {
    echo "Windows 10 and later or Windows Server 2015 and later"
}

WMI の Version は「6.3.9600」の様にOSバージョン+ビルド番号にやっているので、ビルド番号を消してバージョンだけにしています。

職場環境のリモートデスクトップライセンスサーバー(RDLS)をOSバージョン別(WS08/WS12)に立てているので、リモートデスクトップセッションホスト(RDSH)を構築する時に、向け先コントロールする必要があって、こんな感じに使っています。

##### ユーザーモード指定
(gwmi -Class Win32_TerminalServiceSetting -Namespace root\cimv2\TerminalServices).ChangeMode(4)

### レジストリ追加/更新
function RegSet( $RegPath, $RegKey, $RegKeyType, $RegKeyValue ){
    # レジストリそのものの有無確認
    $Elements = $RegPath -split "\\"
    $RegPath = ""
    $FirstLoop = $True
    foreach ($Element in $Elements ){
        if($FirstLoop){
            $FirstLoop = $False
        }
        else{
            $RegPath += "\"
        }
        $RegPath += $Element
        if( -not (test-path $RegPath) ){
            echo "Add Registry : $RegPath"
            md $RegPath
        }
    }

    # Key有無確認
    Get-ItemProperty $RegPath -name $RegKey
    # キーがあった時
    if( $? ){
        Set-ItemProperty $RegPath -name $RegKey -Value $RegKeyValue
    }
    # キーが無かった時
    else{
        # キーを追加する
        New-ItemProperty $RegPath -name $RegKey -PropertyType $RegKeyType -Value $RegKeyValue
    }
    Get-ItemProperty $RegPath -name $RegKey
}

##### RDLS 選択
$RegPath = "HKLM:\SYSTEM\CurrentControlSet\Services\TermService\Parameters\LicenseServers"
$RegKey = "SpecifiedLicenseServers"
$RegKeyType = "MultiString"

$OSData = Get-WmiObject Win32_OperatingSystem
$BuildNumber = $OSData.BuildNumber
$strVersion = $OSData.Version
$strVersion = $strVersion.Replace( ".$BuildNumber", "" )
$WinVer = [decimal]$strVersion
if( $WinVer -lt 6.0 ){
    echo " not suport vertion"
}
elseif(($WinVer -ge 6.0) -and ($WinVer -lt 6.2)){
    # WS08/R2
    echo "WS08 or WS08R2"
    $RegKeyValue = "192.168.100.50", "192.168.100.51"
    RegSet $RegPath $RegKey $RegKeyType $RegKeyValue
}
elseif(($WinVer -ge 6.2) -and ($WinVer -lt 6.4)){
    # WS12/R2
    echo "WS12 or WS12R2"
    $RegKeyValue = "192.168.100.60", "192.168.100.61"
    RegSet $RegPath $RegKey $RegKeyType $RegKeyValue
}
else {
    echo "WS15 and later"
}

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.