有一个场景需求在物理机上安装Citrix的VDA。这些物理机本来是独立运行的工作站,但是最近却打算使用Citrix Xendesktop去管理。这样的或必须在这些物理机上安装VDA软件。我们假设这些工作站已经加入了公司的域并且计算机账号处于一个OU下,而且可以批量的随意关机。当然我们可以手工的一台一台的去安装这些软件,不过为了使这个方案更加的靠谱一点,我认为假设工作站的数量是1000台。如果真的手工装那就装死人了。 我打算设计一个方案来完成批量化的软件安装。

为了完成这个方案,可能需要实现以下功能: 1.设法找到命令行的方式,通过参数来非交互式的安装VDA 2.VDA的安装软件可能需要上传到一个这些工作站共同都能访问的一个网络路径。 3.获得能够在域中添加OU的权限,并且能够将工作站转入或者移出这个OU。

我的想法是在OU中设置一个开机脚本,让这些工作站加入到这个OU中去之后,它们会开机的时候运行这个脚本,访问到一个公共访问的存储中的脚本,并且运行非交互式的命令,来完成vda的安装。而且我可以批量的将这些计算机账号放入和移出OU,这样总是有一些设备开机着提供用户使用,确保不会影响生产工作。

VDA的安装主要了完成以下配置:

  1. 输入ddc的信息并与其对接
  2. 配置安装的路径
  3. 打开一些防火墙端口。

在测试中我会准备一台空的虚拟机来模拟物理机。为了实现单台下安装的命令。 首先现在光盘中找到vda的安装包路径:(假设光驱盘符为D:) D:\x64\XenDesktop Setup\XenDesktopVDASetup.exe 它的参数说明文档如下: 安装 XenDesktop Virtual Desktop Agent 组件 可能的选项为(有关更多详细信息,请参阅相关文档): /COMPONENTS VDA、插件 /EXCLUDE <package> 从安装中排除一个包 /HELP、/H、/? 显示此对话框 /NOREBOOT 禁止在安装后重新启动(如有需要) /PASSIVE、/QUIET 安装过程中不显示 UI /BASEIMAGE 启用 Personal vDisk 支持 /CONTROLLERS 要注册到的控制器列表(FQDN) /SITE_GUID AD 中的 XenServer 站点 GUID /ENABLE_HDX_PORTS 在 Windows 防火墙(如果已启用)中打开 HDX 端口 /ENABLE_REAL_TIME_TRANSPORT 在 Windows 防火墙(如果已启用) 中打开 UDP 端口 16500 - 16509,以启用 HDX 实时音频传输 /ENABLE_FRAMEHAWK_PORT 在 Windows 防火墙(如果已启用) 中打开 UDP 端口 3224 - 3324, 用于与 Citrix Receiver 交换 Framehawk 显示通道数据。 /ENABLE_HDX_UDP_PORTS 在 Windows 防火墙(如果已启用)中打开 UDP 端口 1494 和 2598 以启用 HDX over UDP /ENABLE_REMOTE_ASSISTANCE 启用远程协助 /OPTIMIZE 设置注册表以实现更快的 VDA 操作 /PORTNUMBER VDA 与控制器之间进行通信时使用的 端口号 /REMOVE 删除组件(而非安装组件) /RECONFIGURE 重新配置 VDA /MASTERIMAGE 将 VDA 设为主映像 /REMOTEPC 优化 VDA 安装以实现对 物理系统的远程访问 /NO_MEDIAFOUNDATION_ACK 确认未安装 Windows Media 功能 (Windows N 版本) /NORESUME 阻止安装程序在计算机重新启动后 自动重新启动。
参考文档:https://docs.citrix.com/zh-cn/xenapp-and-xendesktop/7-15-ltsr/install-configure/install-command.html

