Сценарии для серверных вычислений: Часть 3 — Сценарии Citrix Presentation Server

Опубликовано: 24 Апреля, 2023

  • Сценарии для серверных вычислений: Часть 1. Атрибуты служб терминалов для пользовательских объектов Active Directory
  • Сценарии для серверных вычислений: Часть 2. Сервер служб терминалов и настройка подключения

Введение

В первой части этой серии мы рассмотрели, как можно использовать VBScript и WMI для модификации атрибутов, специфичных для терминальных служб Active Directory User Object. Во второй части мы рассмотрели различные возможности сценариев, доступные для службы и подключений служб терминалов. Теперь мы обратим наше внимание на ОЧЕНЬ большую тему, а именно на возможности объекта MFCOM API Presentation Server. Прежде чем мы начнем, отметим, что тема MFCOM (и COM/объектно-ориентированных сценариев) выходит далеко за рамки этой серии статей. Вместо этого мы рассмотрим несколько примеров того, КАКУ информацию мы можем собрать и настроить на базовом уровне, а затем обсудим, как найти объемную информацию об API.

Давайте сначала посмотрим, что такое скриптинг в среде Presentation Server, а что нет. Создание сценариев для Presentation Server стало возможным через интерфейс MFCOM. MFCOM (MetaFrame COM) — это API-интерфейс для написания сценариев и полного кодирования, который позволяет нам, как администраторам, автоматизировать такие задачи, как сбор информации, изменение конфигурации и так далее. Сценарии для Presentation Server НЕ заменяют предыдущие разделы этой серии статей, сценарии служб терминалов и сценарии объектов Active Directory, и это лишь некоторые из них. Кроме того, создание сценариев для Presentation Server НЕ предназначено для замены объектов групповой политики, политики Citrix или старого доброго использования инструментов управления с графическим интерфейсом. Вместо этого он предназначен для быстрого и последовательного сбора информации о настройках Presentation Server или их изменении.

Итак, без лишних слов, давайте рассмотрим конкретные типы информации, которые мы собираемся исследовать в этой статье. Опять же, имейте в виду, что MFCOM — это ОЧЕНЬ большой API, который позволяет настраивать практически ЛЮБОЙ аспект работы и конфигурации Presentation Server. Мы рассмотрим, как собрать базовую информацию о серверах в нашей ферме. С этой целью пример сценария WSF в этой статье называется FARMSERVERLISTER.WSF, поскольку он определяет количество серверов в ферме, а затем перечисляет несколько важных сведений о конфигурации сервера. Для тех из вас, кто больше склонен к «графическому интерфейсу» администратора, рассматриваемые настройки, которые мы будем «опрашивать», будут доступны для просмотра в первую очередь из консоли управления Presentation Server путем поиска свойств данного сервера. На рисунке 1 ниже показано окно с видами информации, которую наш сценарий будет собирать для нас.


Рисунок 1: Пример общих настроек Presentation Server

Для тех из вас, кто имеет БОЛЬШУЮ ферму или когда-либо имел удовольствие управлять большой фермой, поддержка согласованных настроек, уровней пакетов обновления и исправлений может стать проблемой. Пример сценария, который мы рассмотрим ниже, выполнит базовый запрос (без фактических изменений конфигурации, хотя это было бы достаточно легко добавить) различных параметров и информации о конфигурации с серверов в моей тестовой ферме. В конце выполнения скрипта (что может занять некоторое время в более крупной ферме) он представит всплывающее окно с собранной информацией, а также создаст текстовый файл с именем THE_FARM_REPORT.TXT в том же рабочем каталоге, из которого скрипт выполняется. (Да, я понимаю, что всплывающие окна бесполезны в большой ферме, но я сделал это для тестирования скрипта в том виде, в котором я его создал… в большой среде текстовый файл будет гораздо полезнее.)

Пожалуйста, имейте в виду, что даже несмотря на то, что это сценарий ТОЛЬКО ДЛЯ ЧТЕНИЯ, никогда не запускайте его в своих производственных средах без надлежащего тестирования и полного понимания выполняемой работы. На рисунках 2 и 3 показаны виды информации, которую мы собираемся собирать с помощью сценария.


Рис. 2. Пример вывода всплывающего окна Windows с графическим интерфейсом


Рисунок 3: Образец выходного файла

ПРИМЕЧАНИЕ:
ДЕЙСТВИТЕЛЬНО хорошей модификацией примера сценария, который я написал ниже, было бы изменение выходных данных из «плоского» тестового файла в файл CSV или файл со значениями с вкладками, чтобы упростить импорт в выбранное вами приложение для работы с электронными таблицами. Я начал преобразовывать скрипт для этого еще до завершения этой статьи, но перестал думать, что это было бы отличным упражнением для читателей этой статьи, чтобы изучить функции и стать более опытными в написании сценариев в целом. Я дам вам подсказку, если вы собираетесь использовать вкладки, подумайте о VbTab…

