适用于 Windows 的体验管理

体验管理(以前称为 DEEM)在您的Windows设备上工作,让您能够深入了解网络运行状况。适用于 Windows 的 Experience Management Agent 嵌入在 Windows 应用程序的Workspace ONE Intelligent Hub中,因此,当您将此应用部署并安装到受管Windows设备时,您可以在Workspace ONE Intelligence仪表板和报告中使用 Experience Management 进行Windows遥测。

在 Windows 上进行安装和故障排除

如果您的设备未将遥测数据发送到 Workspace ONE Intelligence 以用于体验管理,您可以通过检查 Workspace ONE Intelligent Hub 的状态并查看日志文件来对系统进行故障排除。

是否需要为 Windows 设备安装单独的体验管理代理?

您无需在Windows设备上安装 Experience Management Agent。适用于 Windows 的 Experience Management Agent 与适用于 Windows 的 Workspace ONE Intelligent Hub一起安装。在 C:\Program Files\VMware\Endpoint Telemetry Service 中找到代理。

如何检查 Workspace ONE Intelligent Hub 是否正在运行?

要对向 Workspace ONE Intelligence 发送数据的问题进行故障排除,一种方法是确保 Workspace ONE Intelligent Hub 或适用于 Windows 的体验管理代理正在 Windows 设备上运行。体验管理代理包括两项服务。

服务名称 服务显示名称
VMWOSQEXT VMware 数字体验遥测
vmwetlm VMware Experience Management Service

以管理员身份启动命令提示符应用,并运行 sc query vmwosqextsc query vmwetlm。这些命令将 DEEM 遥测代理服务的状态显示为 VMWOSQEXTvmwetlm

体验管理使用哪些注册表设置?

体验管理会在 HKEY_LOCAL_MACHINE?SYSTEM?CurrentControlSet?Services?VMWOSQEXT 下以及 Windows 设备上的 HKEY_LOCAL_MACHINE“SYSTEM”CurrentControlSet?Services?vmwetlm 下创建注册表项。这些注册表适用于 Workspace ONE Intelligent Hub 和适用于 Windows 的体验管理代理。

用于故障排除的实用程序工具 (tlmtool)

为了更轻松地进行故障排除,体验管理代理 v22.6.0 及更高版本附带了一个名为 tlmtool 的新实用程序工具。使用实用程序工具设置日志级别、收集日志文件和打包日志文件。

实用程序工具安装在设备上与适用于 Windows 的体验管理相同的目录中,位于 C:\Program Files\VMware\Endpoint Telemetry Service\Tools。可以使用以下位置的注册表项检索安装路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vmwetlm\ImagePath

如何运行实用程序工具?

以管理员身份运行 tlmtool,并将执行策略与 PowerShell 脚本配合使用。PowerShell 命令为 Set-ExecutionPolicy

  1. 以管理员身份运行命令提示符应用。
  2. 转到安装路径 C:\Program Files\VMware\Endpoint Telemetry Service\Tools
  3. 运行 tlmtool <options> [arguments]
    在命令提示符中输入的内容示例:tlmtool -setLogLevel Trace
  4. 要查看 tlmtool 中支持的命令选项,请在命令提示符中输入 tlmtool -help

实用程序工具的命令行选项

选项 使用量 说明
collectLog -collectLog 默认情况下,收集并打包日志文件,并将其存储在 C:\Windows\Temp\Diagnostic 中。
getDEEMManagementMode -getDEEMManagementMode 检索哪个系统管理体验管理系统(Workspace ONE UEM 或 Horizon)。
getDEEMDisabled -getDEEMDisabled 获取由实用程序工具设置的收集和发送体验管理数据的状态。