我使用的命令行为: "D:\x64\XenDesktop Setup\XenDesktopVDASetup.exe" /PASSIVE /components vda /CONTROLLERS "DC1.ipqn.local DC2.ipqn.local" /ENABLE_HDX_PORTS /ENABLE_REAL_TIME_TRANSPORT /ENABLE_FRAMEHAWK_PORT /ENABLE_HDX_UDP_PORTS /disableexperiencemetrics /exclude "Personal vDisk","Citrix Telemetry Service","Citrix Personalization for App-V - VDA" /remotepc 我测试了一下。发现一些问题。 (以下是排错) 在写这篇文章的时候,我用的是Citrix 1912的版本。 第一个是安装完成之后不能在计算机目录中添加此计算机,手动添加的话会显示计算机类型不对,如果添加该计算机所在OU,此计算机不会注册。原因是RemotePC可能不支持服务器系统。换成桌面PC就可以了。 第二个是操作系统过老,试过Win10 1511版本,VDA根本就装不上去。1809的是可以的。 (排错完毕) 然后开始添加计算机目录。 接下来,创建“交付组”,选择先前创建的计算机目录,并且在交付组创建完成之后,双击该交付组,然后找到需要分配的主机,然后“更改用户”。 以上完成了命令行安装VDA的所有操作。

我设置了一个OU,在这个OU中的计算机都会自动安装VDA。 接下来我要为这个OU设置一个开机脚本,来自动化的运行这个命令,首先我需要创建组策略。 为了完成这个效果,必须要拥有以下的权限: 1.添加或修改域策略的权限。 2.新加的脚本需要有管理员权限。

在域服务器上,在运行中输入“gpmc.msc”打开组策略管理。 新建一个GPO,然后编辑它。(上图中是在域中创建GPO,实际可以在OU中创建。) 我们先写一个测试脚本,看看OU中的机器在开机时是否能够运行。

我写的脚本很简单只有一句话的bat批处理脚本。 echo "1" > C:\1.txt 不过这个脚本是需要管理员权限的,否则1.txt是无法在C:根目录下生成的。 bat脚本的存放路径在 \ipqn.local\SYSVOL\ipqn.local\Policies{BE7F3242-CC42-43F6-81C2-A9EB60B19351}\Machine\Scripts\Startup

其中域名部分是变动的,还有一个guid为gpo的唯一ID。可以在“组策略管理”中的GPO对象详细信息中看到。 经过测试,我看到所有的OU中在开机后都会在C盘中多出1.TXT,验证完毕。

接下来是真的部署脚本。在脚本运行之前,需要做一些预备工作。首先是找一个文件服务器,可以在上面挂载iso,然后将光驱进行共享。 设置共享名之后,完全控制打钩。这样域用户就能够不输入密码来登录这个共享目录。 脚本内容如下: InstallVDI.bat

@echo off

if exist "C:\Program Files\Citrix\XenDesktopVdaSetup\XenDesktopVDASetup.exe" (
	echo "1"
) else (
	"\\ad1.ipqn.local\VDAinstall\x64\XenDesktop Setup\XenDesktopVDASetup.exe" /PASSIVE /components vda /CONTROLLERS "DC1.ipqn.local DC2.ipqn.local" /ENABLE_HDX_PORTS /ENABLE_REAL_TIME_TRANSPORT /ENABLE_FRAMEHAWK_PORT /ENABLE_HDX_UDP_PORTS /disableexperiencemetrics /exclude "Personal vDisk","Citrix Telemetry Service","Citrix Personalization for App-V - VDA" /remotepc
)

其中\ad1.ipqn.local\vdaisntall是共享路径。是根据实际情况变化的。 echo "1"语句可以改成在一个共享路径下写日志。 例如echo %hostname% >> \ad1.ipqn.local\testshare\finish.log

这样安装完成的用户不会去再次安装一遍vda,并且会在服务器上留下一条完成的记录,以便将其移出这个开机脚本的OU。 还有这个安装完成的主机需要重启两次。