orbs Posted April 12, 2015 Share Posted April 12, 2015 (edited) this has been asked in the forum many times, i hope this function "Remarks" section can sum-up the idea with all its considerations and caveats. the thing is, the internal macro @OSVersion is not always up-to-date for the newest versions of windows, notably the preview releases, so a more direct approach is taken here. expandcollapse popup; #FUNCTION# ==================================================================================================================== ; Name ..........: _OSVersion ; Description ...: Returns the Windows version as registered in the registry. ; Syntax ........: _OSVersion([$sHostName = @ComputerName]) ; Parameters ....: $sHostName - [optional] The host name (or IP address) of the host to retrieve the informatino for. ; Return values .: Success - Returns a numeric decimal value corrsponding to Windows version. ; Failure - Returns 0 and sets @error to 1. ; Author ........: orbs ; Modified ......: ; Remarks .......: * Continuously updating list of Windows versions is posted at the MSDN link hereunder. Info as per March 2015: ; Operating system Version number ; ----------------- -------------- ; Windows 10 Technical Preview 10.0 ; Windows Server Technical Preview 10.0 ; Windows 8.1 6.3 ; Windows Server 2012 R2 6.3 ; Windows 8 6.2 ; Windows Server 2012 6.2 ; Windows 7 6.1 ; Windows Server 2008 R2 6.1 ; Windows Server 2008 6.0 ; Windows Vista 6.0 ; Windows Server 2003 R2 5.2 ; Windows Server 2003 5.2 ; Windows XP 64-Bit Edition 5.2 ; Windows XP 5.1 ; Windows 2000 5.0 ; * The returned value is numerical, although it is stored in the registry as a string (REG_SZ). This allows for ; numerical comparison, for example _OSVersion()<6 means XP/2003 or earlier, _OSVersion()>6.1 means the new ; and arguably hideous generation of Windows (featuring the "Metro" crap). ; * The relevant registry key is not affected by WOW64 (see 2nd MSDN link hereunder), so no need to use HKLM64. ; * The relevant registry branch contains other useful information, e.g. a string representation of the OS name ; and Service Pack level. For example: ; "Windows 7 Ultimate" data is stored in value "ProductName" ; "Service Pack 1" data is stored in value "CSDVersion" ; * To retrieve the information for another host over network, adequate connectivity and authorization required. ; Related .......: ; Link ..........: https://msdn.microsoft.com/en-us/library/windows/desktop/ms724832.aspx ; https://msdn.microsoft.com/en-us/library/windows/desktop/aa384253(v=vs.85).aspx ; http://stackoverflow.com/questions/14648796/currentversion-value-in-registry-for-each-windows-operating-system ; Example .......: No ; =============================================================================================================================== Func _OSVersion($sHostName = @ComputerName) Local $sOSVersion = RegRead('\\' & $sHostName & '\HKLM\Software\Microsoft\Windows NT\CurrentVersion', 'CurrentVersion') If @error Then Return SetError(1, 0, 0) Return Number($sOSVersion) EndFunc ;==>_OSVersion Edited April 12, 2015 by orbs GordonFreeman 1 Signature - my forum contributions: Spoiler UDF: LFN - support for long file names (over 260 characters) InputImpose - impose valid characters in an input control TimeConvert - convert UTC to/from local time and/or reformat the string representation AMF - accept multiple files from Windows Explorer context menu DateDuration - literal description of the difference between given dates Apps: Touch - set the "modified" timestamp of a file to current time Show For Files - tray menu to show/hide files extensions, hidden & system files, and selection checkboxes SPDiff - Single-Pane Text Diff Link to comment Share on other sites More sharing options...
orbs Posted August 12, 2015 Author Share Posted August 12, 2015 (edited) HEADS UP!Windows 10 RTM returns 6.3, not 10.0 as expected. Microsoft, for their own reasons, chose to cripple this entry in the registry. do NOT use this function for Windows 10. instead, an alternative method was suggested by all-mighty KaFu here:EDIT: the rest of the said registry branch still contains relevant information. it seems that only the CurrentVersion value is crippled. Edited August 12, 2015 by orbs KaFu 1 Signature - my forum contributions: Spoiler UDF: LFN - support for long file names (over 260 characters) InputImpose - impose valid characters in an input control TimeConvert - convert UTC to/from local time and/or reformat the string representation AMF - accept multiple files from Windows Explorer context menu DateDuration - literal description of the difference between given dates Apps: Touch - set the "modified" timestamp of a file to current time Show For Files - tray menu to show/hide files extensions, hidden & system files, and selection checkboxes SPDiff - Single-Pane Text Diff Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now