本地主机缓存可见性工具
本文介绍了本地主机缓存 (LHC) 实时可见性工具,这是一个基于 PowerShell 的解决方案,可提供对 Citrix 本地主机缓存环境的可见性。使用此工具,您可以监控 Cloud Connector 运行状况,在 LHC 模式下识别选定的领导者,控制强制中断模式,并查询事件日志以排查 LHC 行为。
概述
本地主机缓存 (LHC) 实时可见性工具是一个全面的基于 PowerShell 的解决方案,用于提供 Citrix 本地主机缓存环境的可见性。它提供了一个命令行界面和可从 Cloud Connector 访问的简单 GUI,供您执行以下操作:
- 发现区域或资源位置中的 Cloud Connector。
- 在 LHC 模式下识别选定的领导者。
- 启用或禁用区域或资源位置中所有 Cloud Connector 的强制中断模式。
- 查询来自特定提供程序和事件 ID 的事件日志。
- 在选定的领导者上运行 Broker PowerShell 命令。
先决条件
在部署和运行本地主机缓存可见性工具之前,请确保您的环境满足以下系统要求、权限和文件要求。
系统要求
- Windows Server 2016 或更高版本
- PowerShell 5.1 或更高版本
- 必须在 Citrix Cloud Connector™ 上运行。
- 所需服务:
- Citrix 高可用性服务
- Citrix 配置同步服务
权限
- 本地计算机上的管理员权限
- 区域中所有 Cloud Connector 的远程 PowerShell 执行权限
- 与所有 Cloud Connector 的网络连接
所需文件
-
LHCVisibilityTool.ps1- 核心 PowerShell 模块 -
LHCVisibilityToolGUI.ps1- GUI 应用程序 -
HighAvailabilityServiceControl.psm1- Citrix HA 服务控制模块
GUI PowerShell 脚本位于:
C:\Program Files\Citrix\Broker\Service\LHCVisibilityToolScripts
<!--NeedCopy-->
开始使用
运行该工具之前,请使用以下选项之一设置 PowerShell 执行策略:
-
选项 1:RemoteSigned(限制性更强):
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser <!--NeedCopy--> -
选项 2:仅当前会话(临时):
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process <!--NeedCopy-->
注意:
您可能需要以管理员身份运行 PowerShell 才能更改执行策略。如果您只有用户级权限,请使用
-Scope CurrentUser。
通过 GUI 应用程序使用该工具
GUI 提供了一个选项卡式界面,用于发现 Cloud Connector、控制中断模式、查询事件日志以及运行代理命令。启动该工具后,选择一个任务以查看其说明:
启动 GUI
cd "C:\Program Files\Citrix\Broker\Service\LHCVisibilityToolScripts"
.\LHCVisibilityToolGUI.ps1
<!--NeedCopy-->

该工具采用三选项卡布局,底部带有一个持久状态栏。

状态栏位于窗口底部,包含:
| 项目 | 描述 |
|---|---|
| 操作状态(左侧) | 当前操作,或“就绪” |
| HA 模式状态 | 每个连接器的点指示器(最多显示 5 个;如果截断,则显示“+N 个更多”);悬停工具提示显示完整列表 |
| 上次更新时间 | 上次成功刷新 HA 状态的时间戳 |
| 查看日志 | 在记事本中打开会话日志文件 |
状态栏使用以下颜色指示 HA 状态:
| 状态 | 颜色 |
|---|---|
| 正常工作 | 绿色 |
| 待定HA | 金黄色 |
| 待定恢复 | 橙色 |
| 初始HA | 红色 |
| 扩展HA | 红色 |
| 未知 / 不可达 | 灰色 |
发现 Cloud Connector 并识别主导者
在系统状态和控制选项卡上,单击发现并识别主导者。该工具使用以下方式自动检测并显示区域中所有 Cloud Connector 之间选出的主导者:
- 事件日志分析(事件 ID 3504)
- 注册表 PeerStatus 和 IsElected 信息
- 本地服务验证
系统状态和控制选项卡(/en-us/citrix-daas/media/lhc-visibility-tool-system-status.png)
控制强制中断模式
在“系统状态和控制”选项卡上,使用中断模式控件管理整个区域的 HA 模式:
-
启用强制中断模式:
- 强制区域中的所有 Cloud Connector 进入 HA 模式
- 使用本地主机缓存进行代理
- 要求 LHC 数据库同步
-
禁用强制中断模式:
- 允许系统恢复正常运行
- 在可用时重新连接到主站点
警告:
这些操作会影响区域中的所有 Cloud Connector。
查询和跟踪事件日志
在“事件日志查询”选项卡上,配置以下查询参数:
-
目标:选择:
- 所有云连接器
- 仅选定的领导者
- 特定计算机(输入 FQDN)
-
提供程序名称:选择或输入自定义提供程序:
- Citrix 高可用性服务
- Citrix 配置同步服务
- Citrix 代理服务
-
事件 ID:逗号分隔列表(例如,
3502,3503,3506) - 时间范围:可选地按开始和结束时间筛选
- 最大事件数:每台计算机检索的最大事件数(默认值:100)
使用以下按钮处理事件:
- 查询事件:使用配置的查询参数查询事件日志。
- 过去的 HA 事件:根据配置的查询参数查找 LHC 的开始和结束边界(事件 3502、3503、3508),并显示结束摘要事件以提供概述。
- 清除事件:清除事件列表、详细信息面板和跟踪状态。
- 导出报告: 从 GUI 中查询到的事件创建统计信息,并将其保存为文本文件。(使用“显示事件统计信息”按钮的输出。)

