OEM Lizenzen zum Paket activate_win hinzufügen

Antworten
boven
Beiträge: 9
Registriert: 30 Mai 2017, 08:46

OEM Lizenzen zum Paket activate_win hinzufügen

Beitrag von boven »

Hallo, mir ist eben aufgefallen, dass OEM Lizenzen durch activate_win nicht installiert/aktiviert werden.
(OEM-Lizenzen lassen sich, meines Wissensstands nach, leider nicht per unattend.xml während der Betriebssysteminstallation auslesen)

Mein Vorschlag:
Hinzufügen des Werts "OEM licensekey" in die Propertylist "source"

Änderung an der setup.ins:

Code: Alles auswählen

; Copyright (c) uib gmbh (www.uib.de)
; This sourcecode is owned by uib
; and published under the Terms of the General Public License.
; credits: http://www.opsi.org/credits/

[Actions]
requiredWinstVersion >= "4.11.5.14"

DefVar $LogDir$
DefVar $ProductId$  
DefVar $LicenseRequired$
DefVar $LicenseKey$
DefVar $LicensePool$
DefVar $poolOrKey$
DefVar $source$
DefVar $httpproxy$
DefVar $exitcodeState$
DefVar $exitcodeActivation$

;----------------------------------<neu>------------------------------------------
DefStringList $oemkey$
;----------------------------------<\neu>------------------------------------------


Set $LogDir$ = "%SystemDrive%\tmp"

Set $ProductId$       = "activate-win"



; ----------------------------------------------------------------
; see:
; http://technet.microsoft.com/en-us/library/ff793433.aspx

if CompareDotSeparatedNumbers(getMsVersionInfo, "<", "6.0")
	LogError "This is for NT 6 (Vista) and above"
	isFatalError
else
	
	comment "Show product picture"
	ShowBitmap "%ScriptPath%\" + $ProductId$ + ".png" $ProductId$
	
	
	Message "Installing " + $ProductId$ + " ..."
	
	set $poolOrKey$ = GetProductProperty("Poolid-or-Licensekey","")
	set $source$ = GetProductProperty("method","only-activate")
	set $httpproxy$ = GetProductProperty("httpproxy","")
	
	comment "Check Status"
	DosInAnIcon_status_win7 winst /sysnative
	set $exitcodeState$ = getLastExitCode
	
	if not ( $httpproxy$ = "" )

			comment "enable HTTP proxy, required for auto-activating"

			DosInAnIcon_setproxy_win7 winst /sysnative
	endif

	if not ($source$ = "only-activate")
		comment " we need a key..."
		if $source$ = "opsi License management"
			Set $LicenseRequired$ = "true"
			Set $LicensePool$     = $poolOrKey$
			comment " get key from license management with poolid "+$LicensePool$
			comment "Licensing required, reserve license and get license key"
			Sub_get_licensekey
		else
		
;----------------------------------------------------------------<neu>-------------------------------------
			if $source$ = "OEM licensekey"
				Set $LicenseRequired$ = "true"
				Set $LicensePool$     = ""
				comment "get key from BIOS"
				Set $oemkey$ = GetOutStreamFromSection ('DosInAnIcon_oem_key winst /sysnative')
				Set $LicenseKey$ = takeString(2,$oemkey$)
			else
				Set $LicenseRequired$ = "false"
				Set $LicensePool$     = ""
				set $LicenseKey$ = $poolOrKey$
				comment " use key "+$LicenseKey$
			endif
		endif
;----------------------------------------------------------------<\neu>-----------------------------------------



		comment "Set the Key"
		DosInAnIcon_set_key winst /sysnative
		
		comment "Check Status"
		DosInAnIcon_status_win7 winst /sysnative
		set $exitcodeState$ = getLastExitCode
	endif
	
	comment "Start Activation"
	DosInAnIcon_activate  winst /sysnative
	set $exitcodeActivation$ = getLastExitCode
	
	comment "Check Status"
	DosInAnIcon_status_win7 winst /sysnative
	set $exitcodeState$ = getLastExitCode
	
	comment "check the exit code of the activation..."
	if not ($exitcodeActivation$ = "0")
		LogError "Exitcode unequal zero: "+$exitcodeActivation$+" Activation seems to be failed !"
		isFatalError "activation failed"
	else
		comment "Activation seems to be successful: exit code = 0"
	endif

endif

;------------------------------------------------<neu>-------------------------------------------
[DosInAnIcon_oem_key]
wmic path softwarelicensingservice get OA3xOriginalProductkey | findstr \-
;------------------------------------------------<\neu>-------------------------------------------


[DosInAnIcon_set_key]	
cscript //b c:\windows\system32\slmgr.vbs /ipk $LicenseKey$
exit %ERRORLEVEL%

[DosInAnIcon_activate]	
cscript //b c:\windows\system32\slmgr.vbs /ato
exit %ERRORLEVEL%

[DosInAnIcon_status_win7]
cscript c:\windows\system32\slmgr.vbs /dli
exit %ERRORLEVEL%