-false:体验管理正在收集和发送数据。
-true:体验管理不会收集和发送数据。
help -help 显示工具的帮助信息。
resetAllLogSettings -resetAllLogSettings 将所有日志设置重置为默认值,包括日志级别和配置。
resetLogConfiguration -resetLogConfiguration maxLogSize 将日志文件的最大大小重置为默认值 1MB。
-resetLogConfiguration maxTraceLogSize 将跟踪日志文件的最大大小重置为默认值 10MB。
-resetLogConfiguration maxLogFiles 将保留的最大历史日志文件数重置为默认值 10。
resetLogLevel -resetLogLevel 将日志级别重置为默认设置。
setDEEMDisabled -setDEEMDisabled false 将体验管理设置为继续收集和发送数据。
-setDEEMDisabled true 阻止体验管理收集和发送数据。

管理策略可能会使此命令无效。请参阅使用组策略对象为 Windows配置体验管理一节。
setDEEMManagementMode -setDEEMManagementMode <uem> 设置 Workspace ONE UEM 以管理体验管理服务。
-setDEEMManagementMode <horizon> 设置 Horizon 以管理体验管理服务。
setLogConfiguration -setLogConfiguration maxLogSize <1..50> 设置日志文件的最大大小(以 MB 为单位),范围为 1-50。
-setLogConfiguration maxTraceLogSize <1..50> 设置跟踪日志文件的最大大小(以 MB 为单位),范围为 1-50。
-setLogConfiguration maxLogFiles <1..30> 设置保留的最大历史日志文件数,范围为 1-30。
setLogLevel -setLogLevel <Error\Info\Debug\Trace> 将日志级别设置为 <Error\Info\Debug\Trace>

如何在设备上激活体验管理遥测代理的日志记录?

  • 对于体验管理代理 v22.6.0 及更高版本,通过运行 tlmtool 命令 tlmtool -setLogLevel Trace 激活体验管理的日志记录,而无需重新启动服务。
  • 对于较旧的 VMWOSQEXT 服务,请通过更新列出的注册表项来激活体验历的日志记录。
    • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VMWOSQEXT\ImagePath = “"C:\Program Files (x86)\Airwatch\AgentUI\Telemetry\vmwosqext.exe" --service --osq_named_pipe=vmwosqext.em --logger_min_status=0 --vmw_windows_log_verbose”
    • 注册表更改后,重新启动服务。然后,这些日志将写入文件夹 C:\ProgramData\VMWOSQEXT 中。
  • 对于最新的 vmwetlm 服务,请通过更新列出的注册表来激活日志记录,而不重新启动该服务。
    • HKEY_LOCAL_MACHINE\SOFTWARE\VMware, Inc.\VMware Endpoint Telemetry\Service\Config\Log\LogLevel="Trace"
    • 系统会将日志写入文件夹 C:\ProgramData\VMware\vmwetlm\logs

为体验管理激活其他登录事件报告(可选)

要在用户体验评分中提供有关 Windows 登录/注销体验的其他体验管理衡量指标,请在适用的 Windows 设备上激活列出的高级审核策略。

  • 审核注销
  • 审核登录
  • 审核其他登录/注销事件
  • 审核特殊登录

在计算机上

您可以使用列出的过程在 Windows 计算机上激活这些策略。

  1. 打开组策略编辑器 (Gpedit.msc)。
  2. 转到计算机配置 > Windows 设置 > 安全设置 > 高级审核策略配置 > 系统审核策略 - 本地组策略对象 > 登录/注销
  3. 成功和失败报告激活和配置上述每个策略。

使用 CMD 文件

如果要使用 CMD 文件(批处理文件)激活高级审核策略,列出的代码将更新适用的 GPO。

@echo off
echo "Machine Name,Policy Target,Subcategory,Subcategory GUID,Inclusion Setting,Exclusion Setting,Setting Value" >audit_policy.csv
echo ",System,Audit Logoff,{0cce9216-69ae-11d9-bed3-505054503030},Success and Failure,,3" >>audit_policy.csv
echo ",System,Audit Logon,{0cce9215-69ae-11d9-bed3-505054503030},Success and Failure,,3" >>audit_policy.csv
echo ",System,Audit Other Logon/Logoff Events,{0cce921c-69ae-11d9-bed3-505054503030},Success and Failure,,3" >>audit_policy.csv

