jjzjj

聊聊VDI虚拟桌面的SID问题-前传(下)

HaoHu 2023-03-28 原文
​ 这一系列的文字(聊聊VDI虚拟桌面的SID问题-前传「上」聊聊VDI虚拟桌面的SID问题-前传「中」)其实都是为了这一篇:因为之前项目中出现了不少不能完成自定义过程导致桌面池无法完整制备的问题,当我尝试解决这些问题之后,就非常想记录下来。排错的基本思路是分段和隔离,接下来我们就分别看看这些环节。

Sysprep的诊断

​ Sysprep自身会在不同阶段写入不同日志。

项目 日志路径
Generalize %WINDIR%\System32\Sysprep\Panther
Specialize %WINDIR%\Panther
(OOBE的无人参与 Windows 安装程序操作) %WINDIR%\Panther\Unattendgc
​ setupact.log 文件是主日志文件。setuperr.log会记录错误摘要,但详细信息会记录在主日志中。

​ 只要我们看到大概在哪个阶段出现了问题,就可以去找对应的日志看看原因。如果没有日志呢?那说明都没执行到这一步……

VC自定义的诊断

​ 使用VC的自定义规范时,除了Sysprep,还可以检查GuestCsutUtil的日志。看上去这个日志的路径是 C:\WINDOWS\TEMP\customize-guest.log 。看一个例子吧…

[2016-05-24T16:10:37 INFO] GuestCustUtil invoked. [2016-05-24T16:10:37 INFO] Params: customize -sealparam "/quiet /generalize /oobe /reboot" -nics 4000 -schedulenativeunobfusc [2016-05-24T16:10:37 INFO] Checking for Windows Sysprep Respecialize operation. [2016-05-24T16:10:37 DEBUG] Sysprep process is currently running. [2016-05-24T16:10:37 INFO] Windows Sysprep Respecialize operation was detected. [2016-05-24T16:10:37 INFO] Copying files from C:\Windows\TEMP\vmwA4EB.tmp to C:\Windows\TEMP\vmwB575.tmp. [2016-05-24T16:10:40 INFO] Rescheduling Guest OS Customization. [2016-05-24T16:10:40 DEBUG] Executing command C:\Windows\system32\schtasks.exe /create /sc ONSTART /rl HIGHEST /np /z /v1 /ru SYSTEM /tr "C:\Windows\TEMP\vmwB575.tmp\guestcustutil.exe customize -sealparam \"/quiet /generalize /oobe /reboot\" -nics 4000 -schedulenativeunobfusc" /tn "VMware Guest OS Customization Task" [2016-05-24T16:10:41 INFO] Waiting for Sysprep to exit. [2016-05-24T16:10:42 INFO] Sysprep is no longer running. [2016-05-24T16:12:42 INFO] Rebooting... [2016-05-24T16:12:42 DEBUG] Successfully retreived process access token. [2016-05-24T16:12:42 DEBUG] Got LUID for SHUTDOWN privilege. [2016-05-24T16:12:42 DEBUG] Successfully added shutdown privilege. [2016-05-24T16:12:42 INFO] GuestCustUtil exiting. ​ 如果是VC自定义的过程,建议先看看这个日志,再去看Sysprep的日志寻找问题根源。

几个遇到的问题 - 因为Microsoft Store应用导致的失败

​ 我们在之前说过,如果通用化之前安装或更新过Microsoft Store应用,将会导致Sysprep失败。原因在于:Sysprep /generalize 要求为所有用户预配所有应用;但是,从 Microsoft Store 更新应用时,该应用将与登录的用户帐户相关联。 以下错误将出现在 Sysprep 日志文件中(位于 %WINDIR%\System32\Sysprep\Panther 中):

<package name> was installed for a user, but not provisioned for all users. This package will not function properly in the sysprep image.
​ 解决这类问题不要使用 Microsoft Store 来更新应用,而应将更新旁加载到业务线应用,为所有用户预配脱机许可的适用于企业的 Microsoft Store 应用,或者让最终用户在其目标电脑上使用 Microsoft Store 更新其应用。有关旁加载业务线 Microsoft Store 应用的详细信息,请参阅使用 DISM 旁加载应用自定义“开始”屏幕

​ 具体到我遇到的问题,日志里能够看到如下错误:

2021-09-23 12:49:58, Info SYSPRP Entering SysprepGeneralizeValidate (Appx) - validating whether all apps are also provisioned. 2021-09-23 12:49:58, Error SYSPRP Package Windows.MiracastView_6.3.0.0_neutral_neutral_cw5n1h2txyewy was installed for a user, but not provisioned for all users. This package will not function properly in the sysprep image. 2021-09-23 12:49:59, Error SYSPRP Failed to remove apps for the current user: 0x80073cf2. 2021-09-23 12:49:59, Error SYSPRP Exit code of RemoveAllApps thread was 0x3cf2. 2021-09-23 12:49:59, Error SYSPRP ActionPlatform::LaunchModule: Failure occurred while executing 'SysprepGeneralizeValidate' from C:\Windows\System32\AppxSysprep.dll; dwRet = 0x3cf2 2021-09-23 12:49:59, Error SYSPRP SysprepSession::Validate: Error in validating actions from C:\Windows\System32\Sysprep\ActionFiles\Generalize.xml; dwRet = 0x3cf2 2021-09-23 12:49:59, Error SYSPRP RunPlatformActions:Failed while validating Sysprep session actions; dwRet = 0x3cf2 2021-09-23 12:49:59, Error [0x0f0070] SYSPRP RunDlls:An error occurred while running registry sysprep DLLs, halting sysprep execution. dwRet = 0x3cf2 2021-09-23 12:49:59, Error [0x0f00d8] SYSPRP WinMain:Hit failure while pre-validate sysprep generalize internal providers; hr = 0x80073cf2 2021-09-23 12:49:59, Info [0x0f0052] SYSPRP Shutting down SysPrep log ​ 知道了Microsoft Store应用在Sysprep的限制之后,这个问题就很容易理解和解决了——想办法把这个APPX包删掉就行了。更何况还有官方的步骤可以参考:MiracastView 在版本 1709 Windows 10 sysprep 错误 。如果想一探究竟,了解为什么会有这样的问题,可以参考:Sysprep fails with Microsoft Store apps