[Sub_get_licensekey]
if opsiLicenseManagementEnabled
	comment "License management is enabled and will be used"

	comment "Trying to get a license key"
	Set $LicenseKey$ = demandLicenseKey ($LicensePool$)
	; If there is an assignment of exactly one licensepool to the product the following call is possible:
	; Set $LicenseKey$ = demandLicenseKey ("", $ProductId$)
	;
	; If there is an assignment of a license pool to a windows software id, it is possible to use:
	; DefVar $WindowsSoftwareId$
	; $WindowsSoftwareId$ = "..."
	; Set $LicenseKey$ = demandLicenseKey ("", "", $WindowsSoftwareId$)
	
	DefVar $ServiceErrorClass$
	set $ServiceErrorClass$ = getLastServiceErrorClass
	comment "Error class: " + $ServiceErrorClass$
	
	if $ServiceErrorClass$ = "None"
		comment "Everything fine, we got the license key '" + $LicenseKey$ + "'"
	else
		if $ServiceErrorClass$ = "LicenseConfigurationError"
			LogError "Fatal: license configuration must be corrected"
			LogError getLastServiceErrorMessage
			isFatalError
		else 
			if $ServiceErrorClass$ = "LicenseMissingError"
				LogError "Fatal: required license is not supplied"
				isFatalError
			endif
		endif
	endif
else
	LogError "Fatal: license required, but license management not enabled"
	isFatalError
endif


[Sub_check_exitcode]
comment "Test for installation success via exit code"
set $ExitCode$ = getLastExitCode
; informations to exit codes see
; http://msdn.microsoft.com/en-us/library/aa372835(VS.85).aspx
; http://msdn.microsoft.com/en-us/library/aa368542.aspx
if ($ExitCode$ = "0")
	comment "Looks good: setup program gives exitcode zero"
else
	comment "Setup program gives a exitcode unequal zero: " + $ExitCode$
	if ($ExitCode$ = "1605")
		comment "ERROR_UNKNOWN_PRODUCT	1605	This action is only valid for products that are currently installed."
		comment "Uninstall of a not installed product failed - no problem"
	else
		if ($ExitCode$ = "1641")
			comment "looks good: setup program gives exitcode 1641"
			comment "ERROR_SUCCESS_REBOOT_INITIATED	1641	The installer has initiated a restart. This message is indicative of a success."
		else
			if ($ExitCode$ = "3010")
				comment "looks good: setup program gives exitcode 3010"
				comment "ERROR_SUCCESS_REBOOT_REQUIRED	3010	A restart is required to complete the install. This message is indicative of a success."
			else
				logError "Fatal: Setup program gives an unknown exitcode unequal zero: " + $ExitCode$
				isFatalError
			endif
		endif
	endif
endif

[DosInAnIcon_setproxy_win7]
;netsh.exe winhttp set proxy proxy:3128 "<local>;*.mynet.local"
netsh.exe winhttp set proxy $httpproxy$
Erklärung:
Der hinzugefügte Code ist mit
------------------------------------<neu>------------------------------------
------------------------------------<\neu>------------------------------------
umklammert.

Es wird eine neue String-Liste $oemkey$ definiert, in der der Output der Sektion

Code: Alles auswählen

[DosInAnIcon_oem_key]
wmic path softwarelicensingservice get OA3xOriginalProductkey | findstr \-
gespeichert wird.
Dann wird der darin gespeicherte Lizenzschlüssel an $LicenseKey$ übergeben.
Benutzeravatar
n.wenselowski
Ex-uib-Team
Beiträge: 3194
Registriert: 04 Apr 2013, 12:15

Re: OEM Lizenzen zum Paket activate_win hinzufügen

Beitrag von n.wenselowski »

Hallo boven,

vielen Dank für die Anregung.

Beim Lesen deines Codes frage ich mich, wieso du falls die OEM-Lizenz gewählt werden soll $LicenseRequired$ auf true setzt. Gibt es einen speziellen Grund dafür?


Viele Grüße

Niko

Code: Alles auswählen

import OPSI
larsg
Beiträge: 283
Registriert: 16 Dez 2014, 18:06

Re: OEM Lizenzen zum Paket activate_win hinzufügen

Beitrag von larsg »

Ich glaube nicht das OEM Lizenzen nur mit einem Key aktiviert werden können.

Zumindest unter Windows 7 mussten wir dafür die Lizenzdateien (Endung '.xrm-ms') von einem vorinstallierten System extrahieren, und mit diesen Dateien ließen sich dann baugleiche Rechner mit der gleichen Lizenz, und einem speziellen Lizenzkey aktivieren.

Das geht auch mittels slmgr, oder einem Tool namens ABR.
Das ganze funktioniert mittels speziellen Tabellen im BIOS, in denen diese Informationen vom Hersteller hinterlegt wurden.

Dies wiederum könnte man in das Paket einbauen, dazu müsste das Paket ähnlich wie das Windows-Paket von jedem Anwender entsprechend angepasst werden, so dass unter einem Pfad, bspw. '/custom/', ähnlich wie bei der Treiberintegration die Lizenzdateien gestaffelt nach Hersteller/Modell in Unterordnern abgelegt werden.

Sowas steht auch irgendwo auf meiner Todo-Liste :?

Unter Windows 10 sieht das ganze wohl schon wieder komplett anders aus.
Antworten