回答:
GUI:設定、システム、概要
これが「適切な」方法であるかどうかはわかりませんが、このコマンドを使用して、Win10の音声化/話された「バージョン」(1511、1607など)を取得できます。
Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ReleaseId
これは、ビルド番号をWin10の「バージョン」に関連付けるMicrosoftのページです(念のためバックアップリンク[wiki])。リモートPCからビルド番号を取得するのに役立ちました:wmic /node:HOSTNAME os get BuildNumber
(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ReleaseId).ReleaseId
(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name CurrentBuildNumber).CurrentBuildNumber
か、(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name CurrentBuild).CurrentBuild
ビルド番号のために
Windows 10のバージョンまたはビルド番号を確認することは、時間が経っても変わらないため、あまり役に立ちません。
最初の文が間違っていることがわかりました。これは以前のすべてのバージョンのWindowsに当てはまりましたが、現在は新しいWindows 10の世界にいます。最新のインサイダービルドのビルド番号は10525
、「RTM」と比較されます10240
。
コマンドラインでビルド番号を取得するには、いくつかの方法があります。
systeminfo.exe
(Get-CimInstance -ClassName Win32_OperatingSystem -Namespace root/cimv2).BuildNumber
(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name CurrentBuild).CurrentBuild
3つのうちの最後が最速です。
GUIを使用する場合は、winver.exeまたはほとんどのWindowsデスクトップアプリケーションのメニューのAbout
エントリを使用できHelp
ます。
サービスパックがなくなると、OSのパッチレベルはインストールされたアップデートに依存します。これらを見つけるには、GUI、systeminfo.exe、wmiなどいくつかの方法があります。
このようなことを行うための推奨される最も強力な方法は、PowerShellを使用することです。
Get-HotFix
のようなものを示しています:
Source Description HotFixID InstalledBy InstalledOn
------ ----------- -------- ----------- -----------
WIN10 Security Update KB3074663 NT AUTHORITY\SYSTEM 7/17/2015 12:00:00 AM
WIN10 Security Update KB3074667 NT AUTHORITY\SYSTEM 7/21/2015 12:00:00 AM
WIN10 Security Update KB3074674 NT AUTHORITY\SYSTEM 7/24/2015 12:00:00 AM
WIN10 Update KB3074678 NT AUTHORITY\SYSTEM 7/31/2015 12:00:00 AM
過去10日間の更新をフィルタリングできます。
Get-Hotfix | Where {$_.InstalledOn -gt $(Get-Date).AddDays(-10) -and $_.Description -eq "Update"}
または、最後にインストールされた3つの更新を表示します。
Get-Hotfix | Sort-object InstalledOn -Descending | Select -First 3
特定の更新プログラムがインストールされているかどうかを確認できます。
if ((get-hotfix -id kb3087916) -ne $null) {"patched..."}
最初に、次のような最新のパッチKB番号をオンラインで見つけることができます。
(New-Object Net.WebClient).DownloadString('https://microsoft.com/...')
そして、マシン上に存在するかどうかを確認します。
注:これは単なる例です。現在これらをリストしているページは知りませんが、それでも解析する必要があります。
問題は、時間の経過とともに、MicrosoftがWindows 10の機能を大幅に変更して、アプリやスクリプトを機能させるためにWindows 10の機能を確認する必要があることです。
バージョン番号を探すのではなく、必要な特定の機能がシステムに存在するかどうかを確認する方が良いでしょう。
WMIには現在、Windows 10バージョン(1607など)または完全なビルド番号(10.0.14393.577など)を完全に識別するために使用できるプロパティがありません。他のコメントで述べたように、この情報はレジストリのこのキーの下に表示されます。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
そのキーの次の値は、winver.exeプログラムによって表示される情報に対応しています。
ReleaseID = Version (name based on year/month of release: 1507, 1511, 1607, 1703, etc.)
CurrentBuild or CurrentBuildNumber = OS Build (part before period)
UBR = OS Build (part after period)
さらに、バージョン番号は、そのレジストリキーの次の2つの値に含まれています。
CurrentMajorVersionNumber = 10
CurrentMinorVersionNumber = 0
バージョン(1607など)が変更されるか、Insiderビルドがインストールされると、ビルドが変更されます。ただし、Microsoftのリリースリストに示されているように、UBR(Update Build Revision)は特定の更新で変更されます。
PowerShellでは、
[System.Environment]::OSVersion.Version
Major、Minor、Buildをレジストリキーと同じように返しますが、Revisionを常に0として報告するようです。Redditユーザーからの少しのコードは、Revision番号としてレジストリからのUBRを含む適切な置換を提供します。
$WinVer = New-Object -TypeName PSObject
$WinVer | Add-Member -MemberType NoteProperty -Name Major -Value $(Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion' CurrentMajorVersionNumber).CurrentMajorVersionNumber
$WinVer | Add-Member -MemberType NoteProperty -Name Minor -Value $(Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion' CurrentMinorVersionNumber).CurrentMinorVersionNumber
$WinVer | Add-Member -MemberType NoteProperty -Name Build -Value $(Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion' CurrentBuild).CurrentBuild
$WinVer | Add-Member -MemberType NoteProperty -Name Revision -Value $(Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion' UBR).UBR
$WinVer
私はこれを数回尋ねられたので、私はそれを投稿すると思いました。3つの方法があります。
詳細については、こちらをご覧ください:http : //mythoughtsonit.com/2015/07/what-build-version-of-windows-10-am-i-running/
WMIC QFE GET HotfixID, InstalledOn, Description | FINDSTR /I "KB3081438"
、2015年8月15日のCUがインストールされているかどうかを判断します。空白のInstalledOn日付は、システムがインストールを完了するために再起動していないことを示します。
それはで表示される以前に掲載方法の作業のいずれも、それらのどれもがOSのビルドを与えない設定 → についてセクション。累積的な更新情報がありません。
このようなことができます
$OSmBuild = (Get-WmiObject Win32_OperatingSystem).Version
if($OSmBuild -eq '10.0.10586')
{
# Windows 10.0.10586.0
$164 = Get-HotFix | where { $_.HotFixID -eq 'KB3140768' }
$122 = Get-HotFix | where { $_.HotFixID -eq 'KB3140743' }
$104 = Get-Hotfix | where { $_.HotfixID -eq 'KB3135173' }
if($104 -and (!($122)) -and (!($164)))
{
Write-Host '104 installed'
}
elseif($104 -and $122 -and (!($164)))
{
Write-Host '122 installed'
}
elseif($104 -and $122 -and $164)
{
Write-Host '164 installed'
}
}
PowerShellスクリプトで使用しますが、常に1ライナーであったものを使用するため、監視が難しくなります。ここで更新を見ることができます:
マイクロソフトがパッチを更新してBuildNumberの変更を開始することを願っています。
Win32_OperatingSystem.Version
あなたが説明した方法で動くべきだとは言いませんでしたが、ビルドごとに変化しwinver
ています(言い換えれば、スクリプトに問題があると言います)。
レジストリからバージョンを取得できます。これを行うPowerShellスニピットを次に示します。
function Get-RegistryValue($key, $value) {
(Get-ItemProperty $key $value).$value
}
$a1 = Get-RegistryValue "HKLM:\software\microsoft\windows nt\currentversion" CurrentBuild
$a2 = Get-RegistryValue "HKLM:\software\microsoft\windows nt\currentversion" UBR
Write-Host Version $a1'.'$a2
PowerShellは常に答えです。
Get-CimInstance win32_operatingsystem
詳しくは:
Get-CimInstance Win32_OperatingSystem | Select-Object buildnumber,version
戻り値:
ビルド番号バージョン
----------- -------
10240 10.0.10240
これを使用してその情報を非常に迅速に取得できます。さらに、必要に応じて機能に組み込み、フリート全体からその情報を取得するために使用できます。
ADドメインでは、PowerShellのGet-ADComputerコマンドレットを使用できます
Get-ADComputer -Filter {OperatingSystem -eq "Windows 10 Pro"} -Property * | Format-Table Name,OperatingSystem,OperatingSystemVersion -Wrap -Auto
FORコマンドでReg Queryを使用して、Buildversion、たとえば1607を取得できます。
for /f "usebackq skip=2 tokens=3" %f in (`reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ReleaseID`) do (set buildver=%f)
単一のリモートコンピューターのWindows 10バージョンとそのリビジョンを表示する方法を見つけようとして、PowerShellのバージョンリビジョンがWindowsリビジョンに続いていることに気付きました。
次のスクリプトを作成することになりました。更新を完了するためにリモートコンピューターを再起動する必要があるかどうかを確認するテストを追加しました。
$OSChecked = (Read-Host "Computer Name?")
if (Test-Connection -ComputerName $OSChecked -Count 1 -ErrorAction SilentlyContinue)
{
if ($((Get-Service WinRM -ComputerName $OSChecked).Status) -eq "stopped")
{
(Get-Service WinRM -ComputerName $OSChecked).Start()
}
Write-Host "`n$((Get-WmiObject win32_computersystem -ComputerName $OSChecked).Name) " -NoNewline ; Invoke-Command -ComputerName $OSChecked -ScriptBlock{if (Get-Item "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired" -ErrorAction SilentlyContinue) {Write-Host "Restart Required!" -BackgroundColor DarkYellow -ForegroundColor White}}
Invoke-Command -ComputerName $OSChecked -ScriptBlock{Write-Host "Version $((Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ProductName) $((Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ReleaseId), revision $(($PSVersionTable).PSVersion.Revision)"}
}
これにより、このタイプの結果が得られます。
Computer_Name Version Windows 10 Enterprise 1703, revision 296
ADドメインは、OUの全コンピュータが含まれている変数で、あなたの単一<コンピュータ名>を置き換えることができます。
Write-Host "Version $((Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ProductName) $((Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ReleaseId), revision $(($PSVersionTable).PSVersion.Revision)"
、Windows 10 Pro 1803, revision 1000
10.0.17730.1000で間違っています。ビルドバージョンは17730
コンプライアンスのためにどの累積パッチがインストールされているかを確認する必要があります。get-hotfixの使用は機能しますが、それ以降の累積パッチがインストールされると問題が発生します。最善の解決策は、修正プログラム部分を含むビルド番号を比較することです。コマンドラインでそれを取得する唯一の方法は、PowerShellで直接動作しないコマンドプロンプトverコマンドを使用することです。
$verstring = cmd.exe /c ver
[version]$Winbuild = [regex]::Match($verstring,"(\d+\.\d+\.\d+\.\d+)").value
if ($verstring -ge [version]"10.0.16299.755") {write-host "Compliant"}