几个遇到的问题 - 因为Windows更新导致的失败

​ 当Syprep运行时,会对很多系统服务的状态进行检查确认。如果自定义过程刚好卡在Windows Update未完成的时候,就会导致失败。

2021-08-31 09:49:37, Error SYSPRP Sysprep_Clean_Validate_Opk: Audit mode cannot be turned on if reserved storage is in use. An update or servicing operation may be using reserved storage.; hr = 0x800F0975 2021-08-31 09:49:37, Error SYSPRP ActionPlatform::LaunchModule: Failure occurred while executing 'Sysprep_Clean_Validate_Opk' from C:\Windows\System32\spopk.dll; dwRet = 0x975 2021-08-31 09:49:37, Error SYSPRP SysprepSession::Validate: Error in validating actions from C:\Windows\System32\Sysprep\ActionFiles\Cleanup.xml; dwRet = 0x975 2021-08-31 09:49:37, Error SYSPRP RunPlatformActions:Failed while validating Sysprep session actions; dwRet = 0x975 2021-08-31 09:49:37, Error [0x0f0070] SYSPRP RunDlls:An error occurred while running registry sysprep DLLs, halting sysprep execution. dwRet = 0x975 2021-08-31 09:49:37, Error [0x0f00d8] SYSPRP WinMain:Hit failure while pre-validate sysprep cleanup internal providers; hr = 0x80070975 2021-08-31 09:49:37, Info [0x0f0052] SYSPRP Shutting down SysPrep log ​ 知道了这一原因,解决起来就简单了。打开Windows的设置,点进更新和安全,直接来个暂停更新7天。重启之后再运行自定义试试。

几个遇到的问题 - 因为加域失败导致的失败

​ 别忘了Sysprep的过程。即使sysprep命令行成功完成,我们还需要借助应答文件来完成加域动作。因此你见到如下错误提示时,应该收集日志及检查加域等定制化步骤是否有问题。

"Windows could not parse or process unattend answer file [C:\Windows\Panther\unattend.xml] for pass [oobeSystem]. "
​ 通常这个错误会给一点有限的信息,例如我之前看到的一个错误是:“处理组件设置是检测到错误 [Microsoft-Windows-Shell-Setup]”。根据以上信息,回过头看看不同阶段Sysprep日志的位置,猜测是专门化过程中pass=“oobeSystem”没有完成。就是可惜来不及再搜集日志进一步分析了。只能找到个相近的应答文件参考下。

<settings pass="oobeSystem"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <AutoLogon> <Password> <Value>***********==</Value> <PlainText>false</PlainText> </Password> <Enabled>true</Enabled> <LogonCount>1</LogonCount> <Username>itstaff</Username> </AutoLogon> <OOBE> <HideEULAPage>true</HideEULAPage> <ProtectYourPC>1</ProtectYourPC> </OOBE> ​ 猜测是使用的VC的自定义规范勾选了自动登录但配置有问题。

​ 另一个错误就比较明显了。系统没有完成自定义过程,重启之后在系统日志中看到了Event ID 4097,错误代码 1909的错误。这个是由于自定义过程使用的加域账号已禁用或密码错误导致失败造成的。

有关聊聊VDI虚拟桌面的SID问题-前传(下)的更多相关文章

  1. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  2. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  3. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  4. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

  5. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

  6. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  7. ruby-on-rails - 简单的 Ruby on Rails 问题——如何将评论附加到用户和文章? - 2

    我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。

  8. 【高数】用拉格朗日中值定理解决极限问题 - 2

    首先回顾一下拉格朗日定理的内容:函数f(x)是在闭区间[a,b]上连续、开区间(a,b)上可导的函数,那么至少存在一个,使得:通过这个表达式我们可以知道,f(x)是函数的主体,a和b可以看作是主体函数f(x)中所取的两个值。那么可以有,  也就意味着我们可以用来替换 这种替换可以用在求某些多项式差的极限中。方法: 外层函数f(x)是一致的,并且h(x)和g(x)是等价无穷小。此时,利用拉格朗日定理,将原式替换为 ,再进行求解,往往会省去复合函数求极限的很多麻烦。使用要注意:1.要先找到主体函数f(x),即外层函数必须相同。2.f(x)找到后,复合部分是等价无穷小。3.要满足作差的形式。如果是加

  9. SPI接收数据异常问题总结 - 2

    SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手

  10. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

随机推荐