gifts2017

Распространение nethasp.ini групповыми политиками

Опубликовал Антон Стеклов (asved.ru) в раздел Администрирование - Системное

Автоматизируем указание конкретного HASP LM пользовательским компьютерам при помощи GPO.

Как известно, несколько одноранговых HASP ключей совместно не работают. Точнее, работают, но плохо.

Проблема заключается в том, что клиент, не сумев получить лицензию с одного из ключей по причине его исчерпания, с другого ключа того же ранга пытаться получить лицензию не будет. Это by design и не лечится.

Существует метод обхода этой проблемы: требуется установить ключи и менеджеры лицензий на различные серверы и каждому компьютеру указать свой адрес HASP LM, иными словами - вручную распределить компьютеры по менеджерам лицензий, отредактировав nethasp.ini на каждом компьютере.

А поскольку мы с вами люди ленивые и к каждому компьютеру ходить не желаем, мы воспользуемся возможностями групповых политик Active Directory: установим startup script, который сам напишет в nethasp.ini все, что нам нужно, при включении компьютера.

В качестве критерия развертывания будем использовать членство компьютера в группах: создадим в AD группу с наименованием "NH_managed" - в нее мы будем включать все компьютеры, содержимим nethasp.ini которых мы будем управлять, и группы распределения по HASP LM - назовем их NH_server1 и NH_server2 - по ним мы будем распределять клиентские компьютеры.

После этого нам останется только создать либо выбрать подходящий существующий GPO (объект групповой политики) и установить в нем в качестве startup-скрипта наш скрипт.

Обратите внимание: startup-скрипт устанавливается в политике компьютера и действует только на компьютеры, следовательно, управляемые компьютеры должны находиться в OU (подразделениях), попадающих под действие нашего GPO.

Logon же скриптом, отрабатывающим при входе пользователя, воспользоваться без потенциально небезопасных ухищрений не удастся - logon-скрипт исполняется в контексте пользователя, а у нормального администратора пользователи не располагают требуемыми для записи nethasp.ini правами.

Что делает скрипт - да очень просто:

  1. проверяет членство компьютера в группе NH_managed, если не член - то ничего не делает
  2. проверяет членство компьютера в группах  NH_server1 и NH_server2, если член - пишет им в nethasp.ini соответствующий адрес HASP LM, если же нет - то 127.0.0.1, чтобы вообще к хаспам не лезли.
  3. если же проверить членство в группах не удалось (к примеру, недоступен контроллер домена) - ничего не меняет.

P.S. Если у Вас нет AD, или Вы не умеете с AD работать - сочувствую, придется либо учиться, либо админить ногами.

А вот и наш скрипт, в нем следует лишь указать реальные адреса HASP LM

'==========================================================================
' VBScript Source File -- Set nethasp.ini on computer group membership
'
' Please set your group names and NH server addresses at GetNHaddrByGroup() definition section
' 
'==========================================================================
Option Explicit
Dim NH_address
NH_address = GetNHaddrByGroup()
If NH_address = "" Then
Else
	CreateNHINI(NH_address)
End If

Function GetNHaddrByGroup()
	On Error Resume Next
	Dim wshNetwork, ADSysInfo, CurrentHost, StrGroups, NHaddr
	Dim addr1, addr2, addrNull, group1, group2  
	NHaddr = ""
	'=============================================
	' set addresses and group names here:
	group1 = "NH_server1"
	addr1 = "192.168.0.2"
	
	group2 = "NH_server2"
	addr2 = "192.168.0.7"
	
	' addrNull writes to nethasp.ini if the computer is not member of group1 or group2, 
	' but is member of "NH_managed" group
	addrNull = "127.0.0.1"
	'=============================================
	
	Set ADSysInfo = CreateObject("ADSystemInfo") 
	If ADSysInfo.ComputerName = "" Then
		GetNHaddrByGroup = ""
		Exit Function 
	Else
		Set CurrentHost = GetObject("LDAP://" & ADSysInfo.ComputerName) 
	End If
	StrGroups = Join(CurrentHost.MemberOf)
	If InStr(StrGroups, "NH_managed") Then
		If InStr(StrGroups, group1) Then
			NHaddr = addr1
		Else
			If InStr(StrGroups, group2) Then
				NHaddr = addr2
			Else
				NHaddr = addrNull
			End If
		End If
	End If
	GetNHaddrByGroup = NHaddr 
End Function

Function CreateNHINI(nhserveraddr)
	Dim filepath
	Dim ofile, objFSO
	filepath = GetNHPath()
	Set objFSO = CreateObject("Scripting.FileSystemObject")
	Set ofile = objFSO.CreateTextFile(filepath)
	ofile.WriteLine "[NH_COMMON]"
	ofile.WriteLine "NH_IPX =  Disabled"
	ofile.WriteLine "NH_NETBIOS =  Disabled"
	ofile.WriteLine "NH_TCPIP = Enabled"
	ofile.WriteLine "[NH_IPX]"
	ofile.WriteLine "[NH_NETBIOS]"
	ofile.WriteLine "[NH_TCPIP]"
	ofile.WriteLine "NH_SERVER_ADDR = " & nhserveraddr
	ofile.WriteLine "NH_PORT_NUMBER = 475"
	ofile.WriteLine "NH_TCPIP_METHOD = UDP"
	ofile.WriteLine "NH_USE_BROADCAST = Disabled"
	ofile.WriteLine ""
	ofile.Close 
End Function

Function GetNHPath()
	Dim WshShell, ProgramFilesPath, ProgramFilesx86Path
	Set WshShell = CreateObject("WScript.Shell")
	ProgramFilesPath = WshShell.ExpandEnvironmentStrings("%PROGRAMFILES%")
	ProgramFilesx86Path = WshShell.ExpandEnvironmentStrings("%PROGRAMFILES(x86)%")
	If  ProgramFilesx86Path = "%PROGRAMFILES(x86)%" Then
		' it's x32 OS, all OK
	Else
		ProgramFilesPath = ProgramFilesx86Path
	End if
	GetNHPath = ProgramFilesPath&"\1cv82\conf\nethasp.ini"
End Function

 

 

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Евгений Сивов (bird21) 19.02.14 09:07
Любопытно, надо попробовать.
2. LynxOlga (LynxX) 19.02.14 12:02
Спасибо, как раз сейчас решаем проблему.
3. Вячеслав Салин (juker) 28.05.14 11:05
К сожалению, в терминальных сессиях это не подойдет. Клиентом используются серверные бинарники без локальной установки.
4. Антон Стеклов (asved.ru) 28.05.14 11:36
(3) juker, можно попробовать раздавать разные бинарники - а nethasp.ini класть в \bin\conf\
5. Владимир Иванов (Vlad87) 18.08.14 15:18
Не могу отправить Вам лс. Можете скинуть контакты на hygienesss at gmail.com? Пожалуйста, вопрос на минуту. Извините за офтоп.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа