這一系列的文字(聊聊vdi虛拟桌面的sid問題-前傳「上」、聊聊vdi虛拟桌面的sid問題-前傳「中」)其實都是為了這一篇:因為之前項目中出現了不少不能完成自定義過程導緻桌面池無法完整制備的問題,當我嘗試解決這些問題之後,就非常想記錄下來。排錯的基本思路是分段和隔離,接下來我們就分别看看這些環節。
sysprep自身會在不同階段寫入不同日志。
項目
日志路徑
generalize
%windir%\system32\sysprep\panther
specialize
%windir%\panther
(oobe的無人參與 windows 安裝程式操作)
%windir%\panther\unattendgc
setupact.log 檔案是主日志檔案。setuperr.log會記錄錯誤摘要,但詳細資訊會記錄在主日志中。
隻要我們看到大概在哪個階段出現了問題,就可以去找對應的日志看看原因。如果沒有日志呢?那說明都沒執行到這一步……
使用vc的自定義規範時,除了sysprep,還可以檢查guestcsututil的日志。看上去這個日志的路徑是 c:\windows\temp\customize-guest.log 。看一個例子吧…
如果是vc自定義的過程,建議先看看這個日志,再去看sysprep的日志尋找問題根源。
我們在之前說過,如果通用化之前安裝或更新過microsoft store應用,将會導緻sysprep失敗。原因在于:<code>sysprep /generalize</code> 要求為所有使用者預配所有應用;但是,從 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 旁加載應用和自定義“開始”螢幕。
具體到我遇到的問題,日志裡能夠看到如下錯誤:
知道了microsoft store應用在sysprep的限制之後,這個問題就很容易了解和解決了——想辦法把這個appx包删掉就行了。更何況還有官方的步驟可以參考:miracastview 在版本 1709 windows 10 sysprep 錯誤 。如果想一探究竟,了解為什麼會有這樣的問題,可以參考:sysprep fails with microsoft store apps 。
當syprep運作時,會對很多系統服務的狀态進行檢查确認。如果自定義過程剛好卡在windows update未完成的時候,就會導緻失敗。
知道了這一原因,解決起來就簡單了。打開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日志的位置,猜測是專門化過程中<code>pass=“oobesystem”</code>沒有完成。就是可惜來不及再搜集日志進一步分析了。隻能找到個相近的應答檔案參考下。
猜測是使用的vc的自定義規範勾選了自動登入但配置有問題。
另一個錯誤就比較明顯了。系統沒有完成自定義過程,重新開機之後在系統日志中看到了event id 4097,錯誤代碼 1909的錯誤。這個是由于自定義過程使用的加域賬号已禁用或密碼錯誤導緻失敗造成的。