Windows 10 IoT Enterprise-嵌入式脚本的配置秘密

前言


您必须已经看到显示错误或系统通知的ATM,信息亭,广告面板。 如果您还没有看到这样的公共设备“活跃”,那么如果您根据“ ATM Windows error”一词查找图片,则可以轻松地在Internet上找到相似的照片。 并且一旦系统通知在天气预报中实时显示,就可以通过“ Windows live notifications”字样找到该照片。 为了感兴趣,您仍然可以搜索“最大的蓝屏”。

这一切是什么意思?


-你喜欢猫吗?
-没有
-你就是不知道怎么做!

对于专业设备,Microsoft建议使用Windows 10 IoT Enterprise ,它与Windows 10 Enterprise的区别仅在于没有通用应用程序。 因此,从技术角度来看,Win 10 IoT Enterprise是涉及用户交互的桌面操作系统。 但是在专用设备上,用户互动不应是因为 有时甚至没有通常意义上的用户,尤其是广告面板用户。

在准备专用设备时,一些技术专家会完全忘记上述细微差别,或者忘记关闭任何类别的通知。 本文旨在提醒您Windows安装程序针对某些特定解决方案的某些功能。 在本文中,我们将考虑为一项业务任务准备解决方案。

将针对Win 10 IoT Enterprise 2016 LTSB描述所有设置,可在此处下载其演示版本。

您要解决什么业务任务?


到达网上商店的取货点后。 在这家商店中,卖家只签发商品或给他们看一下,而订单只需要放在商店的网站上即可。 为了能够直接在取货点下订单,在取货室中安装了许多PC。 个人电脑本身是隐藏的,只有显示器和鼠标,在屏幕上开设了专门的商店,可以在其中找到商品,下订单和使用屏幕键盘。

考虑准备一个类似的解决方案,该解决方案旨在导航www.quarta-embedded.ru站点。 估计的使用条件-无需不间断电源,维护需求最少。

解决方案准备


第1步-准备设备


由于该设备是一台普通PC,硬盘为120 GB,RAM为4 GB。 操作系统启动模式-旧版。

因为 我们的设备将在不间断电源的情况下使用,因此必须提供计划外的断电。 即 设备应在电源出现时自行打开,为此,您需要相应地配置设备的BIOS。 BIOS中的必要项目可以通过直观的名称找到,我将其设置为“高级>开机选项>掉电后”,将其设置为“开”。 但是,如果您希望设备在有意关闭时仍保持关闭状态,则将其设置为“先前状态”。

步骤2-安装Win 10 IoT


安装Win 10 IoT Enterprise与安装Win 10 Enterprise没什么不同,因此在描述安装方面我没有多大意义。 我将在没有Internet连接的情况下安装“ Win 10 IoT Enterprise 2016 LTSB x32”,以便没有多余的东西“进入”系统。 在第一次启动时,创建了用户Admin。

第3步-保存系统映像


什么,没想到会这样吗? 刚安装系统并立即保存映像。 在准备解决方案时,建议定期保存系统映像,以防突然出现问题。 然后,您将不需要先进行系统设置。

在谈论创建映像时,我们谈到了复制问题,但是它是如此之广,以至于有一篇单独的文章可以专门讨论它,因此在本文中,我将不详细描述这个问题。

要创建技术(中间)映像,我将使用以下命令密封系统

%SYSTEMROOT%\System32\Sysprep\sysprep.exe /audit /generalize /shutdown /quiet 

并使用DISM实用程序创建系统卷的WIM映像。

重要-如果您采用相同的方式,则在部署此类映像之后,请不要忘记将“ Windows \ System32 \ Recovery”目录的内容复制到“ Recovery \ WindowsRE”文件夹中的第一个卷中。 并且您需要在加载操作系统之前执行此操作。 加载操作系统后,“ Windows \ System32 \ Recovery”目录将为空。 我将其实现如下:

 if exist W:\Windows\System32\Recovery\*.* ( xcopy W:\Windows\System32\Recovery\*.* S:\Recovery\WindowsRE\ /h /k /y attrib +s +h +i S:\Recovery attrib +s +h +i S:\Recovery\*.* /s /d ) 