auditpol.exe /restore /file:audit_policy.csv
del /f audit_policy.csv

使用基准

激活审核策略的另一种方法是使用基准。基准是组合在一起的精选设置,可简化 Windows 配置。列出的过程概述了激活高级审核策略的常规步骤。有关基准的详细信息,请访问使用基准

  1. 在 Workspace ONE UEM 中,选择组织组。
  2. 在控制台中的资源 > 配置文件和基准 > 基准中使用模板创建基准。
  3. 使用 Windows 安全基准模板。
  4. 自定义选项卡上,在计算机配置 > Windows 设置 > 安全设置 > 高级审核策略配置 > 系统审核策略 – 本地组策略对象 > 登录/注销中查找策略。
  5. 激活成功和失败的设置。
  6. 保存基准并将其分配给适用的智能组。
  7. 重新启动设备以部署基准。

使用 PowerShell

如果您不希望使用 GPO、CMD 文件或基准,还可以使用 PowerShell 命令为 Windows 登录/注销体验数据激活审核策略。

  1. 关闭回声。
    $host.UI.RawUI.BufferSize = New-Object Management.Automation.Host.Size (500, $host.UI.RawUI.BufferSize.Height)
    $ProgressPreference = 'SilentlyContinue'
    
  2. 定义 CSV 内容。
    $csvContent = @"
    "Machine Name,Policy Target,Subcategory,Subcategory GUID,Inclusion Setting,Exclusion Setting,Setting Value"
    ",System,Audit Logoff,{0cce9216-69ae-11d9-bed3-505054503030},Success and Failure,,3"
    ",System,Audit Logon,{0cce9215-69ae-11d9-bed3-505054503030},Success and Failure,,3"
    ",System,Audit Other Logon/Logoff Events,{0cce921c-69ae-11d9-bed3-505054503030},Success and Failure,,3"
    "@`
    
  3. 将内容写入 audit_policy.csv$csvContent | Out-File -FilePath "audit_policy.csv" -Encoding ASCII
  4. 运行 auditpol.exe 命令。& auditpol.exe /restore /file:audit_policy.csv
  5. 删除 CSV 文件。Remove-Item -Path "audit_policy.csv" -Force

使用组策略对象为 Windows 配置体验管理

使用组策略对象配置体验管理代理。

例如,当您不希望从用户设备收集遥测时,可以使用组策略对象配置体验管理代理。要控制本地 Windows 计算机上体验管理遥测的收集,请使用适用于 Windows ADMX 的体验管理模板文件 vmw_etlm.admx 中包含的自定义组策略对象 (GPO)。

My Workspace ONE 查找并下载 ZIP 格式的模板文件。您必须将文件复制到 Active Directory 服务器,并使用组策略管理编辑器添加管理模板。

可用的 GPO

GPO 设置 说明
允许本地禁用 确定是否允许在用户设备上使用 tlmtool 实用程序工具进行本地停用。

设置为启用时,允许使用 tlmtool 实用程序工具进行本地停用。

设置为禁用时,实用程序工具的停用不起作用。

如果未配置此策略,则允许本地停用。
禁用 DEEM 确定是否可以通过管理策略 (GPO) 停用体验管理。

设置为启用时,体验管理会停止从用户的设备收集和发送遥测数据。

如果将该策略设置设定为禁用或者如果未配置该策略设置,则用户仍然可以在本地停用体验管理,具体取决于允许本地禁用策略设置。
管理模式 确定管理体验管理集成的解决方案,Workspace ONE UEM 或 Horizon。

默认管理器为 Workspace ONE UEM。使用 GPO 覆盖默认值。
代理服务器配置 这些策略设置配置 Horizon 桌面在将数据发送到 Intelligence 服务时使用的代理服务器配置。
选择自动
代理设置时,系统会自动发现具有 WPAD(Web 代理自动发现协议)和 DHCP(动态主机配置协议)等协议的代理配置。
选择脚本代理设置时,系统将使用脚本地址
检索代理配置脚本。脚本地址可以是 URL 或标准 URN 位置。例如,它可以是本地或远程磁盘上的文件,\\server\share\script.pac