Интерфейс или API MFCOM — это довольно большой и всеобъемлющий набор инструментов для работы с кодом. Будучи обширным, он организован довольно логично… это означает, что то, что вы можете сделать в графическом интерфейсе, примерно аналогично тому, что можно сделать в программировании. Существуют значения уровня фермы, значения уровня сервера, принтеры, зоны и сеансы, и это лишь некоторые из них. Точно так же, как вы переходите в определенный раздел инструмента GUI Presentation Server Management Console, чтобы внести изменения в эти настройки или собрать информацию, API устроен таким же образом. В таблице 1 ниже приведен сокращенный список некоторых наиболее популярных объектов в API, которые мы можем использовать в сценариях.

Объект фермы

Зона Объект

Объект сервера

Объект приложения

Объект полномочий учетной записи

Объект сеанса

Объект процесса

Пользовательский объект

Групповой объект

Объект виртуального канала

Объект лицензии

Объект набора лицензий

Объект номера лицензии

Объект политики

Объект принтера

Объект драйвера принтера

Объект сопоставления драйвера принтера

Объект клиентского принтера

Папка Объект

Объект администратора MetaFrame

Таблица 1:Самые популярные объекты MFCOM для сценариев

Итак… без лишних слов, давайте разберем некоторые элементы, которые мы будем запрашивать в примере скрипта. Примерно первая половина приведенного ниже сценария — это просто настройка переменных и объектов, которые мы будем использовать для запроса информации. Отдельного упоминания заслуживают участки кода с aWinServer, bWinServer и cWinServer, в частности такие фрагменты, как aWinServer.EnableLogon, где мы фактически «получаем» информацию о статусе входа в систему. Первый вопрос должен звучать так: что такое элементы a, b и c WinServer… и в основном это переменная, которую я определяю, чтобы позволить мне писать сокращенно для трех разных объектов WinServerObject, которые вы можете отметить ниже. В двух словах, поскольку Citrix продолжала РАСШИРЯТЬ продукт Presentation Server, объект сервера был расширен, чтобы включить возможность кода для API, добавив БОЛЬШЕ интерфейсов объектов сервера, поэтому WinServerObject2 и т. д. На данный момент PS 4 имеет 4 различные интерфейсы WinServerObject.

Теперь давайте посмотрим на сам скрипт. Просто скопируйте и вставьте все, включая <package> в начале и </package> в конце, в файл WSF на Presentation Server (предпочтительно версии 4, хотя код должен работать на PS 1/XP FR3 или новее). ).

<пакет>
<идентификатор задания="FarmServers">

<комментарий>
Файл: FarmServerLister.wsf
Описание: список всех серверов в ферме и сведения о сервере.
Требования: WSH 5.5 или выше.


</комментарий>
<время выполнения>

<описание>
Список серверов в ферме.
</описание>

<пример>
CScript FarmServerLister.wsf //нолого
</пример>

</время выполнения>

<reference object="MetaFrameCOM.MetaFrameFarm"/>
<язык сценария = ”VBScript”>

При ошибке Возобновить Далее
Dim theFarm, aServer, aWinServer, bWinServer, отчет

Установите oFSO = CreateObject("Scripting.FileSystemObject")
Установите FinalReport = oFSO.OpenTextFile("The_Farm_Report.txt", 2, True)

'****************************************************** ****************************
' Создаем объект MetaFrameFarm
'****************************************************** ****************************

Установите Ферму = СоздатьОбъект("MetaFrameCOM.MetaFrameFarm")
если Err.Number <> 0 Тогда
Report = Report & vbcrlf & «Не удается создать объект MetaFrameFarm»
Отчет = Отчет & vbcrlf & "(" & Err.Number & ") " & Err.Description
Отчет = Отчет & vbcrlf & ""
Отчет Wscript.Echo
Отчет FinalReport.WriteLine
WScript.Quit Err.Number
Конец, если







'****************************************************** ****************************
' Инициализировать объект фермы.
'****************************************************** ****************************

theFarm.Initialize(MetaFrameWinFarmObject)
если Err.Number <> 0 Тогда
Report = Report & vbcrlf & «Не удается инициализировать объект MetaFrameFarm»
Отчет = Отчет & vbcrlf & "(" & Err.Number & ") " & Err.Description
Отчет = Отчет & vbcrlf & ""
Отчет Wscript.Echo
Отчет FinalReport.WriteLine
WScript.Quit Err.Number
Конец, если







'****************************************************** ****************************
' Вы администратор Citrix?
'****************************************************** ****************************