请注意,密封后,系统将自动登录到内置管理员帐户。 现在,sysprep将自动启动。 为了防止此窗口困扰我,我向外壳程序添加了一个脚本,其中包含一个命令:

 taskkill /im sysprep.exe 

为了不忘记删除脚本,我将立即制作一个用于密封的脚本,其中将写入用于清除自动运行的命令。

 del "%systemdrive%\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\*.*" /q 

毕竟,我仍然需要以oobe模式密封系统。
我将把所有技术文件放在文件夹C:\ Sysprep中

第4步-驱动程序安装


奇怪的是,但是有些人抱怨说在安装Win 10之后,“驱动程序没有自行安装”。 我赶紧让你不高兴,它本身什么也没有发生,必须安装驱动程序。 系统附带了一组特定的标准驱动程序,但是使用标准驱动程序集不太可能使用设备的所有功能。 最好是自己为设备安装最合适的驱动程序。 Windows可以从特殊的Microsoft存储库中自动下载驱动程序并进行安装,但是没有必要安装所有必需的驱动程序或将它们用作合适的驱动程序。 系统自动安装的驱动程序可能会导致系统崩溃。 如果发现自己处于需要阻止这种自动驱动程序安装的情况下该怎么办? 有2个选项:

1.禁用更新服务
净停止wuauserv-服务停止命令
sc config wuauserv start =禁用-将服务启动模式更改为“禁用”
但是在这种情况下,系统根本不会收到任何更新

2.禁用组策略中特定驱动程序的安装

为此,您需要:

使用gpedit打开组策略编辑器

转到“计算机配置\管理模板\系统\设备安装\设备安装限制”部分。 分支机构的英文版“计算机配置\管理模板\系统\设备安装\设备安装限制”
在本节中,您可以禁止安装用于特定类别或设备ID的驱动程序。 为防止安装其他驱动程序,您无需选中“也适用于已安装的匹配设备”复选框,否则将无法使用该设备。

因为 我有一个实验性的解决方案,并且驱动程序并不重要,我不会故意安装驱动程序。 连接到Internet后,系统找到了某些设备的驱动程序。

步骤5-破坏系统


我认为该动作非常简单,无需详细描述。 我要说的是,为了正确显示西里尔字母,我为不支持Unicode的程序指定了俄语。 他指出了位置,尽管在我看来这不是必需的。 在此过程中,您可以将时区更改为 默认值为UTC -8。 我安装了俄语语言包,当我通过Internet安装语言包时,它似乎很长,因此我使用以前下载的软件包“ Microsoft-Windows-Client-Language-Pack_x86_ru-ru.cab”进行了安装,并使用以下命令进行了安装

 DISM /Online /Add-Package /PackagePath:"%~dp0Microsoft-Windows-Client-Language-Pack_x%PROCESSOR_ARCHITECTURE:~-2%_ru-ru.cab" 

安装后,我将系统的主要语言切换为俄语,并打开了用于复制欢迎屏幕和新帐户的语言设置的选项。
就是这样,已经添加了俄语,也许您可​​以保存系统的图像...

第6步-电源设置


我们的设备不应入睡并关闭显示器,因此您需要相应地配置电源。 可以使用以下脚本配置电源:

 powercfg -change -monitor-timeout-ac 0 powercfg -change -monitor-timeout-dc 0 powercfg -change -disk-timeout-ac 0 powercfg -change -disk-timeout-dc 0 powercfg -change -standby-timeout-ac 0 powercfg -change -standby-timeout-dc 0 powercfg -change -hibernate-timeout-ac 0 powercfg -change -hibernate-timeout-dc 0 pause 

步骤7-禁用紧急启动模式


重要的一点是,如果我们的设备连续2-3次不正确地关机,则系统将启动进入恢复模式,这是不允许的。 因此,请关闭此引导模式。 可以使用以下命令完成

 bcdedit /set {current} bootstatuspolicy IgnoreAllFailures 