实时跟踪行为如下:
- 当 LHC 处于活动状态时,实时跟踪每 120 秒监控一次新的摘要事件。
- 当实时跟踪开始时,它通过引用事件 3502 确定 LHC 模式的开始时间,并列出自开始以来出现的所有事件。
- 实时跟踪可以手动停止,或者在 LHC 模式结束时自动停止。
下半部分提供两种主要视图:
-
左侧面板:
- 事件按时间顺序排列,并包含关键详细信息(事件编号、时间、ID、类型)。
- 每个事件都根据其类型通过颜色进行视觉区分,遵循事件 ID 参考。
- 选择一个事件会显示有关它的更多信息。
-
右侧面板: 两个显示选项允许您在所选事件的统计摘要和详细信息之间切换:
- 显示事件详细信息: 所选事件的全面详细信息。
- 显示事件统计信息: 总结 HA 模式事件的统计信息,包括来自摘要事件 (3507) 的表格指标和 ASCII 条形图。
下图显示了事件详细信息视图:

下图显示了事件统计信息视图:

参考:HA 和 ConfigSync 事件 ID
以下部分按提供程序列出了常见的事件 ID。
Citrix 高可用性服务:
| 事件 ID | 描述 |
|---|---|
| 3502 | 进入 HA 模式(当选代理) |
| 3503 | 退出 HA 模式(恢复正常操作) |
| 3506 | 进入 HA 模式(非当选代理) |
| 3507 | 定期 HA 模式摘要(选定的代理) |
| 3508 | HA 模式摘要结束(选定的代理) |
Citrix ConfigSync 服务:
| 事件 ID | 描述 |
|---|---|
| 503 | 同步过程已启动 |
| 504 | 同步成功完成 |
| 505 | 同步失败 |
| 507 | 由于 HA 模式,同步已中止 |
| 510 | 未收到配置数据 |
| 517 | 与主代理通信时出现问题 |
| 518 | 配置同步中止(HA 服务未运行) |
运行代理命令
在代理命令选项卡上,预定义命令如下:
- Get-BrokerMachine:检索 VDA/计算机信息
- Get-BrokerSession:检索活动会话
- Get-BrokerDesktopGroup:检索交付组
- Get-BrokerCatalog:检索计算机目录
- Get-BrokerApplication:检索已发布的应用程序
代理命令选项卡(/en-us/citrix-daas/media/lhc-visibility-tool-broker-commands.png)
提示:
使用筛选器文本框可同时在所有字符串列中搜索结果中的特定项目。
运行自定义命令:
- 输入命令,例如
Get-BrokerMachine -MaxRecordCount 2。 - (可选)指定要返回的属性(以逗号分隔)。
- 单击 Execute。

