將特定機器 SID 分配給新的 Windows 系統
Windows 安裝程序在安裝時將唯一的電腦 SID 分配給 Windows 系統。機器 SID 不會通過網路公開,因此它通常無關緊要,但本地使用者的安全標識符基於機器 SID,這可能會在共享使用者配置文件和使用者創建的文件時產生問題NTFS 卷。即使文件和文件夾的 ACL 僅具有預定義的非機器特定 SID(例如內置管理員組),它們的所有者也是創建本地使用者,由機器 SID 和使用者 RID 標識。例如,如果您想從全新的 Windows 安裝媒體腳本建構您的開發系統,就好像它是一個 Linux 容器一樣,就會出現這種情況。在這種情況下,您希望您建構的每個 Windows 系統都共享相同的機器 SID。
但是,SysInternals 的NewSID 實用程序早在 2009 年就已棄用並退役,並且在現代Windows 版本上無法 正常工作。**有沒有辦法使用正常的 Windows 部署工具實現相同的結果?**Mark Russinovich 在他反對 NewSID 的文章中暗示可能是這種情況,但如果是這種情況,則沒有記錄此功能。當然,這不足為奇:微軟的未記錄功能歷史悠久,可以追溯到 MS-DOS 時代。
未記錄的
SetupCl.exe
實用程序是 Windows 安裝工具的一部分,它清理系統映像,作為新 Windows 系統啟動時執行的通用過程的一個步驟,通常執行諸如生成新磁碟標識符、修復重解析點和替換等操作在所有系統資料庫項和可能的配置文件中,X:\
使用適合您的目標系統(通常)的任何內容引用預設系統根目錄(通常)。C:\
此實用程序在首次啟動時由 Windows 設置過程呼叫,並由SYSTEM\Setup\SetupCl\PendingRequest
系統資料庫項控制。此鍵中的 DWORD 值OperationFlags
是一個位欄位,指定實用程序將執行哪些轉換。除了上面提到的轉換之外,
SetupCl
還可以用新的 SID 替換現有的機器 SID。通過在密鑰中設置位 2 (0x4
)來請求此轉換。兩個可選的二進制值在同一個鍵中提供源和目標機器 SID。如果省略了源 SID,則從正在執行的系統中獲取它。如果省略了目標 SID,則生成一個新的。這些值包含二進制形式的機器 SID,長度為 24 字節(8 字節固定長度標頭和 4 個 32 位子權限)。要分配特定的機器 SID,請設置位 2並創建包含 SID 的值。OperationFlags``SYSTEM\Setup\SetupCl\PendingRequest``SidAccountDomainOld``SidAccountDomainNew``SetupCl``SetupCl``SetupCl``OperationFlags``SidAccountDomainNew
這個過程有幾個並發症:
- 它適用於由 準備的映像,但在 DISM 或cmdlet
sysprep /generalize
新部署的 Windows 映像上失敗。Expand-WindowsImage
新映像也處於通用狀態,SetupCl
在配置單元中設置了一個待處理的請求SYSTEM
以在首次啟動時執行,但該請求沒有設置第 2 位。在離線鏡像中設置會導致鏡像部署失敗。要解決此限制,必須執行一輪額外的泛化/專業化。一種方法是使用鍊式無人參與文件:第一個無人參與文件指定Microsoft-Windows-Setup-Shell/FirstLogonCommands
要執行的單個命令sysprep /generalize /oobe /unattend:<second unattend file> /shutdown
。SidAccountDomainNew
在之前或之後線上添加值sysprep /generalize
不起作用,很可能是因為sysprep
安排了一些最終步驟在系統關閉時執行。完成後掛載離線 Windows 映像sysprep /generalize
並且系統關閉,載入SYSTEM
配置單元,然後在此時添加它。sysprep /generalize
如果安裝軟體等待重新啟動,則會失敗。在通用化之前重新啟動系統,或者在將軟體安裝到映像之前執行額外的通用化/專用化步驟。