请注意,此设置已在恢复分区上的bcd存储库中注册。 我在保存系统映像时没有保存恢复部分,因此,在部署系统后,此设置将恢复为原始状态,因为 会有一个新的bcd存储。 为了避免忘记此设置,我将其添加到oobe模式下的密封脚本中。

步骤8-禁用错误消息和弹出通知


为了使系统不显示错误消息,发送错误报告的请求,有关设备问题的消息,所有这些都必须禁用。 可以在组策略中配置诊断策略服务:

计算机配置\管理模板\系统\诊断
诊断:设置脚本执行级别-启用“仅检测和诊断”

但是,对于我来说,使用单个reg文件配置所有内容就更容易了。

 Windows Registry Editor Version 5.00 ;    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows] ;"ErrorMode"=dword:00000000 ;   ;"ErrorMode"=dword:00000001 ;     . ,     "ErrorMode"=dword:00000002 ;    . ,   dll ;     [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting] ;"Disabled"=dword:00000000 ;   "Disabled"=dword:00000001 ;   ;       [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WDI] ;"ScenarioExecutionEnabled"=dword:00000000 ;      "ScenarioExecutionEnabled"=dword:00000001 ;      "EnabledScenarioExecutionLevel"=dword:00000001 ;    ;"EnabledScenarioExecutionLevel"=dword:00000002 ;,     

可以在组策略“用户配置\管理模板\开始菜单和任务栏\通知”中配置弹出式通知。 但是,对于我来说,打开“请勿打扰”模式比较容易,可以在图形界面,通知中心和注册表中将其打开。 因为 此设置适用于特定用户,然后您需要在目标用户下执行此设置。 因此,我们创建了一个用户,将在该用户下执行公共应用程序。 该用户将位于管理员组中,以便于配置。 为了使组名俄语/英语没有问题,我将通过SID获得组名。

 net user User /add wmic useraccount where "Name='User'" set PasswordExpires=False for /f "tokens=2 delims==" %%i in ('wmic group where "SID='S-1-5-32-544'" get Name /value^|find "Name"') do set GroupName=%%i net localgroup %GroupName% User /add pause 

并打开请勿打扰模式。

 Windows Registry Editor Version 5.00 ;  " " [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Notifications\Settings] "NOC_GLOBAL_SETTING_TOASTS_ENABLED"=dword:00000000 ;  ;"NOC_GLOBAL_SETTING_TOASTS_ENABLED"=dword:00000001 ;  

为了避免忘记将用户从管理员组中排除,我将排除命令添加到密封脚本中。

 for /f "tokens=2 delims==" %%i in ('wmic group where "SID='S-1-5-32-544'" get Name /value^|find "Name"') do set GroupName=%%i net localgroup %GroupName% User /delete 

步骤9-配置系统更新


在准备系统时安装所有最新更新不会有任何问题。 您可以根据设备的具体情况配置更新。 您可以禁用所有更新或驱动程序更新的安装,如我们在步骤4中所述。或者您可以禁用系统更新安装并保留驱动程序更新。

 Windows Registry Editor Version 5.00 ;  .      [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU] "NoAutoUpdate"=dword:00000001 ;  ;"NoAutoUpdate"=dword:00000000 ;  

但是也可能需要安装系统更新,但是某些特定的更新将禁用系统。 在这种情况下,您可以防止安装特定更新。 可以使用wushowhide.diagcab实用程序来完成,该实用程序可以在此处找到。

在组策略中,您可以找到许多用于安装更新的详细设置。 “计算机配置\管理模板\ Windows组件\ Windows更新”

因为 我不需要更新,我完全禁用了它们:

 net stop wuauserv sc config wuauserv start=disabled pause 

在这里,我将再次保存系统映像。

步骤10-配置应用程序启动


通过quarta-embedded.ru网站导航将在IE中进行,以删除对地址栏和设置的访问,您可以在组策略中启用全屏模式。 “用户配置>管理模板> Windows组件> Internet Explorer>启用全屏模式。” 而且您需要禁止关闭IE“用户配置>管理模板> Windows组件> Internet Explorer>浏览器菜单>文件菜单:禁用关闭浏览器和资源管理器Windows”。
要启动应用程序而不是系统外壳程序,我们将使用特殊的应用程序启动工具-ShellLauncher。 使用它,您可以:

