#62003 - 2002-01-11 01:48 AM
Re: Determing an OS
|
Anonymous
Anonymous
Unregistered
|
this is the one i wrote is work great for all OS try it you will like itcode:
:check_osDIM subver DIM type SELECT Case @inwin=1 $kernel="WinNT" $type=ReadValue("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ProductOptions","ProductType") SELECT Case @dos=5.0 $system="Win2k"
SELECT Case $type="ServerNT" $os_type="Server" Case $type="WinNT" $os_type="Professional" ENDSELECT Case @dos=4.0 $system="WinNT" SELECT Case $type="LANMANNT" $os_type="Domain Controller" Case $type="ServerNT" $os_type="Member Server" Case $type="WinNT" $os_type="Workstation" ENDSELECT ENDSELECT $svcpack=ReadValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion","CSDVersion") Case @inwin=2 $kernel="Win9x" $subver=ReadValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion","SubVersionNumber") SELECT Case @dos="???" $system="WinME" $os_type="A" Case @dos="4.10" $system="Win98" SELECT Case $subver= $os_type="SE" Case $subver="a" $os_type="A" ENDSELECT Case @dos="4.0" $system="Win95" SELECT Case $subver=" C" $os_type="OSR2.5" Case $subver=" B" $os_type="OSR2" Case $subver="a" $os_type="A" ENDSELECT ENDSELECT $svcpack="" Case 1 $kernel="unknown" $system="unknown" $os_type="unknown" $svcpack="" ENDSELECT ;--------------------------- $report_entry = "Kernel type" $report_value = $kernel gosub "report" ;--------------------------- ;--------------------------- $report_entry = "Operating System" $report_value = $system + " " + $svcpack gosub "report" ;--------------------------- ;--------------------------- $report_entry = "OS type" $report_value = $os_type gosub "report" ;--------------------------- ; downward compatibility for older scripts $os = "" $win_9x = "" If @INWIN=2 Select Case @DOS = "4.0" $os = "Windows 95" $win_9x = "yes" Case @DOS = "4.10" $os = "Windows 98" $win_9x = "yes" EndSelect Endif Return
|
Top
|
|
|
|
#62004 - 2002-01-11 02:26 AM
Re: Determing an OS
|
NTDOC
Administrator
   