选择静态代理设置时,静态代理 URL 指定要使用的代理。URL 可以包含端口。

如果停用或未配置此策略,则系统不使用代理。

控制本地计算机的体验管理

使用管理模板和 GPO 或实用程序工具 (tlmtool) 控制体验管理数据的收集。

  • 使用管理模板可控制多种停用方法。
    • 使用实用程序工具允许或拒绝本地停用体验管理。
    • 通过管理策略允许或拒绝停用体验管理。
  • 使用实用程序工具停用体验管理并停止收集数据(如果管理策略允许)。

为什么要在本地控制体验管理?

在本地 Windows 计算机上控制体验管理的功能在多种场景中非常有用。

  • 示例 1:域管理员需要控制资源:作为域管理员,您需要确保本地管理员不会使用实用程序工具在本地计算机上停用体验管理。您可以进行列出的配置。
    • 将 GPO 禁用 DEEM 配置为禁用或将其保留为未配置
    • 将 GPO 允许本地禁用配置为禁用
    • 本地管理员无法使用实用程序工具停用体验管理。
  • 示例 2:支持人员需要对升级进行本地控制:作为域管理员,您希望确保支持人员可以停用特定设备上的体验管理,以帮助进行升级。您可以进行列出的配置。
    • 将 GPO 禁用 DEEM 配置为禁用或将其保留为未配置
    • 将 GPO 允许本地禁用配置为启用或将其保留为未配置
    • 支持人员可以使用实用程序工具来停用体验管理。

在停用过程中,GPO 与实用程序工具之间有何关系?

要了解 GPO 和实用程序工具在停用体验管理时如何协同工作,请从 GPO 设置禁用 DEEM 开始并浏览流程图以查看哪些设置激活了该功能,以及哪些设置停用了该功能。

首先检查 GPO 设置,然后查看实用程序工具的状态,您可以查看是否完全停用了体验管理。

配置管理模板

安装包含自定义 GPO 的管理模板并对其进行配置。

  1. 获取管理模板并将其安装到本地计算机上。
  2. 配置管理模板。
    1. 在本地 Windows 计算机上,搜索 本地组策略,然后打开编辑器。
    2. 转到计算机配置 > 管理模板 > VMware 端点遥测 > DEEM
    3. 查看体验管理的设置,并使用编辑策略设置链接更新配置。
      1. 配置允许本地禁用设置,以允许或拒绝本地管理员配置实用程序工具。
        • 禁用:通过实用程序工具禁用停用不起作用。
        • 启用。允许通过实用程序工具进行本地停用。
        • 未配置:允许通过实用程序工具进行本地停用。
      2. 配置禁用 DEEM 设置以控制本地计算机上的体验管理机制。
        • 禁用:仍可以在本地停用体验管理,具体取决于允许本地禁用策略设置。
        • 启用。体验管理停止收集和发送遥测数据。
        • 未配置:仍可以在本地停用体验管理,具体取决于允许本地禁用策略设置。

配置实用程序工具

使用命令行控制体验管理收集和发送数据。

  1. 在本地计算机上运行实用程序工具。
  2. 使用命令 -setDEEMDisabled <value> 通过实用程序工具控制体验管理数据的收集和发送。
    • -setDEEMDisabled false:体验管理将继续收集和发送数据。
    • -setDEEMDisabled true:体验管理停止收集和发送数据。
  3. (可选)您可以使用查询 -getDEEMDisabled 查看体验管理状态。
    • false:体验管理正在收集和发送数据。
    • true:体验管理不会收集和发送数据。

使用脚本和传感器控制体验管理

使用脚本远程控制(激活或停用)Windows 设备上的体验管理,并使用传感器远程检索 Windows 设备上的体验管理的当前状态。

何时使用脚本和传感器远程控制体验管理