注意:
当满足以下条件时,代理命令会从 LHC 数据库提供最新信息:
- 系统处于 LHC 模式。
- 已识别出当选领导者。
- LHC 数据库可用。
查看会话日志
要打开当前会话日志,请单击状态栏中的 View Log。日志将在记事本中打开。
每个会话都会在 %TEMP%\LHCVisibilityTool_<yyyyMMdd_HHmmss>.log 创建一个日志文件。消息也会以颜色编码写入主机控制台。
通过命令行使用该工具
除了 GUI,您还可以直接从 PowerShell 运行该工具。导入模块后,使用以下命令执行每个任务。选择一个任务以转到其命令:
启动命令行工具
cd "C:\Program Files\Citrix\Broker\Service\LHCVisibilityToolScripts"
. .\LHCVisibilityTool.ps1
<!--NeedCopy-->
发现云连接器
$connectors = Get-CloudConnectorsInZone
$connectors | ForEach-Object { Write-Host $_ }
<!--NeedCopy-->
识别选定的领导者
$leader = Get-ElectedLeader
Write-Host "Elected Leader: $leader"
<!--NeedCopy-->
获取中断状态
$states = Get-OutageState
foreach ($connector in $states.Keys) {
Write-Host "$connector : $($states[$connector].State)"
}
<!--NeedCopy-->
查询事件日志
查询所有 Cloud Connector 的 HA 事件:
$results = Get-LHCEventLogs -EventID @(3502, 3503, 3506) `
-ProviderName "Citrix High Availability Service" `
-StartTime (Get-Date).AddDays(-7) `
-EndTime (Get-Date) `
-MaxEvents 100
# Display results
foreach ($computer in $results.Keys) {
Write-Host "`n=== $computer ==="
if ($results[$computer].Success) {
$results[$computer].Events | Format-Table TimeCreated, Id, Message -AutoSize
} else {
Write-Host "ERROR: $($results[$computer].Error)" -ForegroundColor Red
}
}
<!--NeedCopy-->
仅查询选定的领导者:
$results = Get-LHCEventLogs -ComputerName "ElectedLeader" `
-EventID @(3507) `
-ProviderName "Citrix High Availability Service" `
-MaxEvents 50
<!--NeedCopy-->
查询特定计算机:
$results = Get-LHCEventLogs -ComputerName "CC-01.domain.com" `
-EventID @(503, 504, 505) `
-ProviderName "Citrix ConfigSync Service"
<!--NeedCopy-->
运行代理命令
获取所有计算机:
$machines = Invoke-BrokerCommand -Command "Get-BrokerMachine" `
-Properties @("MachineName", "RegistrationState", "SessionCount")
$machines | Format-Table -AutoSize
<!--NeedCopy-->
获取活动会话:
$sessions = Invoke-BrokerCommand -Command "Get-BrokerSession" `
-Properties @("UserName", "MachineName", "SessionState")
$sessions | Format-Table -AutoSize
<!--NeedCopy-->
运行带参数的自定义命令:
$params = @{
MaxRecordCount = 10
}
$results = Invoke-BrokerCommand -Command "Get-BrokerMachine" `
-Parameters $params `
-Properties @("MachineName", "DesktopGroupName")
<!--NeedCopy-->
控制中断模式
在所有 Cloud Connector 上启用强制中断模式:
$results = Set-LHCOutageMode -Enable
# Check results
foreach ($connector in $results.Keys) {
$status = if ($results[$connector].Success) { "SUCCESS" } else { "FAILED" }
Write-Host "$connector : $status"
if (-not $results[$connector].Success) {
Write-Host " Error: $($results[$connector].Error)" -ForegroundColor Red
}
}
<!--NeedCopy-->
禁用强制中断模式:
$results = Set-LHCOutageMode
# Check results
foreach ($connector in $results.Keys) {
$status = if ($results[$connector].Success) { "SUCCESS" } else { "FAILED" }
Write-Host "$connector : $status"
}
<!--NeedCopy-->
故障排除
要解决该工具的问题,请遵循以下一般流程:
- 检查应用程序事件日志以获取详细错误消息。
- 验证是否满足所有先决条件。
- 查看下表中的常见问题以及本文后面描述的 最佳实践。
- 请参阅 本地主机缓存 和 避免可能对 DaaS 弹性产生负面影响的常见错误配置 技术简报。
下表列出了使用该工具时可能遇到的常见问题及其推荐解决方案。
| 问题 | 解决方案 |
|---|---|
| 未找到云连接器
|
|
| 无法识别选定的领导者
|
|
| 代理命令失败
|
|
| 远程执行错误
|
|
| 事件日志查询未返回任何结果
|
|
最佳实践
遵循这些最佳实践,以充分利用该工具并安全地操作您的本地主机缓存环境。
定期监控
- 定期运行 发现云连接器 和 识别当选领导者。
- 监控
ConfigSync事件(503、504、505)以查找同步问题。
事件日志分析
- 查询过去 7 天的 HA 事件以了解中断模式。
- 在 HA 模式下查找事件 ID 3507 以获取详细统计信息。
代理命令
- 仅在选定的领导者上运行。
- 限制属性选择以提高性能。
- 对于大型环境,请使用
MaxRecordCount参数。
中断模式
- 仅将强制中断模式用于测试或计划维护。
- 始终在启用前验证 LHC 数据库是否已同步。
- 主连接恢复后,禁用强制中断模式。
安全
- 尽可能使用最低权限帐户运行。
- 使用安全通道进行远程执行。
- 审计中断模式更改。
示例
以下示例假设您已在 C:\Reports 创建了一个文件夹来保存输出。
示例 1:每日 HA 模式报告
# Import module
. "C:\Program Files\Citrix\Broker\Service\LHCVisibilityToolScripts\LHCVisibilityTool.ps1"
# Discover environment
$connectors = Get-CloudConnectorsInZone
Write-Host "Found $($connectors.Count) Cloud Connectors"
# Check HA status
$leader = Get-ElectedLeader
if ($leader) {
Write-Host "System is in HA mode. Elected leader: $leader"
# Get HA summary events from elected leader
$events = Get-LHCEventLogs -ComputerName "ElectedLeader" `
-EventID @(3507, 3508) `
-ProviderName "Citrix High Availability Service" `
-StartTime (Get-Date).AddHours(-24) `
-MaxEvents 100
# Export to file
$events[$leader].Events | Select-Object TimeCreated, Id, LevelDisplayName, Message | Export-Csv -Path "C:\Reports\HA-Status-$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation
} else {
Write-Host "System is in normal operations mode"
}
<!--NeedCopy-->
示例 2:检查所有连接器上的 ConfigSync 状态
. "C:\Program Files\Citrix\Broker\Service\LHCVisibilityToolScripts\LHCVisibilityTool.ps1"
$results = Get-LHCEventLogs -ComputerName "All" `
-EventID @(503, 504, 505) `
-ProviderName "Citrix ConfigSync Service" `
-StartTime (Get-Date).AddHours(-6) `
-MaxEvents 10
foreach ($computer in $results.Keys) {
$lastEvent = $results[$computer].Events | Sort-Object TimeCreated -Descending | Select-Object -First 1
$status = switch ($lastEvent.Id) {
503 { "In Progress" }
504 { "Success" }
505 { "Failed" }
}
Write-Host "$computer - Last Sync: $($lastEvent.TimeCreated) - Status: $status"
}
<!--NeedCopy-->
示例 3:在 HA 模式下获取会话计数
. "C:\Program Files\Citrix\Broker\Service\LHCVisibilityToolScripts\LHCVisibilityTool.ps1"
# Ensure we have an elected leader
$leader = Get-ElectedLeader
if ($leader) {
# Get all sessions
$sessions = Invoke-BrokerCommand -Command "Get-BrokerSession"
Write-Host "Total Sessions: $($sessions.Count)"
# Group by state
$sessionsByState = $sessions | Group-Object SessionState
foreach ($group in $sessionsByState) {
Write-Host " $($group.Name): $($group.Count)"
}
} else {
Write-Host "Not in HA mode - cannot query sessions from LHC"
}
<!--NeedCopy-->
高级场景
以下场景将多个工具功能组合到脚本中,以实现更复杂的操作,例如自动化中断测试和导出历史 HA 模式数据。
自动化中断测试
# Enable outage mode
Write-Host "Enabling forced outage mode..."
$enableResults = Set-LHCOutageMode -Enable
$allEnabled = $enableResults.Values | Where-Object { -not $_.Success }
if ($allEnabled) {
Write-Host "WARNING: Some connectors failed to enable outage mode - aborting test" -ForegroundColor Yellow
return
}
Start-Sleep -Seconds 30
# Verify elected leader
$leader = Get-ElectedLeader
Write-Host "Elected leader: $leader"
# Test brokering
$machines = Invoke-BrokerCommand -Command "Get-BrokerMachine" -Properties @("MachineName", "RegistrationState")
Write-Host "Retrieved $($machines.Count) machines"
# Disable outage mode
Write-Host "Disabling forced outage mode..."
$disableResults = Set-LHCOutageMode
<!--NeedCopy-->
导出 HA 模式历史记录
$haEvents = Get-LHCEventLogs -ComputerName "All" `
-EventID @(3502, 3503) `
-ProviderName "Citrix High Availability Service" `
-StartTime (Get-Date).AddDays(-30) `
-MaxEvents 1000
$report = foreach ($computer in $haEvents.Keys) {
if (-not $haEvents[$computer].Success) { continue }
foreach ($event in $haEvents[$computer].Events) {
[PSCustomObject]@{
Computer = $computer
EventID = $event.Id
EventType = if ($event.Id -eq 3502) { "Entered HA Mode" } else { "Exited HA Mode" }
Time = $event.TimeCreated
}
}
}
$report | Sort-Object Time | Export-Csv -Path "C:\Reports\HA-History.csv" -NoTypeInformation
<!--NeedCopy-->