Registered: 2000-07-28
Posts: 11625
Loc: CA
|
Well, if you do want a full on OS script there are a couple out there.I like this one from MCA which works with KiXtart v3.6x code:
; http://home.wanadoo.nl/scripting ; http://home.wanadoo.nl/scripting/download/os.kix ; IF setconsole("hide") ; ENDIF ; ; NT/95 calculates os - Kixtart 3.62, 3.63, 4.00 ; ; (c) scripting@wanadoo.nl - 2000, 2001 ; ; vs 2.09 - program (calculates OS version with service pack) ; ; 1.00 (20000715) original version ; 2.00 (20010330) - add "windows ME" ; - returns $os + $os_type values ; 2.01 (20010401) - kixtart 2001 beta1 compliancy ; 2.02 (20010405) - remove cutting $os value ; 2.03 (20010701) - add "windows XP beta" + "windows 2000 terminal server" ; (input by NTDOC) ; 2.04 (20010725) - minor fix ; 2.05 (20011115) - fix "windows 2000 terminal server" was presented as ; "windows 2000 server" ; (input by NTDOC) ; 2.06 (20011115) - add "windows NT terminal server" ; (input by Mike Wade) ; 2.07 (20011115) - add "windows XP terminal server" ; - improvement terminal server ; - suppress SetConsole("hide") ; 2.08 (20011201) - add "windows XP home" (input by Mike Wade) ; 2.09 (20011201) - incorrect "service pack" result by "Windows2000 SP3, RC 3.51" ; (input by NTDOC) ; $prgm_version="2.09" IF (@inwin = 1) $NT_mode="yes" ELSE $NT_mode="no" ENDIF $os="" $os_dos=@dos $os_product=ReadValue("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ProductOptions","ProductType") $os_productSuite=ReadValue("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ProductOptions","ProductSuite") $os_service_pack="" $os_subversion=ReadValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion","SubVersionNumber") SELECT CASE ($NT_mode = "yes") AND ($os_product <> "WinNT") AND ($os_dos = "5.1") AND (Instr($os_productSuite,"Terminal Server") <> 0) $os="XP_Terminal_Server" CASE ($NT_mode = "yes") AND ($os_product <> "WinNT") AND ($os_dos = "5.1") ; - Windows XP Server $os="XP_Server" CASE ($NT_mode = "yes") AND ($os_product = "WinNT") AND ($os_dos = "5.1") AND ($os_productSuite = "personal") ; - Windows XP Home $os="XP_Home" CASE ($NT_mode = "yes") AND ($os_product = "WinNT") AND ($os_dos = "5.1") ; - Windows XP Professional $os="XP_Professional" CASE ($NT_mode = "yes") AND ($os_product <> "WinNT") AND ($os_dos = "5.0") AND (Instr($os_productSuite,"Terminal Server") <> 0) $os="W2K_Terminal_Server" CASE ($NT_mode = "yes") AND ($os_product <> "WinNT") AND ($os_dos = "5.0") ; - Windows 2000 - $os="W2K_Server" CASE ($NT_mode = "yes") AND ($os_product = "WinNT") AND ($os_dos = "5.0") $os="W2K_Professional" CASE ($NT_mode = "yes") AND ($os_product = "LANMANNT") ; - Windows NT - $os="NT4_Domain_Controller" CASE ($NT_mode = "yes") AND ($os_product = "ServerNT") AND (Instr($os_productSuite,"Terminal Server") <> 0) $os="NT4_Terminal_Server" CASE ($NT_mode = "yes") AND ($os_product = "ServerNT") $os="NT4_Member_Server" CASE ($NT_mode = "yes") AND ($os_product = "WinNT") $os="NT4" CASE ($NT_mode <> "yes") AND (@dos = "4.90") $os="ME" CASE ($NT_mode <> "yes") AND ($os_dos = "4.10") AND (INSTR(LCASE($os_subversion),"c") <> 0) ; - Windows 98 - $os="W98c" CASE ($NT_mode <> "yes") AND ($os_dos = "4.10") AND (INSTR(LCASE($os_subversion),"b") <> 0) $os="W98b" CASE ($NT_mode <> "yes") AND ($os_dos = "4.10") AND (INSTR(LCASE($os_subversion),"a") <> 0) $os="W98a" CASE ($NT_mode <> "yes") AND ($os_dos = "4.10") $os="W98" CASE ($NT_mode <> "yes") AND ($os_dos = "4.0") AND (INSTR(LCASE($os_subversion),"c") <> 0) ; - Windows 95 - $os="W95c" CASE ($NT_mode <> "yes") AND ($os_dos = "4.0") AND (INSTR(LCASE($os_subversion),"b") <> 0) $os="W95b" CASE ($NT_mode <> "yes") AND ($os_dos = "4.0") AND (INSTR(LCASE($os_subversion),"a") <> 0) $os="W95a" CASE ($NT_mode <> "yes") AND ($os_dos = "4.0") $os="W95" CASE 1 $os="???" ; - undetermined - ENDSELECT ; $os_service_pack="" SELECT CASE ($NT_mode = "yes") AND ($os_dos = "5.1") ; - Windows XP $os_service_pack=ReadValue("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion","BuildLab") IF (len($os_service_pack) <> 0) $os_service_pack=LTRIM(RTRIM($os_service_pack)) $os=substr($os,1,3)+"_"+LTRIM(RTRIM($os_service_pack)) ENDIF CASE ($NT_mode = "yes") AND ($os_dos <> "5.1") ; Windows NT4 + W2K $os_service_pack=ReadValue("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion","CSDVersion") IF (len($os_service_pack) <> 0) $os_service_pack=LTRIM(RTRIM($os_service_pack)) IF (instr($os_service_pack,",") <> 0) $os=substr($os,1,3)+"_"+substr($os_service_pack,instr($os_service_pack,",")-1,1) ELSE $os=substr($os,1,3)+"_"+substr($os_service_pack,len($os_service_pack),1) ENDIF ENDIF CASE 1 ; Windows 95, 98 + ME ENDSELECT ; $os_type="" $os_dos=@dos SELECT CASE ($NT_mode = "yes") AND ($os_dos = "5.1") ; - Windows XP - $os_type="XP" CASE ($NT_mode = "yes") AND ($os_dos = "5.0") ; - Windows 2000 - $os_type="W2K" CASE ($NT_mode = "yes") ; - Windows NT - $os_type="NT4" CASE ($NT_mode <> "yes") AND ($os_dos = "4.90") ; - Windows ME - $os_type="ME" CASE ($NT_mode <> "yes") AND ($os_dos = "4.10") ; - Windows 98 - $os_type="W98" CASE ($NT_mode <> "yes") AND ($os_dos = "4.0") ; - Windows 95 - $os_type="W95" CASE 1 $os_type="???" ; - undetermined - ENDSELECT $os_type=LTRIM(RTRIM(substr($os_type+" ",1,3))) ; IF ($NT_mode = "yes") ? "$$os "+$os ; <--- $os_type + service pack code ? "$$os_type "+$os_type ? "$$os_service_pack "+$os_service_pack ELSE ? "$$os "+$os ; <--- $os_type + service pack code ? "$$os_type "+$os_type ENDIF
[ 11 January 2002: Message edited by: NTDOC ]
|
Top
|
|
|
|
#62005 - 2002-01-11 04:04 AM
Re: Determing an OS
|
bleonard
Seasoned Scripter
   
