Home Menu Search

Saqwel

IT and other things blog

Не устанавливается клиент SCCM 2012 R2. Эпизод 2

Share

Не устанавливается клиент с ошибкой в логе ccmsetup.log: «MSI: Could not open key: UNKNOWN\Components\7AF388D3061FB2A46ABD37138B8E660C\19BF4688EE4961F41A44D0282A2340D9. Verify that you have sufficient access to that key, or contact your support personnel.»

Сразу нашёл, что необходимо дать полные права группе администраторов на следующий раздел реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\7AF388D3061FB2A46ABD37138B8E660C\19BF4688EE4961F41A44D0282A2340D9. Оказалось, что разделов в реестре, на которые надо дать права куева хуча, поэтому пришлось придумывать метод для автоматического изменения разрешений. Для того, чтобы изменить разрешения на раздел реестра очень удобно использовать regini.exe. Но для использоания regini.exe необходимо было получить список разделов, в которых хранится информация именно о компонентах клиента SCCM. Для этого я мной был использован срипт Powershell:

	$data = Get-ChildItem -path `

registry::'hklm\software\microsoft\windows\currentversion\installer\userdata\s-1-5-18\components' `
-Recurse | Where-Object -FilterScript {$_.Name -like '*\19BF4688EE4961F41A44D0282A2340D9' }
	foreach( $d in $data ) {
		#Сохранить список для последующего сравнения
		$d.Name >> hive.txt
	}

При выполнении этого скрипта на проблемном компьютере, оказалось, что не хватало разрешений, чтобы получить список этих разделов. Пришлось запустить этот скрипт на здоровом компьютере. Был получен список разделов, которые создает клиент SCCM. Этот список перенесен на проблемный компьютер. По этому списку следующий скрипт Powershell проверил наличие или отсутствие разделов, и на присутствующие разделы установил нового владельца – группу локальных администраторов и одновременно формируется файл для работы программы regini.exe. Кстати, для задания нового владельца использована программа SetACL.exe.

	$data = get-content E:\temp\1.txt
	foreach( $str in $data ) {
		if( get-item registry::$str ) {
			SetACL.exe -on "$str" -ot reg -actn setowner -ownr n:Administrators
			#Сохранить список для использования в regini.exe
			$str = $d.Name -replace "HKEY_LOCAL_MACHINE", "\registry\machine"
			"$str [1 8]" >> regini.txt
		}
	}

После этого необходимо выполнить команду

	regini.exe regini.txt

Leave a Reply