если theFarm.WinFarmObject.IsCitrixAdministrator = 0, то
Report = Report & vbcrlf & «Для запуска этого скрипта вы должны быть администратором Citrix»
Отчет = Отчет & vbcrlf & ""
Отчет Wscript.Echo
Отчет FinalReport.WriteLine
WScript.Выход 0
Конец, если





'****************************************************** ****************************
' Начать ФАКТИЧЕСКИЙ отчет
'****************************************************** ****************************

Отчет = Отчет & «Имя фермы MetaFrame:» & theFarm.FarmName
Отчет = Отчет и vbcrlf

'****************************************************** ****************************
' Показать все серверы в ферме.
'****************************************************** ****************************

Установить серверы = theFarm.Servers
Отчет = Отчет & vbcrlf & Servers.Count & "Сервер(ы) в ферме (" & Now & ")"
Отчет = Отчет & vbcrlf & «————————————————»

Для каждого сервера в ферме.Серверы

если Err.Number <> 0 Тогда
Отчет = Отчет & vbcrlf & «Не удается перечислить серверы»
Отчет = Отчет & vbcrlf & "(" & Err.Number & ") " & Err.Description
Отчет = Отчет & vbcrlf & ""
WScript.Quit Err.Number
Конец, если




Отчет = Отчет и vbcrlf и vbcrlf & «Имя:» & aServer.ServerName
Отчет = Отчет & vbcrlf & "IP-адрес: " & aServer.IPAddress

'****************************************************** ****************************
' Объект MetaFrameWinServer.
'****************************************************** ****************************

Установите aWinServer = aServer.WinServerObject
Report = Report & vbcrlf & «Версия Windows: » & aWinServer.WinNTVerMajor & «.» & _
aWinServer.WinNTVerMinor
Отчет = Отчет & vbcrlf & «Версия PS: » & aWinServer.MFWinVerMajor & «.» & _
aWinServer.MFWinVerMinor
Отчет = Отчет & vbcrlf & "PS Service Pack:" & aWinServer.MFWinServicePack
Отчет = Отчет & vbcrlf & «Версия продукта (Ent, Adv или Std): » & _
aWinServer.MFWinName
Отчет = Отчет & vbcrlf & "PS Build:" & aWinServer.MFWinBuild
Отчет = Отчет & vbcrlf & «Использовать настройки отображения ICA фермы (1 = Да): » & _
aWinServer.UseFarmICADDisplaySettings
Отчет = Отчет & vbcrlf & «Отменить избыточную графику (1 = Да): » & _
aWinServer.NoRedundantГрафика
Отчет = Отчет & vbcrlf & «Альтернативный метод кэширования включен (1 = Да): » & _
aWinServer.AlternateCachingMethod
Report = Report & vbcrlf & «Использовать режим совместимости дисплея LEGACY ICA (1 = Да): » & _
aWinServer.LegacyICADDisplayCompatibleMode
Отчет = Отчет & vbcrlf & «Размер видеобуфера ICA (в байтах): » & _
aWinServer.ICAVideoBufferSize
Отчет = Отчет & vbcrlf & «Смещение деградации (1 = Разрешение, 2 = Цвет): » & _
aWinServer.DegradationBias
Отчет = Отчет & vbcrlf & «Уведомить об деградации (1 = Да): » & _
aWinServer.NotifyDegradation
Отчет = Отчет & vbcrlf & «Использовать настройки SNMP фермы (1 = Да): » & _
aWinServer.UseFarmSNMPSettings
Отчет = Отчет & vbcrlf & «Агент SNMP включен (1 = Да): » & _
aWinServer.EnableSNMPAgent
Report = Report & vbcrlf & «Сборщик данных отвечает на широковещательные сообщения ICA (1 = Да): » & _
aWinServer.RespondToClientBroadcast
Отчет = Отчет & vbcrlf & «Вход в систему разрешен (1 = Да): » & _
aWinServer.EnableLogon
Отчет = Отчет & vbcrlf & «Теневое ведение журнала включено (1 = Да): » & _
aWinServer.EnableShadowLogging































Установите bWinServer = aServer.WinServerObject2
Отчет = Отчет & vbcrlf & «Уровень выпуска функции: » & _
bWinServer.FeatureReleaseLevel
Отчет = Отчет & vbcrlf & «Теневое копирование консоли разрешено (1 = Да): » & _
bWinServer.IsShadowingConsoleAllowed
Отчет = Отчет & vbcrlf & «# Установленные исправления: » & _
bWinServer.HotfixCount
Если bWinServer.HotfixCount <> 0 Тогда
'Если bWinServer.HotfixCount = 0, то
nHotfixes = bWinServer.HotfixCount
aHotfixes = bWinServer.Hotfixes