1.将特定应用程序的启动分配给特定用户或一组用户

2.控制正在运行的应用程序的操作,在关闭正在运行的应用程序时,您可以:

  • 一个 重新启动应用程序
  • b。 重启系统
  • c。 关闭系统
  • d。 不采取行动

首先,您需要添加ShellLauncher作为组件,这可以在图形界面“控制面板>程序>打开或关闭Windows组件”的“设备锁定”部分中完成。 您可以在注册表分支“ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows Embedded \ Shell Launcher”中配置程序的启动。 程序的启动由用户的SID配置,可以使用whoami实用程序找到SID。 要启用ShellLauncher,您只需要用ShellLauncher的启动替换注册表中标准Shell的启动。 略有细微差别,ShellLauncher不会影响正在运行的程序的窗口大小和位置,并且IE希望以全屏方式运行已部署的程序。 因此,我们再次在用户用户下配置IE启动模式,同时禁止调用IE上下文菜单,以使用户不会弄乱任何内容。

 Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main] "FullScreen"="yes" [HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Restrictions] "NoBrowserContextMenu"=dword:00000001 

现在我们正在设置ShellLauncher,再次让我使用控制台更方便了...

 @echo off chcp 1251 echo  ShellLouncher   DISM /online /Enable-Feature /all /FeatureName:Client-EmbeddedShellLauncher echo. echo  SID  User for /f "tokens=2 delims==" %%i in ('wmic useraccount where "Name='User'" get SID /value^|find "SID"') do set SID=%%i echo. echo   iexplore.exe   User reg add "HKLM\SOFTWARE\Microsoft\Windows Embedded\Shell Launcher\%SID%" /v Shell /t REG_SZ /d "C:\Program Files\Internet Explorer\iexplore.exe www.quarta-embedded.ru" /f echo. echo     IE reg add "HKLM\SOFTWARE\Microsoft\Windows Embedded\Shell Launcher\%SID%" /v DefaultReturnCodeAction /t REG_DWORD /d 0 /f echo. echo       reg add "HKLM\SOFTWARE\Microsoft\Windows Embedded\Shell Launcher\S-1-5-32-544" /v Shell /t REG_SZ /d "explorer.exe" /f echo. echo         reg add "HKLM\SOFTWARE\Microsoft\Windows Embedded\Shell Launcher\S-1-5-32-544" /v DefaultReturnCodeAction /t REG_DWORD /d 3 /f pause 

并且,作为示例,您可以分配一个默认外壳程序,以在未向用户分配任何应用程序时运行。

 Windows Registry Editor Version 5.00 ;     ,    cmd.exe [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Embedded\Shell Launcher] "Shell"="explorer.exe" ;        ;"DefaultReturnCodeAction"=dword:00000000 ;  ;"DefaultReturnCodeAction"=dword:00000001 ; ;"DefaultReturnCodeAction"=dword:00000002 ; "DefaultReturnCodeAction"=dword:00000003 ;   

并打开Shell Launcher

 Windows Registry Editor Version 5.00 ; ShellLouncher    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon] "Shell"="eShell.exe" ; Shell Launcher ;"Shell"="explorer.exe" ; Shell Launcher 

步骤11-配置系统启动显示


在早期版本的Windows中,您可以设置自己的徽标,这些徽标将在系统启动时显示,现在只有两个选项。 和关闭 您可以禁用在bcd存储库中显示负载的过程,我将立即执行这些命令并将它们添加到密封脚本中。

 echo    Windows  .     true   false bcdedit /set {globalsettings} custom:16000067 true echo        Windows.     false bcdedit /set {globalsettings} nobootuxprogress true 

您还可以隐藏用户登录过程。

 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Embedded\EmbeddedLogon] ;"HideAutoLogonUI"=dword:00000000 ;  "HideAutoLogonUI"=dword:00000001 ;  