Registered: 2001-01-19
Posts: 581
Loc: Chicago, IL
|
Well, I guess I'll post my variation on MCA's script, including identifying WinNT Service Pack 6a installations.Bill code:
; REM ** Set reusable variables for registry keys, O/S values SELECT CASE (@INWIN = 1) $HKLMSS = READVALUE ("HKEY_LOCAL_MACHINE\SYSTEM\Select", "Current") $CurCtrStr = "ControlSet00"+$HKLMSS $HKLMSCCS = "HKEY_LOCAL_MACHINE\System\$CurCtrStr" $HKLMSMWNTCV = "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion" $OSSui = UCASE (READVALUE ("$HKLMSCCS\Control\ProductOptions", "ProductSuite")) $OSTyp = UCASE (READVALUE ("$HKLMSCCS\Control\ProductOptions", "ProductType")) $OSVer = READVALUE ("$HKLMSMWNTCV", "CurrentVersion") CASE (1) $HKLMSMWCV = "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion" $OSSvc = LTRIM (RTRIM (UCASE (READVALUE ("$HKLMSMWCV", "SubVersionNumber")))) $OSVer = READVALUE ("$HKLMSMWCV", "VersionNumber") ENDSELECT ; REM ** Determine O/S, and O/S Level for Win9x boxes SELECT CASE (@DOS >= 5.1) $OS = "WinXP" CASE (@DOS >= 5.0) $OS = "Win2K" CASE (@DOS >= 4.0) AND (@INWIN = 1) $OS = "WinNT" CASE ($OSVer >= "4.90.3000") $OS = "WinME" $OSLvl = "OEM" CASE ($OSVer >= "4.10.2222") $OS = "Win98" $OSLvl = "SE" CASE ($OSVer >= "4.10.1998") $OS = "Win98" $OSLvl = "OEM" CASE (($OSVer >= "4.03.1214") AND ($OSSvc = "C")) $OS = "Win95" $OSLvl = "SR 2.5" CASE (($OSVer >= "4.03.1212") AND ($OSVer =< "4.03.1214")) $OS = "Win95" $OSLvl = "SR 2.1" CASE ($OSVer >= "4.00.1111") $OS = "Win95" $OSLvl = "SR 2" CASE (($OSVer >= "4.00.950") AND ($OSSvc = "A")) $OS = "Win95" $OSLvl = "SP 1" CASE ($OSVer >= "4.00.950") $OS = "Win95" $OSLvl = "OEM" CASE (1) $AdmErr = $Err+1 $OSAbv = "Unknown" GOTO EndScript ENDSELECT
; REM ** Determine WinXP/2K/NT Server/Workstation installed Service Pack level IF (@INWIN = 1) ; REM ** Determine Service Pack level $RC = READVALUE ("$HKLMSMWNTCV\Hotfix\Q246009", "Installed") ; REM ** Check if running WinNT SP6a SELECT CASE ($OS = "WinNT") AND ($RC = "1") $OSSvc = "Service Pack 6a" ; REM ** See http://www.microsoft.com/ntserver/support/faqs/sp6faq.asp (2001.12.26) CASE ($OS = "WinXP") $OSSvc = LTRIM (RTRIM (READVALUE ("$HKLMSMWNTCV", "BuildLab"))) CASE (1) $OSSvc = LTRIM (RTRIM (READVALUE ("$HKLMSMWNTCV", "CSDVersion"))) ENDSELECT
; REM ** Determine WinXP/2K/NT Server/Workstation role SELECT CASE (INSTR ($OSSui, "TERMINAL SERVER") <> 0) $OSLvl = "Terminal" ; REM ** WinXP/2K/NT Terminal Server CASE (INSTR ($OSSui, "ENTERPRISE") <> 0) $OSLvl = "Enterprise" ; REM ** WinNT Enterprise Server CASE (INSTR ($OSTyp, "LANMANNT") <> 0) $OSLvl = "DomainController" ; REM ** WinNT Domain Controller CASE (INSTR ($OSTyp, "SERVERNT") <> 0) $OSLvl = "MemberServer" ; REM ** WinNT Member Server CASE (INSTR ($OSTyp, "WINNT") = 0) $OSLvl = "Server" ; REM ** Win2K Server (Domain/Member) CASE (INSTR ($OSSui, "PERSONAL") <> 0) $OSLvl = "Home" ; REM ** WinXP Home Edition CASE (INSTR ($OSTyp, "WINNT") <> 0) AND (@DOS >= 5.0) $OSLvl = "Pro" ; REM ** WinXP/2K Professional CASE (INSTR ($OSTyp, "WINNT") <> 0) AND (@DOS >= 4.0) $OSLvl = "Wksta" ; REM ** WinNT Workstation CASE (1) $AdmErr = $Err+1 $OSLvl = "Unknown" GOTO EndScript ENDSELECT ENDIF
[ 11 January 2002: Message edited by: bleonard ] [ 11 January 2002: Message edited by: bleonard ]
|
Top
|
|
|
|
#62007 - 2002-01-11 04:04 PM
Re: Determing an OS
|
Corky
Fresh Scripter
Registered: 2002-01-11
Posts: 13
|
Hi Guys Is it me or are people trying to be overly complicated with scripts. Why not use the @ProductType macro vor OS version and the @CSD macro for service pack determination. I know these only work in V 4 though ??
quote: Surfs Up!
|
Top
|
|
|
|
Moderator: Glenn Barnas, NTDOC, Arend_, Jochen, Radimus, Allen, ShaneEP, Ruud van Velsen, Mart
|
0 registered
and 1383 anonymous users online.
|
|
|