ПРОЕКТ ПОДДЕРЖИВАЕТСЯ ООО "ТОНК" Linux и Windows терминалы с поддержкой ICA и RDP. — умные тонкие клиенты.

Linux и Windows терминалы с поддержкой ICA и RDP.

Базовый скрипт KIX входа для пользователей Citrix

Автор: Ron Oglesby
Источник: http://www.brianmadden.com/content/content.asp?ID=200
June 11, 2004

В этой статье я покажу, как использовать сценарии в среде Terminal Server / Citrix MetaFrame для общих и повторяющихся задач. В этой статье рассматриваются основы сценариев входа KIX, используемых для настройки среды пользователей Citrix.

Администратору достпен широкий выбор языков сценариев. Лично я предпочитаю KIX (который бесплатный). Хотя существует VBS, который прекрасно подходит для административных задач, KIX является настоящим королем при создании сценариев входа в MetaFrame. Он очень легок в использовании, имеет простой синтаксис и его основная цель состоит в модификации среды пользователя, что делает его идеальным для пользователей MetaFrame и Terminal Server.

Перед тем, как мы перейдем к некоторым общим функциям, давайте рассмотрим основную логику вашего сценария. Хорошая пракитика состоит в разбиении сценария на две части: начальная конфигурация пользователя и настройки входа.

Первая часть сценария KIX представляет собой начальную конфигурацию пользователя. Эти настроки необходимо запустить только один раз, при использовании перемещаемых или локальных профилей на единичном сервере. Такие настройки могут включать в себя:

Вторая часть сценария используется для настроек, которые должны выполняться при каждом входе пользователя. Такие настройки могут включать в себя:

Разбиение задач позволяеет ускорить выполнение сценария. Хотя вы можете запускать обе части сценария при каждом его запуске, лучше оставить то, что должно выполниться однократно, запускать один раз. Для этого я создаю ключ в реестре для пользователя и использую номер версии для определения, следует ли запускать последнюю версию сценария. Если версия находится в реестре, сценарий пропускает часть, которая должна выполниться один раз. Если нет, сценарий выполняется целиком. Это позволяет немного сократить время входа, что всегда важно в среде Citrix.

Итак, присупим к рассмотрению самого сценария. Прежде всего, вам следует хранить историю его изменения. Несколько дополнительных строк не окажут влияния на производительность. Я храню историю в самом начале сценария:

;*************************************************************************
;************* logon.KIX configures the user's profile *******************
;************* Ver 1 Base Build. Outlook settings and printers ***********
;************* Ver 1.1 disables the adobe splash screen ******************
;************* Ver 1.2 disables autoload of IM ***************************
;************* Ver 1.3 disables autoload of IM when Outlook is launched **
;************* Ver 1.4 Enables outlook to attach EXE and URL files *******

Эти номера версий можно использовать в качестве значений ключей реестра и проверять.

Первым шагом в сценарии является проверка версии сценария:

$VER = ReadValue ("HKEY_CURRENT_USER\Software\RapidApp","Version")

Эта команда присваивает переменной “$VER” значение ключа реестра, используя функцию ReadValue:

ReadValue (“Hive\key\subkey\subkey”,”Value you wish to read”)

Значение $VER берется из ключа реестра HKCU\Software\RapidApp\Version. Теперь мы можем применить оператор IF и сранить версию с текущей:

IF $VER=1.4
  GOTO ALWAYS
ELSE
  GOTO RUNONCE
ENDIF

Здесь мы проверям, равно ли значение 1.4. Если да, то переходим к разделу сценария “ALWAYS”, который должен выполняться при каждом входе пользователя. Если значение реестра отлично от 1.4, то нужно выполнить раздел (“RUNONCE”), а затем продолжить выполнить раздел “ALWAYS”.

:RUNONCE
;*************************************************************************
; Outlook Config
$OTLK = ReadValue ("HKEY_CURRENT_USER\Software\RapidApp","Otlk")
IF $OTLK<>1
  Run "d:\Progra~1\Micros~1\Office10\Outlook.exe /ImportPRF D:\admin\scripts\Outlook.prf"
  WriteValue("HKEY_CURRENT_USER\Software\Rapidapp","Otlk",    "1", "REG_SZ")
