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" } |
Copyright © MURA All rights reserved.