如何用PowerShell或CLI连接Horizon ADAM LDAP数据库批量改属性?
用PowerShell批量修改VMware Horizon ADAM LDAP中的虚拟机池删除策略
核心步骤与代码示例
你可以通过PowerShell内置的DirectoryServices组件直接操作ADAM LDAP,完全替代adsiedit手动操作,以下是完整的批量修改流程:
- 建立ADAM LDAP连接
替换<ADAM服务器地址>:<端口>为你的Horizon ADAM实例地址(默认端口389,SSL加密用636),<域\用户名>和<密码>为拥有ADAM修改权限的账号:
# 初始化LDAP连接参数 $adamServer = "LDAP://<ADAM服务器地址>:<端口>" $credentials = New-Object System.Management.Automation.PSCredential("<域\用户名>", (ConvertTo-SecureString "<密码>" -AsPlainText -Force)) # 建立连接 $adamEntry = New-Object System.DirectoryServices.DirectoryEntry($adamServer, $credentials.UserName, $credentials.GetNetworkCredential().Password)
- 查询所有虚拟机池对象
精准过滤出Horizon虚拟机池对应的LDAP对象,并加载需要的属性:
# 创建LDAP搜索器 $searcher = New-Object System.DirectoryServices.DirectorySearcher($adamEntry) $searcher.Filter = "(objectClass=pae-VmPool)" $searcher.PropertiesToLoad.AddRange(@("distinguishedName", "pae-VmDeletePolicy")) # 执行查询 $poolResults = $searcher.FindAll()
- 批量修改删除策略
循环遍历所有池对象,将pae-VmDeletePolicy属性切换为DeleteOnUse或Never,按需选择:
# 设置目标策略(二选一) $targetPolicy = "DeleteOnUse" # $targetPolicy = "Never" foreach ($pool in $poolResults) { $poolEntry = $pool.GetDirectoryEntry() # 输出当前池信息(可选,用于验证) Write-Host "处理池: $($pool.Properties["distinguishedName"])" Write-Host "原策略: $($pool.Properties["pae-VmDeletePolicy"])" # 执行修改并保存 $poolEntry.Properties["pae-VmDeletePolicy"].Value = $targetPolicy $poolEntry.CommitChanges() Write-Host "已更新为: $targetPolicy`n" }
关键注意事项
- 操作前务必备份ADAM数据库,避免误操作导致Horizon服务异常
- 先测试单个池的修改(比如在循环中添加过滤条件指定某一个池),确认生效后再批量执行
- 如果使用SSL连接,将
LDAP://替换为LDAPS://,并确保ADAM服务器的SSL证书有效 - 执行账号需要拥有ADAM中虚拟机池对象的写入权限
内容的提问来源于stack exchange,提问作者Val
相关产品推荐
相关产品推荐

