虚拟桌面优化工具 (VDOT) 是一组主要基于文本的工具,可将设置应用于 Windows 操作系统,旨在提高性能。性能提升体现在总体启动时间、首次登录时间、后续登录时间以及用户会话期间的可用性。
VDOT 工具源于对本地虚拟桌面基础设施 (VDI) 多年的性能调整。其中一些 VDI 实现未连接 Internet,或仅连接有限的 Internet,导致 Windows 的某些特性和/或功能无法正常工作。那些可以以受支持的方式禁用或删除的项目而不是运行非功能性组件。结果是启动、登录速度更快,用户会话过程更流畅。
后来,当 Azure 虚拟桌面 (AVD) 出现时,VDOT 工具经过精心审查,并以不会降低用户界面、减少功能或以任何方式损害 AVD 会话主机的方式支持 AVD。从 Microsoft Windows 和 Azure 虚拟桌面产品组接收并实施了意见。
由于 VDOT 工具现已存在,因此它与多种系统兼容。它适用于 VDI、AVD、独立 Windows、Windows Server(有一些注意事项),一些优化甚至适用于 Windows 365 产品。
此工具中的优化设置是减少计算活动的潜在设置,从而增加每台主机的用户密度。在每个各自的环境中测试优化设置并根据需要调整设置非常重要。
确定要禁用、删除或设置为策略的内容的 VDOT 配置文件位于相应操作系统版本文件夹(例如“2009”)中基于文本的 .JSON 文件中。此工具用于确定是否应用设置的 JSON 参数是'VDIState' 。如果相应 .JSON 文件中的“VDIState”参数设置为“已禁用” ,则将应用优化设置。如果“VDIState”设置为其他值,则不会应用该设置。
笔记
该脚本需要几分钟才能完成。总运行时间将在最后的状态输出消息中显示。当脚本完全运行完毕后,会出现重新启动的提示。等待此提示以确认脚本已成功完成。需要重新启动,因为当前会话中无法停止多个项目。
PowerShell 中的“-verbose”参数指示脚本在脚本运行时提供描述性输出。
到目前为止,您可以运行以下命令:
.Windows_VDOT.ps1 -Verbose -AcceptEula
并且将运行一组核心优化。现在,如果您运行上述命令,您会收到一条返回消息:
未来的等效功能是:
.Windows_VDOT.ps1 -Optimizations All -Verbose -AcceptEula
。
这一变化是在添加更多类别的优化时发生的,其中一些优化可能并不适合所有人,因此新的优化被添加到名为AdvancedOptimizations的新参数集中。新的参数集包含Edge Chromium 优化、删除 Internet Explorer 11 有效负载以及删除内置 OneDrive 应用程序的功能。通过 AdvancedOptimizations 参数集,您可以运行刚才提到的一项或全部优化。
Windows 11 在某些方面向各种配置管理工具报告与 Windows 10 相同。目前(截至 22 年 7 月 29 日)“ReleaseID”值为“2009”。在“ReleaseID”编号更改之前,所有新的优化都将包含在“2009”文件夹下的“Configuration Files”文件夹中。因此,2009 文件夹配置文件适用于 Windows 10 以及 Windows 11。
截至 2024 年 6 月 14 日,VDOT 的当前版本已在 Windows 11 23H2 和 Windows 11 当前 Insider 版本上进行了测试。基于环、里程碑,Windows 中包含的“便利”应用程序略有不同因此,VDOT 工具中可能包含适用于 Windows 的一个或另一个特定环或 SKU 的设置。在这种情况下,如果尝试删除不存在的应用程序,则会显示错误并且脚本将继续。活动记录在 Windows 事件日志中以供以后参考。
截至 2022 年 7 月 29 日,Windows 10 中 Edge 的当前版本是 Microsoft Edge(基于 Chromium)。有一组特定于新 Edge 的策略模板文件。 VDOT 使用的所有策略设置均记录在Windows 11 2023 更新 (23H2) 的组策略设置参考电子表格中
VDOT 工具现在具有以下针对 Microsoft Edge 的优化选项:
无论 Windows 版本如何,AppxPackages.json 清单现在都将“ VDIState ”设置为“ Unchanged ”。原因是微软没有针对所有环境的“推荐”应用程序列表。在每种情况下,如果要删除通用 Windows 平台 (UWP) 应用程序,请将“VDIState”值从“Unchanged ”更改为“Disabled” 。
笔记
VDOT 工具不仅会删除“AllUsers”的 UWP 应用程序,还会删除应用程序负载。一旦删除 UWP 应用有效负载,就无法将其重新配置到该系统。重新配置已删除的应用程序负载的唯一方法是重置设备、重新安装或重新映像。
如果连接到互联网,用户仍然可以通过应用商店应用程序重新安装 VDOT 删除的应用程序。如果未连接互联网,则无法重新安装应用程序。这就是为什么 VDOT 不删除 Store 应用程序,我们也不建议删除 Store 应用程序。这是一篇关于商店应用程序的文章。
| ✏注意|有一项服务不应禁用,除非是在“气隙”环境或阻止访问 Microsoft 内容交付网络 (CDN) 的其他环境中。该服务称为“Microsoft Store 安装服务”。如果禁用此服务,Windows 中的应用商店组件将无法更新 UWP 应用和依赖项,这可能会导致漏洞。如果组织主动更新 UWP 应用及其依赖项,则可以例外。手动更新UWP需要获取各组件应用安装包,以及应用依赖组件包。这些可以通过 Endpoint Manager 或 Intune 等组件进行捆绑和提供。
VDOT 工具有多个参数传递到主 PowerShell 文件“Windows_VDOT.ps1”,以提供安装粒度。用于精确控制应用哪些优化的两个参数是:
-Optimizations
-AdvancedOptimizations
结果是您可以运行上面列表中包含的任意多个、任意几个、甚至一个子参数。以下是针对特定优化类别运行 VDOT 工具的两个示例。
.Windows_VDOT.ps1 -Optimizations AppxPackages -AcceptEula -Verbose
.Windows_VDOT.ps1 -AdvancedOptimizations Edge, AppxPackages -AcceptEula -Verbose
.Windows_VDOT.ps1 -Optimizations All -AdvancedOptimizations All -AcceptEULA -Verbose
我们添加了删除内置 OneDrive 应用程序的功能。例如,删除 OneDrive 应用程序适用于气隙云。有一个关联的 OneDrive 应用同步,可以在 AppxPackages 优化类别中删除。 OneDrive 应用程序可以重新添加。用于删除 OneDrive 应用程序的子参数位于参数“-AdvancedOptimizations”中。删除 OneDrive 应用程序不是默认设置,只能通过选择以下两个选项之一来启动:
.Windows_VDOT.ps1 - 高级优化RemoveOneDrive
.Windows_VDOT.ps1 - 全部高级优化
由于 Internet Explorer 11 已正式停用,我们添加了从系统中删除 IE11 负载的选项。子参数是RemoveLegacyIE
,包含在-AdvancedOptimizations
参数中。由于删除 IE11 有效负载不是默认设置,因此您可以通过以下两种方式之一指定其删除:
.Windows_VDOT.ps1 - 高级优化RemoveLegacyIE
.Windows_VDOT.ps1 - 全部高级优化
VDOT 在 Server 20xx 上运行良好,但如果指定了每个参数,则会生成大量非错误错误消息。 Server 2025 之前没有 UWP 应用。要在 Windows Server 2019 和/或 Windows Server 2022 上运行 VDOT,请使用以下参数:
.Windows_VDOT.ps1 -Windows 版本 2009
PowerShell:运行可执行文件
删除项目
LGPO
设定服务
删除项目
2.2.1.7.2 GlobalFolderOptionsVista 元素
Windows 10 发布信息
Windows 11 发布信息
笔记
我们已完全弃用 LGPO.exe 的使用。
注意:此脚本只需几分钟即可完成。总运行时间将在最后的状态输出消息中显示。
当脚本完全运行完毕后,会出现重新启动的提示。等待此提示以确认脚本已成功完成。
此外,PowerShell 中的“-verbose”参数指示脚本在脚本运行时提供描述性输出。
在将接收优化的设备上:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
这允许 PowerShell 脚本执行,但仅限于当前运行的应用程序处于打开状态。
.Windows_VDOT.ps1 -Optimizations All -Verbose
这将运行带有详细输出的所有标准优化,但必须手动接受 EULA。
.Windows_VDOT.ps1 -Optimizations All -Verbose -AcceptEula
这将运行带有详细输出的所有标准优化,并自动接受 Eula(用于脚本运行)
.Windows_VDOT.ps1 -Optimizations All -AdvancedOptimizations Edge -Verbose -AcceptEULA
这将运行所有标准优化、Edge 浏览器高级优化、详细输出并自动接受 Eula。
.Windows_VDOT.ps1 -Optimizations AppxPackages -AcceptEULA
这将仅运行 AppxPackages 并自动接受 EULA
.Windows_VDOT.ps1 -Optimizations All -AdvancedOptimizations All -Verbose -AcceptEULA -Restart
这将运行每个 VDOT 优化、详细输出、自动接受 Eula,并在 VDOT 结束时重新启动设备。
笔记
VDOT 工具在运行时确定操作系统版本。您可以使用“-WindowsVersion”参数指定一组不同的配置文件。
完成后,您应该会看到重新启动的提示。您不必立即重新启动,但建议这样做。
SYSPREP(Windows 系统准备工具)(2022 年 8 月 27 日)
您应该在 Sysprep 之前还是之后运行 VDOT?答案是要么,也许两者兼而有之。 “两者”答案是因为您可以随时重新运行 VDOT,并且不会发生任何更改,除非设置已恢复、应用程序已重新安装等。我们观察到一个案例,即在 SYSPREP 之前运行 VDOT 时,OneDrive 会被删除。部署该映像后,“开始”菜单上会出现一个 OneDrive 链接。如果您可以在 SYSPREP 之后运行 VDOT,则不会发生这种情况。
Windows 无法检查证书信息 (01/17/2020)
重要提示:禁用以下设置后,Windows 无法检查证书信息 (CRL)
本地计算机策略计算机配置管理模板系统Internet通信管理Internet通信设置
以下设置已从 VDOT 中删除:
关闭自动根证书更新
禁用“CDPSvc”可能会导致 SystemSettings.exe 崩溃 (01/27/2020)
最近发现了一个关于“CDPSvc”的新问题。如果该服务被禁用,并且新用户登录到计算机然后打开“系统设置”以查看显示设置,“SystemSettings.exe”将崩溃并在事件日志中记录错误,代码为“致命应用程序退出”。
“Win10_1909_ServicesDisable.txt”中“CDPSvc”的设置现在保持不变。
O365 无法联系许可服务器 (04/20/2020)
以前,VDOT 脚本在此位置的本地策略设置被设置为禁用:
本地计算机策略计算机配置管理模板系统Internet通信管理Internet通信设置
关闭 Windows 网络连接状态指示器活动测试
禁用主动测试后,Office 365 无法联系其许可服务,因此不会运行任何 Office 应用程序。在包含的 LGPO 配置中,此设置已更改回“未配置” 。
某些应用程序在云环境中没有可见边框 (04/22/2020)
在某些虚拟环境中,例如 Azure Windows 虚拟桌面,某些应用程序窗口将没有边框。 Windows 文件资源管理器就是一个例子。您可以通过打开写字板和文件资源管理器来复制这一点,然后四处移动,并注意您可能看不到一个应用程序开始而另一个应用程序结束的边框。
最近添加的优化之一更改了视觉效果设置(在系统属性中找到)以减少动画和效果,同时仍然保持良好的用户体验。
- “平滑屏幕字体”
- “在鼠标指针下显示阴影”
- “在窗户下显示阴影”
这些用户设置将在窗口周围启用阴影效果(如文件资源管理器),以便应用程序的边框现在可见。
这些设置将写入默认用户配置文件注册表配置单元,因此仅适用于在运行这些优化之后创建配置文件的用户,并且在此设备上。
应用程序运行,即使应用程序尚未运行 (04/29/2020)
即使用户尚未启动应用程序,多个内置 UWP 应用程序(例如 Skype、电话和照片)也会启动进程并在后台运行。在单台计算机上,这几乎是零影响,但在多会话 Windows 上,这可能是一个稍大的影响问题。 “设置”应用程序中的“后台应用程序”下有一个设置,允许您根据每个用户控制此行为。但是,除了完全卸载该应用程序之外,目前无法将这种行为更改为全局设置。
如果您想在映像中保留一个或多个应用程序,并且仍然控制后台行为,您可以编辑默认用户注册表配置单元并设置以下设置:
“HKCUSoftwareMicrosoftWindowsCurrentVersionBackgroundAccessApplicationsMicrosoft.Windows.Photos_8wekyb3d8bbwe /v 已禁用 /t REG_DWORD /d 1 /f “HKCUSoftwareMicrosoftWindowsCurrentVersionBackgroundAccessApplicationsMicrosoft.Windows.Photos_8wekyb3d8bbwe /v DisabledByUser /t REG_DWORD /d 1 /f “HKCUSoftwareMicrosoftWindowsCurrentVersionBackgroundAccessApplicationsMicrosoft.SkypeApp_kzf8qxf38zg5c /v 禁用 /t REG_DWORD /d 1 /f “HKCUSoftwareMicrosoftWindowsCurrentVersionBackgroundAccessApplicationsMicrosoft.SkypeApp_kzf8qxf38zg5c /v DisabledByUser /t REG_DWORD / d 1 /f “HKCUSoftwareMicrosoftWindowsCurrentVersionBackgroundAccessApplicationsMicrosoft.YourPhone_8wekyb3d8bbwe /v 禁用 /t REG_DWORD /d 1 /f “HKCUSoftwareMicrosoftWindowsCurrentVersionBackgroundAccessApplicationsMicrosoft.YourPhone_8wekyb3d8bbwe /v DisabledByUser /t REG_DWORD / d 1 /f
您还可以使用组策略首选项设置这些设置,并且应在注销并重新登录或 Gpupdate 刷新后生效。
Windows 更新无法运行 (05/11/2020)
使用本地策略配置中包含的设置(在处理这些脚本期间将恢复到目标),如果您尝试手动运行 Windows Update,Windows 可能会报告错误。
这些设置位于这些脚本中的原因是,如果您将这些设置部署到连接到 Internet 的目标,Windows 更新可能会在会话主机被主动利用时尝试安装更新。虚拟桌面环境通常控制 Windows 更新仅在维护时段内允许,或者根本不运行,而是部署新主机。
此问题的最新解决方案是将“UsoSvc”设置回默认起始值“manual” 。或者,编辑“Services.json”并将“UsoSvc”的“VDIState”更改为“unchanged” 。此外,本地策略设置已更新,Windows 更新设置与默认设置保持不变。
从这些脚本的 2004 版本开始,已弃用磁盘清理向导 (Cleamgr.exe)。 DCW 已接近生命周期结束,但有时也会在脚本运行期间“挂起”。相反,一些基本的磁盘清理已合并到“Windows_VDOT.ps1”脚本中。已删除日志、跟踪和事件日志文件。如果您希望维护日志文件,您可以编辑 .PS1 脚本并删除这些条目。
有几份报告称,应用优化设置以及可能的其他操作后,“开始”菜单出现问题。最近,我们通过执行 1909 年至 2004 年的功能更新,能够重现“开始”菜单的问题,其中 1909 会话主机已就位进行了优化设置。该问题可能是由于在本地或在 FSLogix 等配置文件解决方案中“优化”用户配置文件而出现的。然后,功能更新过程会在此过程中对 Appx 包进行一些操作,从而导致用户的“开始”菜单中出现孤立的项目。
- 创建一个脚本来修复“开始”菜单,方法是将以下内容复制到文本文件,将其另存为 .CMD 或 .BAT 文件,然后以交互方式或登录脚本(通常不需要提升)将其提供给受影响的用户。
start /wait taskkill /IM StartMenuExperienceHost.exe /F rd /S /Q " %UserProfile% AppdataLocalPackagesMicrosoft.Windows.StartMenuExperienceHost_cw5n1h2txyewyAC " rd /S /Q " %UserProfile% AppdataLocalPackagesMicrosoft.Windows.StartMenuExperienceHost_cw5n1h2txyewyAppData " rd /S /Q " %UserProfile% AppdataLocalPackagesMicrosoft.Windows.StartMenuExperienceHost_cw5n1h2txyewyLocalCache " rd /S /Q " %UserProfile% AppdataLocalPackagesMicrosoft.Windows.StartMenuExperienceHost_cw5n1h2txyewyLocalState " rd /S /Q " %UserProfile% AppdataLocalPackagesMicrosoft.Windows.StartMenuExperienceHost_cw5n1h2txyewyRoamingState " rd /S /Q " %UserProfile% AppdataLocalPackagesMicrosoft.Windows.StartMenuExperienceHost_cw5n1h2txyewySettings " rd /S /Q " %UserProfile% AppdataLocalPackagesMicrosoft.Windows.StartMenuExperienceHost_cw5n1h2txyewySystemAppData " rd /S /Q " %UserProfile% AppdataLocalPackagesMicrosoft.Windows.StartMenuExperienceHost_cw5n1h2txyewyTempState " Start C:WindowsSystemAppsMicrosoft.Windows.StartMenuExperienceHost_cw5n1h2txyewyStartMenuExperienceHost.exe
- 使用适当的“-WindowsVersion”参数重新运行 VDOT(例如 2004)。
[注意]这不仅会在某些情况下修复“开始”菜单,还有一些特定于之前可能未应用的特定版本的设置。
OneDrive 本地策略设置阻止自动 OneDrive 登录 (01/27/2021)
此工具中设置了 OneDrive 的默认设置,其中包含以下详细信息:
Computer ConfigurationAdministrative TemplatesWindows ComponentsOneDrive
"Prevent OneDrive from generating network traffic until the user signs in to OneDrive"
默认状态:未配置
优化工具状态:启用最近还报告了与此设置相关的另一个问题。某些 Office 应用程序会“挂起”几秒钟或更长时间,直到 OneDrive 同步完成。这可能与这个设置有关。因此,将此设置恢复为默认状态
"not configured"
。这种特定的政策设置实际上是一种偏好。您可以通过注意设置图标上的“向下箭头”覆盖来确认这一点。恢复设置的一个好方法是使用组策略将设置更改回默认值。如果您必须为每个用户执行此操作,则该过程可能会更加复杂。
从“任务窗口”注销时挂起(2021 年 4 月 16 日)
我们收到报告称,当主机配置了多种语言时,任务窗口在注销时挂起。初步测试表明,这可能是脚本禁用一个或多个用户模式服务的结果。有问题的服务是:
-CDPSvc
-CDP用户服务这两个“每用户”服务的“VDIState”设置已从“禁用”更改为“未更改”。
优化后 Snip & Sketch 无法工作(2021 年 5 月 25 日)
运行 VDOT 优化后,可以启动“Snip & Sketch”UWP 应用程序,但单击执行新的捕获不起作用(没有任何反应)。此外,单击“Snip & Sketch”时,应用程序事件日志中会记录一条错误,类似于以下内容:
Faulting application name: ScreenClippingHost.exe, version: 2001.22012.0.2020, time stamp: 0x5ff501a5
Faulting module name: ScreenClipping.dll, version: 2001.22012.0.2020, time stamp: 0x5ff4fde8
Exception code: 0x80000003
Fault offset: 0x000000000001b92d
这已在最近的版本中得到解决。
重新安装 Appx 软件包的注意事项
如果您发现已删除 UWP 包并且现在需要将其恢复,最简单的方法是打开 Microsoft Store 应用程序并搜索该应用程序,或者单击或复制该应用程序的 URL 并将其粘贴到 Web 浏览器中包含在“AppxPackages.json”配置文件中。
要首先防止特定的 UWP 应用程序被删除,请编辑“AppxPackages.json”配置文件,搜索该应用程序,然后将该应用程序条目的“VDIState”从“已禁用”更改为其他任何内容,例如“不变’。
此示例代码仅供说明之用,不适用于生产环境。
本示例代码和任何相关信息均“按原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性和/或特定用途适用性的暗示保证。我们授予您非排他性、免版税的权利,以使用和修改示例代码以及复制和分发示例代码的目标代码形式,前提是您同意:(i) 不使用我们的名称、徽标或商标营销您嵌入示例代码的软件产品; (ii) 在嵌入示例代码的软件产品上包含有效的版权声明; (iii) 就因使用或分发示例代码而产生或导致的任何索赔或诉讼(包括律师费)对我们和我们的供应商进行赔偿、使其免受损害并为我们和我们的供应商辩护。
Microsoft 提供的编程示例仅供说明之用,不提供任何明示或暗示的保证,包括但不限于适销性和/或特定用途适用性的暗示保证。
此示例假定您熟悉所演示的编程语言以及用于创建和调试过程的工具。 Microsoft 支持专业人员可以帮助解释特定过程的功能,但他们不会修改这些示例以提供附加功能或构建过程来满足您的特定需求。如果您的编程经验有限,您可能需要联系 Microsoft 认证合作伙伴或拨打 Microsoft 收费咨询热线 (800) 936-5200。