HFList = vbTab & «Имя исправления» & vbTab & «Установлено» & _
vbTab и «Установлено»
Для iCount = 0 To (nHotfixes — 1)
Установите исправление = исправления (iCount)
Установите Datein = aHotfix.InstalledOn



Если iCount = 0 Тогда
'WScript.Echo anServer.ServerName
Конец, если
HFList = HFList & vbTab & aHotfix.Name & vbTab & _
Дата.Месяц & "/" & Дата.День & "/" & Дата.Год & _
vbTab & aHotfix.InstalledBy




Следующий

Отчет = Отчет и vbcrlf и HFList
Конец, если

Отчет = Отчет & vbcrlf & «Использовать настройку автоматического повторного подключения фермы (1 = Да): » & _
bWinServer.UseFarmACRSetting
Отчет = Отчет & vbcrlf & «Автопереподключение включено (1 = Да): » & _
bWinServer.EnableACR
Отчет = Отчет & vbcrlf & «Журналировать попытки автоматического повторного подключения (1 = Да): » & _
bWinServer.LogACRAttempts
Отчет = Отчет & vbcrlf & «Порт XML (0 = Общий доступ): » & _
bWinServer.XMLPortNumber
Отчет = Отчет & vbcrlf & «Пропускная способность печати (-1 = неограничена): » & _
bWinServer.PrintingBandwidth
Отчет = Отчет & vbcrlf & «Использовать настройку смарт-карты фермы (1 = Да): » & _
bWinServer.UseFarmSmartCardSetting
Отчет = Отчет & vbcrlf & «Текущая загрузка сервера:» & _
bWinServer.ServerLoad












Установите cWinServer = aServer.WinServerObject2
Отчет = Отчет & vbcrlf & «Использовать настройки обозревателя скорости фермы (1 = Да): » & _
cWinServer.UseFarmSpeedBrowse
Отчет = Отчет & vbcrlf & «Использовать настройки проверки активности ICA фермы (1 = Да): » & _
cWinServer.UseFarmICAKKeepAliveSetting
Report = Report & vbcrlf & «ICA KeepAlive Enabled (1 = Yes): » & _
cWinServer.EnableICAKeepAlive
Отчет = Отчет & vbcrlf & «Время ожидания поддержания активности ICA (60 секунд по умолчанию): » & _
cWinServer.ICAKeepAliveTimeout
Отчет = Отчет & vbcrlf & «Использовать настройки перенаправления содержимого фермы (1 = Да): » & _
cWinServer.UseFarmContentRedirectionSetting
Отчет = Отчет & vbcrlf & «Перенаправление содержимого включено (1 = Да): » & _
cWinServer.EnableContentRedirection
Отчет = Отчет & vbcrlf & «Использовать настройку подключения к удаленной консоли фермы (1 = Да): » & _
cWinServer.UseFarmRemoteConsoleConnectionSetting
Отчет = Отчет & vbcrlf & «Подключение к удаленной консоли включено (1 = Да): » & _
cWinServer.EnableRemoteConsoleConnection















Следующий

Отчет Wscript.Echo
Отчет FinalReport.WriteLine

</скрипт>
</работа>
</пакет>

Вывод

Этой статьей мы закрываем серию скриптов. Вполне уместно, что мы заканчиваем серию тем, что САМАЯ БОЛЬШАЯ дверь все еще открыта, а именно дверь MFCOM Scripting. Приведенный выше пример сценария можно легко изменить для создания файла CSV или TSV, который можно ЛЕГКО использовать для сортировки и сравнения значений сервера для очень больших ферм. Для целей этой статьи я решил, что скрипт будет отображать результаты во всплывающем окне, и запишет текстовый файл в «рабочий каталог» того места, где вы выполняете скрипт. Я уверен, что ваши мысли будут наполнены фантазиями о сценариях, запускающих практически все аспекты вашей среды Presentation Server… для получения дополнительной информации обратитесь к онлайн-базе знаний Citrix о сценариях и SDK Presentation Server по адресу http://support.citrix. com/article/CTX102095 и http://apps.citrix.com/cdn/SDK/server_sdk_v40.asp. В эту статью можно было бы добавить МНОГО, МНОГО вещей, но API слишком велик, чтобы включать его сюда, поэтому не забудьте использовать печатную и онлайн-документацию от Citrix и этот пример сценария в качестве отличной отправной точки! В заключение отметим, что Citrix обновляет MFCOM и SDK с каждой версией Presentation Server, поэтому убедитесь, что вы пишете сценарий для конкретного API, доступного для рассматриваемого MFCOM. Другими словами, вы не сможете запрашивать новые функции со старых серверов?!

  • Сценарии для серверных вычислений: Часть 1. Атрибуты служб терминалов для пользовательских объектов Active Directory
  • Сценарии для серверных вычислений: Часть 2. Сервер служб терминалов и настройка подключения