自动将完整桌面池虚拟机加入到指定OU脚本说明

需求目的

当我们在配置VMWare Horizon桌面池的时候,自动桌面池,可以在创建的时候,手动指定想要生成的新桌面加入到自定义的OU当中。但是完整桌面池,并不能去手工指定OU,生成的虚拟机不会自动加入到想要指定的OU当中去,而是默认在Computer的OU中,每次都需要手动去调整,非常麻烦。那么如何实现使用Powershell脚本的方式,让虚拟机自动加域并放入到指定的OU当中呢

参考

实现的办法可以参考VMware社区里的这份帖子

https://communities.vmware.com/t5/Horizon-Desktops-and-Apps/Automatically-Move-Full-Clone-VM-into-specific-OU/td-p/2852864

修改步骤

我针对这份做了一些修改:使用脚本自动加域后到指定OU,然后删除所有脚本文件,原因是Powershell脚本里,使用了明文存储密码,在加入域后删除脚本文件。

首先,我们需要创建一份批处理bat文件,让它去自动执行powershell脚本,因为VMware自定义规范不能直接运行ps文件

创建批处理文件

批处理bat文件如下

@echo off

::设置脚本批处理bat和Powershell路径及文件名,请将两个文件保存在同一个文件夹中,并且bat和ps1的文件使用相同命名。
set scriptFileName=%~n0
set scriptFolderPath=%~dp0
set powershellScriptFileName=%scriptFileName%.ps1

::执行Powershell自动加域脚本
powershell -Command "Start-Process powershell "-ExecutionPolicy Bypass -NoProfile -NoExit -Command `"cd `"%scriptFolderPath%`"; & `".%powershellScriptFileName%`"`"" -Verb RunAs"

::设置等待时间,让Powershell脚本执行完毕
timeout 60

::设置强制重启虚拟Windows系统,预设60秒后重启。
shutdown -r -f -t 60

::在执行完强制重启操作系统等待时,删除所有脚本文件。注意,路径C:WindowsSetupJoin 为存放bat和ps1的文件的具体路径
timeout 5
del C:WindowsSetupJoin *. * / Q

创建Powershell文件

Powershell脚本文件如下

# 创建凭据对象
$cred = New-Object System.Management.Automation.PSCredential("domain.comdomainadmin", (ConvertTo-SecureString "P@$$w0rd" -AsPlainText -Force))

# 将计算机添加到域
Add-Computer -DomainName "domain.com" -OUPath "OU=ZH-VDI,OU=VDI-WIN10,OU=VMware-View,DC=domain,DC=com" -Credential $cred -Force

#自己把PS1脚本里的ou,domain.com,domaindomainadmin,DC,P@$$w0rd改成自己的域对应的,批处理bat和PS1文件名要相同,双击批处理bat就可以了

新建虚拟机自定义规范文件

image-20240319230602772

新建或者编辑现有的自定义规范

image-20240319230700368

修改自动登录方式

让系统以管理员(Administrator账号)身份自动登陆,输入管理员的密码

image-20240319230751257

设置自动执行一次的命令路径

image-20240319230818406

设置为工作组

让系统登陆后由Powershell脚本执行加域的动作。

桌面池生成的新虚拟机系统,自动登陆并执行脚本加入域

自动加入指定OU成功

img

自动强制重启虚拟机系统,并删除所有脚本成功。