您可能会决定需要在各种场景中关闭体验管理。

  • 如果您二次许可 Workspace ONE Intelligence 或体验分析,则可以使用脚本和传感器来控制哪些设备正在发送体验管理数据。
    • 系统会跟踪将体验管理数据作为“已消耗许可证”发送的设备。
    • 例如,您购买了 1000 个Workspace ONE UEM 许可证,但您只购买了 500 个体验分析许可证,因为您还没有完全准备好在所有 1000 Workspace ONE UEM 管理设备上使用体验管理。
  • 如果要使用部署环控制体验管理数据激活的部署,则可以使用脚本和传感器进行部署。
    • 例如,您购买了 500 个体验分析许可证,但必须先将服务部署到 UAT 环境进行测试。
    • 在部署所有许可证之前,将许可证从 UAT 一波一波地部署到设备。
    • 通过在部署环中部署许可证,可以跟踪体验管理服务对设备和网络规则的影响和兼容性。
  • 如果出于任何原因要恢复计算机中的体验管理激活,请使用脚本和传感器更改体验管理的状态。
    • 例如,在部署期间,您发现体验管理或其他服务存在一个不可预见的问题。
    • 使用脚本停用设备上的体验管理,并使用传感器确认正确的设备停用了体验管理。

要求

满足列出的要求,使用脚本和传感器控制体验管理。

  • 使用 Workspace ONE UEM 管理 Windows 设备。
  • 在设备上对 Windows 23.10 或更高版本使用 Workspace ONE Intelligent Hub。
  • 使用 Workspace ONE UEM 推送脚本和传感器。
  • 使用列出的脚本激活或停用体验管理。
  • 使用列出的传感器检索体验管理状态和版本。

用于激活或停用的脚本

使用此脚本激活或停用体验管理。

# Set the $deemDisabled value. $True will Disable DEEM, $False will Enable DEEM
$deemDisabled = $true

# Define the log file path
$logFilePath = "C:\ProgramData\AirWatch\UnifiedAgent\Logs\DEEMstatus.log"

# Function to check and truncate the log file if it exceeds 1MB
function CheckAndTruncateLogFile {
    if (Test-Path $logFilePath) {
        $file = Get-Item $logFilePath
        $fileSizeMB = $file.Length / 1MB
        if ($fileSizeMB -gt 1) {
            Clear-Content $logFilePath
        }
    }
}

# Function to log and write a message
function LogAndWriteMessage {
    # Arguments
    $message = $args[0]
    $addSeparator = $false
    if ($args.Length -gt 1) {
        $addSeparator = $args[1]
    }

    CheckAndTruncateLogFile
    $separator = if ($addSeparator) { "`r`n" + ("*" * 50) + "`r`n" } else { "" }
    $finalMessage = "$message$separator"
    $finalMessage | Out-File -FilePath $logFilePath -Append
    Write-Host $finalMessage
}

# Full path to tlmtool.exe
$tlmToolPath = "C:\Program Files\VMware\Endpoint Telemetry Service\Tools\tlmtool.exe"

# Check if tlmtool.exe exists
if (-not (Test-Path $tlmToolPath)) {
    LogAndWriteMessage "The file $tlmToolPath does not exist."
    return
}

# Log the user running the script
$currentUsername = whoami
LogAndWriteMessage "Script is being run by user: $currentUsername"

# Run tlmtool.exe with the specified parameters and log the output
& $tlmToolPath -setDEEMDisabled $deemDisabled | Out-File -FilePath $logFilePath -Append

# Determine the expected status and startup type based on $deemDisabled
$expectedStatus = if ($deemDisabled -eq $true) { 'Stopped' } else { 'Running' }
$startupType = if ($deemDisabled -eq $true) { 'Disabled' } else { 'Automatic' }

# Initialize counter for service status check loop
$retryCount = 0
$maxRetries = 6  # Up to 60 seconds wait (6 retries * 10 seconds each)

