本篇博文将介绍在 Windows Embedded 设备上安装 System Center 2012 Configuration Manager 客户端的必备组件,并提供一个示例脚本,可以将其与 Configuration Manager 结合使用来自动禁用和启用 Windows Embedded 写入筛选器,还提供有关如何使用 System Center 2012 Configuration Manager 向启用写入筛选器的 Windows Embedded 设备部署软件或软件更新的分步指导。
对于 System Center Configuration Manager 2007,我们提供了以下有关如何管理 Windows Embedded 写入筛选器的文档:
- 在 Windows Embedded 设备上安装 Configuration Manager 2007 客户端的必备组件:http://technet.microsoft.com/zh-cn/library/ff576183.aspx
- 使用 Configuration Manager 2007 在 Windows Embedded 设备上配置写入筛选器的示例脚本:http://technet.microsoft.com/zh-cn/library/bb932156.aspx
- 如何使用 Configuration Manager 2007 管理 Windows Embedded 写入筛选器:http://technet.microsoft.com/zh-cn/library/bb932175.aspx
其中的大部分内容仍然适用于 System Center 2012 Configuration Manager。不过,我们发现有一些内容需要更新:
- 需要更新脚本才能在 Windows Embedded Standard 7 上使用
- 在使用基于文件的写入筛选器时,需要在 Windows 设备映像中添加一些其他注册表和文件例外。
- 在使用基于文件的写入筛选器时,需要在本地系统关机时运行一个脚本。此脚本将任务序列 ConfigMgr 重启生成的 SMSTSVolumeID 文件提交到基于文件的筛选器。如果在运行 Write Filter Disable 命令之后的重启之前未提交此文件,则 ConfigMgr 任务序列在计算机重启之后不会继续执行。
在 Windows Embedded 设备上安装 System Center 2012 Configuration Manager 客户端的必备组件
使用基于文件的写入筛选器时的必备组件
如果希望使用基于文件的写入筛选器 (FBWF) 保持 System Center 2012 Configuration Manager 客户端在设备重启之间的状态,请配置以下例外。
注册表例外
在创建映像时,使用 Embedded Designer 配置以下注册表例外:
- HKLM\Software\Microsoft\SMS
- HKLM\Software\Microsoft\CCM
如果在使用任务序列管理 Configuration Manager 客户端,请配置以下例外。
- HKLM\Software\Microsoft\Windows NT\CurrentVersion\WinLogon
- HKLM\System\CurrentControlSet\Services\smstsmgr
文件例外
在安装 System Center 2012 Configuration Manager 客户端之后,使用基于文件的写入筛选器配置以下文件例外:
- %WINDIR%\System32\CCM
- %WINDIR%\System32\Wbem
如果在使用任务序列服务于 Configuration Manager 客户端,请配置以下例外。
- %SystemDrive\_SMSTaskSequence
- %WINDIR%\BootStat.dat
- %WINDIR%\RegFData
有关构建映像和配置写入筛选器的详细信息,请参阅 Windows Embedded 文档。
使用 System Center 2012 Configuration Manager 在 Windows Embedded 设备上配置写入筛选器的示例脚本
从此处下载示例脚本:http://technet.microsoft.com/zh-cn/library/bb932156.aspx
如果希望在带有增强型写入筛选器 (EWF) 的 Windows Embedded Standard 7 (WES 7) 计算机上使用该脚本,请按如下所示编辑该脚本:
在脚本中找到以下行:
if (bIsEWFInstalled) AND (InStr(strLine, "Device Name")) Then
Change "Device Name" to "Volume Name" as shown in the following example:
if (bIsEWFInstalled) AND (InStr(strLine, "Volume Name ")) Then
注意:之所以需要进行此编辑,是因为 ewfmgr.exe 的命令输出在 WES 2009 中的位置与 WES 7 中不一样。以下代码显示了 Ewfmgr.exe 命令输出在 WES 2009 和 WES 7 中的位置。
Ewfmgr.exe 在 WES 2009 中的命令输出。
Ewfmgr.exe 在 WES 7 中的命令输出
如何使用 System Center 2012 Configuration Manager 管理 Windows Embedded 写入筛选器
要使用脚本,并使用 System Center 2012 Configuration Manager 在使用增强型写入筛选器 (EWF) 或基于文件的写入筛选器 (FBWF) 的 Windows Embedded 设备上执行软件分发和软件更新管理,必须执行以下步骤:
- 创建一个用于部署 VBScript 的软件分发包,其中包含以下程序:
- 程序 1:发出禁用写入筛选器的命令。
- 程序 2:发出启用写入筛选器的命令。
- 创建一个执行以下任务的自定义任务序列:
- 运行程序 1 禁用写入筛选器。
- 执行所需的软件分发和软件更新活动。
- 运行程序 2 启用写入筛选器。
- 将任务序列部署到组织中的设备。
使用以下过程创建一个软件分发包和包含示例脚本的程序,并创建和部署任务序列,在您组织的 Windows Embedded 设备上安装该脚本。
创建软件分发包
- 将您下载的脚本(在需要时更新)另存为名为 XPeWriteFilters.vbs的文本文件。
- 在 Configuration Manager 控制台中,单击 [Software Library](软件库)。
- 在 [Software Library](软件库)工作区中,展开 [Application Management](应用程序管理),然后单击 [Packages](软件包)。
- 在 [Home](主页)选项卡上的 [Create](创建)组中,单击 [Create Package](创建软件包),打开 [Create Package and Program Wizard](创建软件包和程序向导)。
- 在 [General](常规)页上,指定以下设置和可选设置,然后单击 [Next](下一步)。
- [Name](名称):指定用于引用软件包的名称
- [This package contains source files](此包包含源文件):选中此复选框,并指定脚本文件 XPeWriteFilters.vbs所在的位置。
- 在 [Program Type](程序类型)页上,选择 [Do note create a program](不创建程序),单击 [Next](下一步)
- 完成此向导。
使用下列过程之一为软件分发包创建一个程序。
创建一个在禁用模式下运行 VBScript 的程序
- 在 Configuration Manager 控制台中,单击 [Software Library](软件库)。
- 在 [Software Library](软件库)工作区中,展开 [Application Management](应用程序管理),然后单击 [Packages](软件包)。
- 在 [Packages](软件包)节点中,选择您使用创建软件分发包过程创建的软件包,然后单击 [Create Program](创建程序)。
- 在 [Program Type](程序类型)页中,选择 [Standard program](标准程序),然后单击 [Next](下一步)。
- 在 [Standard program](标准程序)页中,指定以下设置,然后单击 [Next](下一步)。
- [Name](名称):指定 [Disable write filter](禁用写入筛选器)。
- [Command line](命令行):指定 wscript.exe XPeWriteFilter.vbs DISABLE
- [Program can run](程序可以运行):指定 [Whether or not a user is logged on](无论用户是否登录)。
- 完成此向导。
- 选择您刚才创建的程序。
- 在 [Home](主页)选项卡上的 [Properties](属性)组中,单击 [Properties](属性)。
- 在 [Properties](属性)对话框中,指定以下属性,然后单击 [OK](确定)。
- 在 [General](常规)选项卡上的 [After running](在运行之后)中,指定 [Configuration Manager restarts computer](Configuration Manager 重启计算机)。
- 在 [Advanced](高级)选项卡上,选择 [Allow this program to be installed from the Install Package task sequence without being deployed](允许此程序从安装程序包任务序列安装而不进行部署)。
创建一个在启用模式下运行 VBScript 的程序
- 在 Configuration Manager 控制台中,单击 [Software Library](软件库)。
- 在 [Software Library](软件库)工作区中,展开 [Application Management](应用程序管理),然后单击 [Packages](软件包)。
- 在 [Packages](软件包)节点中,选择您使用创建软件分发包过程创建的软件包,然后单击 [Create Program](创建程序)。
- 在 [Program Type](程序类型)页中,选择 [Standard program](标准程序),然后单击 [Next](下一步)。
- 在 [Standard program](标准程序)页中,指定以下设置,然后单击 [Next](下一步)。
- [Name](名称):指定 [Enable write filter](启用写入筛选器)。
- [Command line](命令行):指定 wscript.exe XPeWriteFilter.vbs ENABLE。
- [Program can run](程序可以运行):指定 [Whether or not a user is logged on](无论用户是否登录)。
- 完成此向导。
- 选择您刚才创建的程序。
- 在 [Home](主页)选项卡上的 [Properties](属性)组中,单击 [Properties](属性)。
- 在 [Properties](属性)对话框中,指定以下属性,然后单击 [OK](确定)。
- 在 [General](常规)选项卡上的 [After running](在运行之后)中,指定 [Configuration Manager restarts computer](Configuration Manager 重启计算机)。
- 在 [Advanced](高级)选项卡上,选择 [Allow this program to be installed from the Install Package task sequence without being deployed](允许此程序从安装程序包任务序列安装而不进行部署)。
创建任务序列
- 在 Configuration Manager 控制台中,单击 [Software Library](软件库)。
- 在 [Software Library](软件库)工作区中,展开 [Operating Systems](操作系统),然后单击 [Task Sequences](任务序列)。
- 在 [Home](主页)选项卡上的 [Create](创建)组中,单击 [Create Task Sequence](创建任务序列)以启动 [Create Task Sequence Wizard](创建任务序列向导)。
- 在 [Create New Task Sequence](新建任务序列)页上,选择 [Create a new custom task sequence](创建新的自定义任务序列),然后单击 [Next](下一步)。
- 在 [Specify Task Sequence Information](指定任务序列信息)页上,为该任务序列指定一个名称和可选注释,然后单击 [Next](下一步)。不要指定启动映像。仅在部署操作系统时才需要启动映像。
- 完成此向导。
编辑任务序列
- 在 Configuration Manager 控制台中,单击 [Software Library](软件库)。
- 在 [Software Library](软件库)工作区中,展开 [Operating Systems](操作系统),然后单击 [Task Sequences](任务序列)。
- 选择要编辑的任务序列。
- 在 [Home](主页)选项卡上的 [Task Sequence](任务序列)组中,单击 [Edit](编辑)以打开 [Task Sequence Editor](任务序列编辑器)。
- 要添加一个设置默认脚本主机的步骤,请单击 [Add](添加),选择 [General](常规),然后单击 [Run Command Line](运行命令行)。
- 在 [Run Command Line](运行命令行)步骤中,在 [Properties](属性)选项卡上的 [Command line](命令行)框中指定以下命令:cscript.exe //b //H:cscript
- 要添加一个禁用写入筛选器的步骤,请单击 [Add](添加),选择 [General](常规),然后单击 [Install Package](安装软件包)。
- 在 [Install Package](安装软件包)步骤中的 [Properties](属性)选项卡上,指定包含 XPeWriteFilter.vbs 脚本的软件包。
- 从 [Program](程序)下拉列表中,选择程序 [Disable write filter](禁用写入筛选器)。
- 根据需要添加安装软件或软件更新的其他步骤。
- 要添加一个启用写入筛选器的步骤,请单击 [Add](添加),选择 [General](常规),然后单击 [Install Package](安装软件包)。
- 在 [Install Package](安装软件包)步骤中的 [Properties](属性)选项卡上,指定包含 XPeWriteFilter.vbs 脚本的软件包。
- 从 [Program](程序)下拉列表中,选择程序 [Enable write filter](启用写入筛选器)。
- 单击 [OK](确定)保存更改,并关闭 [Task Sequence Editor](任务序列编辑器)。
部署任务序列
- 在 Configuration Manager 控制台中,单击 [Software Library](软件库)。
- 在 [Software Library](软件库)工作区中,展开 [Operating Systems](操作系统),然后单击 [Task Sequences](任务序列)。
- 选择要部署的任务序列。
- 在 [Home](主页)选项卡上的 [Deployment](部署)组中,单击 [Deploy](部署)以打开 [Deploy Software Wizard](部署软件向导)。
- 在 [General](常规)页上,选择包含嵌入设备的 [Collection](集合),然后单击 [Next](下一步)。
- 在 [Deployment Settings](部署设置)页上,单击 [Next](下一步)。
- 根据您的标准软件分发过程,完成 [Deploy Software Wizard](部署软件向导)的其余页面。
该任务序列将在目标计算机上运行。当该任务序列运行时,它将禁用写入筛选器,安装所需的软件或更新,然后在安装完成之后启用写入筛选器。
对于基于文件的写入筛选器 (FBWF),您需要执行除脚本和任务序列之外的一些其他步骤:
在使用 FBWF 时,需要在本地系统关机时运行一个脚本。此脚本需要将任务序列启动的 Configuration Manager 重启生成的 SMSTSVolumeID 文件提交到 FBWF。如果该任务序列运行 Write Filter Disable 命令,并在重启之前未提交此文件,则该任务序列在计算机重启之后不会继续执行。要启用此脚本,应将其作为一个 Shutdown 脚本添加到本地组策略。
请使用以下过程设置 Shutdown 脚本。
设置 Shutdown 脚本
- CommitVolID.vbs 示例脚本如下:
Set WshShell = WScript.CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
strCommand = "C:\Windows\System32\fbwfmgr.exe"
strDir = "C:\"
Set colDir = FSO.GetFolder(strDir)
ForEach objItem In colDir.Files
IfLCase(left(Cstr(objItem.Name), 10)) = "_smstsvolu" Then
smsvolID = objItem.Name
EndIf
Next
strCommitCommand = strCommand & " /commit C: \" & smsvolID
IfNOT smsvolID = "" Then
Set oExec = WshShell.Exec(strCommitCommand)
'Wait for the previous command to complete.
DoWhile oExec.Status = 0
WScript.Sleep 100
Loop
EndIf
- 复制文本并将其另存为 CommitVolID.vbs。
- 在测试计算机上,打开“运行”对话框,键入 MMC 以打开“Microsoft 管理控制台”。
- 单击“文件”,然后选择“添加/删除管理单元”。
- 在“添加/删除管理单元”对话框中,单击“添加”。
- 在“添加独立管理单元”页上,选择“组策略对象编辑器”,单击“添加”。
- 在“选择组策略向导”上,单击“完成”。
- 单击“确定”。
- 在 MMC 中,展开“本地计算机策略”,并导航到“计算机配置/Windows 设置/脚本(启动/关机)”。
- 在右窗格中,双击“关机”。
- 在“关机属性”中,单击“添加”添加脚本 CommitVolID.vbs。
本篇博文按照“原样”提供,且不提供任何担保和授予任何权利。