现在打开自动用户登录用户,可以使用netplwiz命令来完成。 我们重新启动,看看发生了什么,没有显示操作系统加载进度,也没有显示用户登录。 仅在进入系统之前,以球的形式出现Win图标和动画会持续几秒钟,但这是因为操作系统处于审核模式,而在oobe模式下密封之后,则不会发生这种情况。 IE自动以地址www.quarta-embedded.ru启动,稍后出现microsoft.com选项卡,好吧,什么都没有,您需要添加命令以将注册表中的设置更改为密封响应文件

 reg add HKLM\Software\Microsoft\Internet Explorer\Main" /v "DisableFirstRunCustomize" /t REG_DWORD /d 1 

在这里,我将再次制作系统的图像。

步骤12-安装和删除Windows键


在安装密钥之前,您需要断开PC与Internet的连接,以使系统无法激活。 您可以添加一个密钥并立即将其删除,以便没有人可以将其拔出。 在这种情况下,系统仍然可以激活。

 slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX slmgr /cpky 

步骤13-密封系统


为了使系统在以oobe模式密封后第一次启动时不会提出问题,我使用了以前在Windows System Image Manager实用程序中准备的应答文件。 我运行脚本来密封,在脚本和响应文件的内容下方。

密封脚本:

 del "%systemdrive%\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\*.*" /q for /f "tokens=2 delims==" %%i in ('wmic group where "SID='S-1-5-32-544'" get Name /value^|find "Name"') do set GroupName=%%i net localgroup %GroupName% User /delete bcdedit /set {current} bootstatuspolicy IgnoreAllFailures bcdedit /set {globalsettings} custom:16000067 true bcdedit /set {globalsettings} nobootuxprogress true pushd "%~dp0" %SYSTEMROOT%\System32\Sysprep\sysprep.exe /oobe /generalize /shutdown /quiet /unattend:Unattend.xml 

Unattend.xml:

 <?xml version="1.0" encoding="utf-8"?> <unattend xmlns="urn:schemas-microsoft-com:unattend"> <settings pass="specialize"> <component name="Microsoft-Windows-Deployment" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <RunSynchronous> <RunSynchronousCommand wcm:action="add"> <Path>reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Setup\OOBE /v SetupDisplayedProductKey /t REG_DWORD /d 1 /f</Path> <Order>1</Order> <Description>Dont show key page</Description> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> <Path>reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Setup\OOBE /v UnattendCreatedUser /t REG_DWORD /d 1 /f</Path> <Order>2</Order> <Description>Dont make account</Description> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> <Path>reg add "HKLM\Software\Microsoft\Internet Explorer\Main" /v "DisableFirstRunCustomize" /t REG_DWORD /d 1 /f</Path> <Order>3</Order> <Description>Disable First Run Customize</Description> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> <Path>cmd.exe /c rd %systemdrive%\Sysprep /s /q</Path> <Order>4</Order> <Description>Del Folder</Description> </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" 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> <Enabled>true</Enabled> <Username>User</Username> </AutoLogon> </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-International-Core" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <InputLocale>en-US; ru-RU</InputLocale> <SystemLocale>ru-RU</SystemLocale> <UILanguage>ru-RU</UILanguage> <UILanguageFallback></UILanguageFallback> <UserLocale>ru-RU</UserLocale> </component> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <OOBE> <HideEULAPage>true</HideEULAPage> <HideLocalAccountScreen>true</HideLocalAccountScreen> <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> <ProtectYourPC>1</ProtectYourPC> </OOBE> </component> </settings> <cpi:offlineImage cpi:source="" xmlns:cpi="urn:schemas-microsoft-com:cpi" /> </unattend> 

总结


最终发生了什么...系统启动时没有任何问题,IE在正确的页面启动。 如果考虑到将无法物理访问PC,并且只能通过输入工具访问鼠标,那么似乎没有任何东西可以损坏。 我们进入管理员帐户,然后看到Sysprep文件夹已删除。 系统准备就绪...

Source: https://habr.com/ru/post/zh-CN413359/


All Articles