# Loop to update the service and check the status
do {
    # Update the service status and startup type
    if ($deemDisabled -eq $true) {
        Stop-Service -Name "VMWOSQEXT" -ErrorAction SilentlyContinue
        Set-Service -Name "VMWOSQEXT" -StartupType Disabled
    } elseif ($deemDisabled -eq $false) {
        Start-Service -Name "VMWOSQEXT" -ErrorAction SilentlyContinue
        Set-Service -Name "VMWOSQEXT" -StartupType Automatic
    }

    Start-Sleep -Seconds 10
    $currentStatus = (Get-Service -Name "VMWOSQEXT").Status
    LogAndWriteMessage "Checking VMWOSQEXT service status: $currentStatus. Expected: $expectedStatus. Attempt: $($retryCount + 1)"
    $retryCount++
} while ($currentStatus -ne $expectedStatus -and $retryCount -lt $maxRetries)

# Verify final status of the service and the registry key value
$deemRegKeyPath = "HKLM:\SOFTWARE\VMware, Inc.\VMware Endpoint Telemetry\DEEM"
$deemRegValName = "Disabled"
$deemRegVal = (Get-ItemProperty -Path $deemRegKeyPath -Name $deemRegValName -ErrorAction SilentlyContinue).$deemRegValName

# Convert registry value to a boolean for comparison
$registryValueAsBool = [System.Boolean]::Parse($deemRegVal)

if ($currentStatus -eq $expectedStatus) {
    if (($registryValueAsBool -and $deemDisabled -eq $true) -or (-not $registryValueAsBool -and $deemDisabled -eq $false)) {
        $deemState = if ($deemDisabled -eq $true) { "Disabled" } else { "Enabled" }
        LogAndWriteMessage "Service VMWOSQEXT is in the expected state: $expectedStatus and DEEM is $deemState." $true
    } else {
        LogAndWriteMessage "Warning: Service VMWOSQEXT is in the expected state, but DEEM registry key value does not match the expected configuration." $true
    }
} else {
    LogAndWriteMessage "Warning: Service VMWOSQEXT did not reach the expected state ($expectedStatus) after $($retryCount * 10) seconds." $true
}

用于获取状态的传感器

使用此传感器可返回设备上的体验管理状态。

# Define the service and registry path
$serviceName = "VMWOSQEXT"
# Get the service status
$service = Get-Service -Name $serviceName -ErrorAction SilentlyContinue
#DEEM registry path
$registryPath = "HKLM:\SOFTWARE\VMware, Inc.\VMware Endpoint Telemetry\DEEM"
# Get the DEEM status value
$registryValue = Get-ItemProperty -Path $registryPath -Name Disabled -ErrorAction SilentlyContinue

# Check if the service and registry key exist
if ($service -eq $null) {
    Write-Host "Service $serviceName not found."
    #exit
}
if (-not (Test-Path $registryPath)) {
    Write-Host "Registry path $registryPath not found."
    #exit
}

# Check the DEEM status conditions and return the appropriate message
if ($service.Status -eq 'Running' -and $service.StartType -eq 'Automatic' -and $registryValue.Disabled -eq $false) {
    "DEEM is enabled"
} elseif ($service.Status -eq 'Stopped' -and $service.StartType -eq 'Disabled' -and $registryValue.Disabled -eq $true) {
    "DEEM is disabled"
} else {
    "DEEM status is in an unknown state."
}

要获取版本的传感器

使用此传感器返回设备上的体验管理版本。

# Define the registry path
$registryPath = "HKLM:\SOFTWARE\VMware, Inc.\VMware Endpoint Telemetry\Service\Version"

# Check if the registry key exists
if ($registryPath) {
    # Retrieve the value data if the key exists
    $versionData = Get-ItemPropertyValue -Path $registryPath -Name "VMware DEEM for Intelligent Hub" -ErrorAction SilentlyContinue
    
    if ($versionData) {
        # Output the value data
        Return $versionData
    } else {
        # Output if the specific value does not exist under the key
        Return "Value 'VMware DEEM for Intelligent Hub' does not exist in the key."
    }
} else {
    # Output if the registry key does not exist
    Return "DEEM version key does not exist"
}
check-circle-line exclamation-circle-line close-line
Scroll to top icon