ENDIF

Здесь я проверяю, настроен ли профиль Outlook. Если нет, я запускаю Outlook с опцией /ImportPRF. Большинство моих пользователей используют настольные компьютеры и это просто сделать. Другой способ (в новых версиях Office) состоит в установке значения ключа в реестре, указывающего на размещение файла PRF.

Продолжая настройку "однократного" раздела сценария, я начинаю создавать ключи реестра, необходимые для некоторых приложений. Как видно ниже, я подразумеваю, что нужных ключей не существует и поэтому я их создаю. Если ключ (папка) не существует, функция addkey вернет ошибку, а скрипт продолжит работу дальше, записывая (или перезаписывая) нужные значения.

;*************************************************************************
; Запрещаем приветственный экран adobe reader (добавлено в  VER1.1
AddKey("HKEY_CURRENT_USER\Software\ADOBE\Acrobat Reader\5.0\AdobeViewer")
WriteValue("HKEY_CURRENT_USER\Software\ADOBE\Acrobat Reader\5.0\AdobeViewer","DISPLAYABOUTDIALOG","00000000", "REG_DWORD")
AddKey("HKEY_CURRENT_USER\Software\ADOBE\Adobe Acrobat\5.0\AdobeViewer")
WriteValue("HKEY_CURRENT_USER\Software\ADOBE\Adobe Acrobat\5.0\AdobeViewer","DISPLAYABOUTDIALOG","00000000", "REG_DWORD")
;*************************************************************************
; Запретить автозагрузку IM (добвлено в 1.3 и 1.4 для опубликованных приложений
DelValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run","MSMSGS")
AddKey("HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Outlook\IM")
WriteValue("HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Outlook\IM","Enabled","00000000", "REG_DWORD")
;*************************************************************************
; Разрешить пользователям видеть и прикреплять файлы EXE и ссылки в outlook
WriteValue("HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Outlook\SECURITY\","Level1Remove","exe;url", "REG_SZ")
;**************************************************************************
; Сохранить версию в реестре
AddKey("HKEY_CURRENT_USER\Software\RapidApp")
WriteValue("HKEY_CURRENT_USER\Software\RapidApp","Version",    "1.4", "REG_SZ")

Обратите внимание, что функции AddKey, WriteValue, ReadValue, а также синтаксис KIX очень просты и говорят сами за себя. Вот почему я настоятельно рекомендую использовать сценарии KIX для изменения пользовательской среды. Если вы собираетесь использовать KIX я настоятельно рекомендую найти в интернете файл KIXtart.CHM. Это хороший файл помощи, включащий примеры использования каждой команды.

В конце первого раздела сценария я обновляю в реестре номер версии. Это позволяет ограничить его использование и ускорить вход.

Теперь перейдем к разделу “ALWAYS”. Этот раздел выполняется при каждом входе пользователя, независимо от версии сценария. В этом разделе я отображаю диски пользователя, добавляю два принтера, устанавливаю принтер по умолчанию для пользователей в Чикаго, заменяю файл в домашнем каталоге и помещaю имя пользователя в файл INI. Этот INI меняется каждые три дня.

:ALWAYS
;*************************************************************************
; Отображение дисков для пользователей Citrix
USE L: /DELETE
USE K: /DELETE
USE L: \\RAFS1\DOCs12
USE K: \\RAFS2\DJQ
;*************************************************************************
; Установка принтеров 4000 и 4500 для пользователей из Чикаго
IF INGROUP("CHIUsers")
  addprinterconnection("\\RAFS1\HP4000")
  addprinterconnection("\\RAFS1\HP4500")
  setdefaultprinter("\\RAFS1\HP LaserJet 4500")
ELSE
  ? "Non-Chicago User"
ENDIF
;*************************************************************************
; Скопировать файл DOCs12.ini и изменить имя пользователя
COPY “\\RAFS1\Source\W2HCM.ini" "%homedrive%%homepath%\windows\DOCs12.INI"
WriteProfileString("%homedrive%%homepath%\windows\DOCs12.ini","Session","User")

:END

Как видно, в сценарии нет обработки ошибок. Этот сценарий настолько простой, что оно не нужно. Но в случае более сложных сценариев вам необходимо предусмотреть обработку ошибок.

В любом случае, основные сценарии KIX весьма просты и позволяют творить со средой пользователя почти все что угодно. Я показал, как отображать диски, копировать файлы, читать и писать в реестр, настраивать принтеры, проверять членство в группах. Ниже показан примерный сценарий. Разумеется, с помощью KIX вы можете делать намного больше.

 
 
;*************************************************************************
;************* logon.KIX configures the user's profile
;************* Ver 1 Base Build. Outlook settings and printers 
;************* Ver 1.1 disables the adobe splash screen
;************* Ver 1.2 disables autoload of IM 
;************* Ver 1.3 disables autoload of IM when OutLook is launched 
;************* Ver 1.4 Enables outlook to attach EXE and URL files 
$VER = ReadValue ("HKEY_CURRENT_USER\Software\RapidApp","Version")
IF $VER=1.4
  GOTO ALWAYS
ELSE
  GOTO RUNONCE
ENDIF
:RUNONCE
;*************************************************************************
; Outlook Config
$OTLK = ReadValue ("HKEY_CURRENT_USER\Software\RapidApp","Otlk")
IF $OTLK<>1
  Run "d:\Progra~1\Micros~1\Office10\Outlook.exe /ImportPRF D:\admin\scripts\Outlook.prf"
  WriteValue("HKEY_CURRENT_USER\Software\Rapidapp","Otlk",    "1", "REG_SZ")
ENDIF
;*************************************************************************
; Disable Splash screen for adobe reader ADDED WITH VER1.1
AddKey("HKEY_CURRENT_USER\Software\ADOBE\Acrobat Reader\5.0\AdobeViewer")
WriteValue("HKEY_CURRENT_USER\Software\ADOBE\Acrobat Reader\5.0\AdobeViewer","DISPLAYABOUTDIALOG",    "00000000", "REG_DWORD")
AddKey("HKEY_CURRENT_USER\Software\ADOBE\Adobe Acrobat\5.0\AdobeViewer")
WriteValue("HKEY_CURRENT_USER\Software\ADOBE\Adobe Acrobat\5.0\AdobeViewer","DISPLAYABOUTDIALOG",    "00000000", "REG_DWORD")
;*************************************************************************
; Disable the IM auto-loader ADDED WITH VER 1.3 and 1.4 for published apps
DelValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run",    "MSMSGS")
AddKey("HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Outlook\IM")
WriteValue("HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Outlook\IM","Enabled",    "00000000", "REG_DWORD")
;*************************************************************************
; Enables a user to see and attach EXEs and URLs within outlook
WriteValue("HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Outlook\SECURITY\","Level1Remove",    "exe;url", "REG_SZ")

;**************************************************************************
; Write the version info into the registry.
AddKey("HKEY_CURRENT_USER\Software\RapidApp")
WriteValue("HKEY_CURRENT_USER\Software\RapidApp","Version",    "1.4", "REG_SZ")
:ALWAYS


;*************************************************************************
; Map drives for Citrix users.
USE L: /DELETE
USE K: /DELETE
USE L: \\RAFS1\DOCs12
USE K: \\RAFS2\DJQ
;*************************************************************************
; Set the 4000 and 4500 printers for the Chicago Users
IF INGROUP("CHIUsers")
  addprinterconnection("\\RAFS1\HP4000")
  addprinterconnection("\\RAFS1\HP4500")
  setdefaultprinter("\\RAFS1\HP LaserJet 4500")
ELSE
  ? "Non-Chicago User"
ENDIF
;*************************************************************************
; Copy the DOCs12.ini and modify username settings
COPY “\\RAFS1\Source\W2HCM.ini" "%homedrive%%homepath%\windows\DOCs12.INI"
WriteProfileString("%homedrive%%homepath%\windows\DOCs12.ini","Session","User")
:END

Возврат