пятница, 15 марта 2019 г.

Обновление до Windows 10, ошибки на файлы lnk в папке Recent

Пока обновляли тестовую группу машин Window 7 до Windows 10, на паре машин столкнулся с проблемой: до первого ребута на машине валится таск, машина ребутится, делает откат, создается профиль username.000, даже если машину потом заапгрейдить еще раз, то часть приложений будет ссылаться на username000\*, часть на username\*, например, локальные pst в Outlook.

В логе %systemdrive%\$WINDOWS.~BT\Panther\setupact.log видим следующую ошибку:

Operation failed: First boot apply. Error: 0x8007042B[gle=0x000000b7]
Operation execution failed: 13. hr = 0x8007042B
ExecuteOperations: Failed execution phase Post First Boot. Error: 0x8007042B
Operation execution failed.
CSetupPlatformPrivate::Execute: Failed to deserialize/execute post-FirstBoot operations. Error: 0x8007042B
Persisting diagnostics data to C:\$WINDOWS.~BT\Sources\Diagnostics\diagnostics.dat
Diagnostics data saved successfully
SETUPPLATFORMCOMM: Progress message received: Phase: First Boot, Operation: Migrate data, Percentage: 58%
WINDEPLOY error code is 0x80004005. Will not attempt uninstall

В логе %systemdrive%\$WINDOWS.~BT\Panther\setuperr.log видим следующую ошибку:

Error 183 while applying object C:\Users\username\AppData\Roaming\Microsoft\Windows\Recent [022019.pdf.lnk]. Shell application requested abort[gle=0x00000002]


До конца не уверен, что проблема с дублированным профилем username000 связана именно с этим и создается он во время отката, а не после повторного запуска таска обновления, но на обеих машинах была аналогичная проблема с файлами в каталоге Recent. При этом у первого пользователя в новый профиль переехало все, кроме библиотеки Изображения, у второго пользователя профиль переехал 1 в 1.


Есть предположение, почему это происходит: ярлык-ссылка на файл есть, а самого файла уже нет. Этот ярлык не просто копируется, а пытается создаться заново с указанием на таргет, которого уже нет, но это неточно.

В каталоге Recent хранятся ссылки-ярлыки на недавно открытые документы. Это то самое, что можно увидеть в Пуск-Недавние документы или при правом клике на ярлык Word, закрепленного на панели задач - быстро открыть последние документы, открытые в приложении.

Через GPO можно запретить создавать эти ссылки, можно чистить их при выходе пользователя. Первое не подходит, потому что текущие ссылки оно не очистит, второе тоже - неизвестно, разлогинится ли юзер перед тем, как обновляться. Можно, конечно, пустить машину для начала в ребут.

В итоге написал небольшой скрипт. Коллега сказал, что некошерно, т.к. он пробежится по всем профилям, даже системным, но там этих файлов-ссылок быть не должно.


 cd $env:systemdrive\  
 $a=dir users  
 $a.fullname | %{remove-item ($_+"\appdata\roaming\microsoft\windows\recent\*") -Confirm:$false -Recurse}  

Скрипт пробегается рекурсивно по всем профилям в папке Users на системном диске, заглядывает в Recent и удаляет все оттуда.

После этого собираем пакет, указываем source folder с нашим скриптом, программы не создаем. Не забываем сделать Distribute Content на DP.
Далее создаем в TS для обновления ОС шаг - Run powershell script повыше Upgrade operating system и указываем пакет и имя нашего скрипта, Execution policy ставим в bypass:


После этого запускаем TS повторно, радуемся результату.

вторник, 5 марта 2019 г.

Вернуть Windows Photo Viewer в Windows 10.

После установки Windows 10, стандартным приложением для просмотра графических файлов является... в общем, не тот самый Windows Photo Viewer.
Если вы не используете какой-то нестандартный софт, то пользователи могут быть немного удивлены.

Начать нужно с того, что Windows Photo Viewer нужно "включить" в системе. Для этого нужно проделать небольшие правки в реестре. Сохраните код ниже, как .reg файл:


 Windows Registry Editor Version 5.00  
   
 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Photo Viewer\Capabilities\FileAssociations]  
 ".jpg"="PhotoViewer.FileAssoc.Jpeg"  
 ".wdp"="PhotoViewer.FileAssoc.Wdp"  
 ".jfif"="PhotoViewer.FileAssoc.JFIF"  
 ".dib"="PhotoViewer.FileAssoc.Bitmap"  
 ".png"="PhotoViewer.FileAssoc.Png"  
 ".jxr"="PhotoViewer.FileAssoc.Wdp"  
 ".bmp"="PhotoViewer.FileAssoc.Bitmap"  
 ".jpe"="PhotoViewer.FileAssoc.Jpeg"  
 ".jpeg"="PhotoViewer.FileAssoc.Jpeg"  
 ".gif"="PhotoViewer.FileAssoc.Gif"  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Bitmap]  
 "ImageOptionFlags"=dword:00000001  
 "FriendlyTypeName"=hex(2):40,00,25,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,\  
  00,46,00,69,00,6c,00,65,00,73,00,25,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,\  
  77,00,73,00,20,00,50,00,68,00,6f,00,74,00,6f,00,20,00,56,00,69,00,65,00,77,\  
  00,65,00,72,00,5c,00,50,00,68,00,6f,00,74,00,6f,00,56,00,69,00,65,00,77,00,\  
  65,00,72,00,2e,00,64,00,6c,00,6c,00,2c,00,2d,00,33,00,30,00,35,00,36,00,00,\  
  00  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Bitmap\DefaultIcon]  
 @="%SystemRoot%\\System32\\imageres.dll,-70"  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Bitmap\shell]  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Bitmap\shell\open]  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Bitmap\shell\open\command]  
 @=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\  
  00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,72,00,75,00,\  
  6e,00,64,00,6c,00,6c,00,33,00,32,00,2e,00,65,00,78,00,65,00,20,00,22,00,25,\  
  00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,46,00,69,00,6c,00,65,00,73,00,\  
  25,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,20,00,50,00,68,00,6f,\  
  00,74,00,6f,00,20,00,56,00,69,00,65,00,77,00,65,00,72,00,5c,00,50,00,68,00,\  
  6f,00,74,00,6f,00,56,00,69,00,65,00,77,00,65,00,72,00,2e,00,64,00,6c,00,6c,\  
  00,22,00,2c,00,20,00,49,00,6d,00,61,00,67,00,65,00,56,00,69,00,65,00,77,00,\  
  5f,00,46,00,75,00,6c,00,6c,00,73,00,63,00,72,00,65,00,65,00,6e,00,20,00,25,\  
  00,31,00,00,00  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Bitmap\shell\open\DropTarget]  
 "Clsid"="{FFE2A43C-56B9-4bf5-9A79-CC6D4285608A}"  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.JFIF]  
 "EditFlags"=dword:00010000  
 "ImageOptionFlags"=dword:00000001  
 "FriendlyTypeName"=hex(2):40,00,25,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,\  
  00,46,00,69,00,6c,00,65,00,73,00,25,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,\  
  77,00,73,00,20,00,50,00,68,00,6f,00,74,00,6f,00,20,00,56,00,69,00,65,00,77,\  
  00,65,00,72,00,5c,00,50,00,68,00,6f,00,74,00,6f,00,56,00,69,00,65,00,77,00,\  
  65,00,72,00,2e,00,64,00,6c,00,6c,00,2c,00,2d,00,33,00,30,00,35,00,35,00,00,\  
  00  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.JFIF\DefaultIcon]  
 @="%SystemRoot%\\System32\\imageres.dll,-72"  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.JFIF\shell]  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.JFIF\shell\open]  
 "MuiVerb"=hex(2):40,00,25,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,46,00,\  
  69,00,6c,00,65,00,73,00,25,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,\  
  00,20,00,50,00,68,00,6f,00,74,00,6f,00,20,00,56,00,69,00,65,00,77,00,65,00,\  
  72,00,5c,00,70,00,68,00,6f,00,74,00,6f,00,76,00,69,00,65,00,77,00,65,00,72,\  
  00,2e,00,64,00,6c,00,6c,00,2c,00,2d,00,33,00,30,00,34,00,33,00,00,00  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.JFIF\shell\open\command]  
 @=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\  
  00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,72,00,75,00,\  
  6e,00,64,00,6c,00,6c,00,33,00,32,00,2e,00,65,00,78,00,65,00,20,00,22,00,25,\  
  00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,46,00,69,00,6c,00,65,00,73,00,\  
  25,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,20,00,50,00,68,00,6f,\  
  00,74,00,6f,00,20,00,56,00,69,00,65,00,77,00,65,00,72,00,5c,00,50,00,68,00,\  
  6f,00,74,00,6f,00,56,00,69,00,65,00,77,00,65,00,72,00,2e,00,64,00,6c,00,6c,\  
  00,22,00,2c,00,20,00,49,00,6d,00,61,00,67,00,65,00,56,00,69,00,65,00,77,00,\  
  5f,00,46,00,75,00,6c,00,6c,00,73,00,63,00,72,00,65,00,65,00,6e,00,20,00,25,\  
  00,31,00,00,00  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.JFIF\shell\open\DropTarget]  
 "Clsid"="{FFE2A43C-56B9-4bf5-9A79-CC6D4285608A}"  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Jpeg]  
 "EditFlags"=dword:00010000  
 "ImageOptionFlags"=dword:00000001  
 "FriendlyTypeName"=hex(2):40,00,25,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,\  
  00,46,00,69,00,6c,00,65,00,73,00,25,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,\  
  77,00,73,00,20,00,50,00,68,00,6f,00,74,00,6f,00,20,00,56,00,69,00,65,00,77,\  
  00,65,00,72,00,5c,00,50,00,68,00,6f,00,74,00,6f,00,56,00,69,00,65,00,77,00,\  
  65,00,72,00,2e,00,64,00,6c,00,6c,00,2c,00,2d,00,33,00,30,00,35,00,35,00,00,\  
  00  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Jpeg\DefaultIcon]  
 @="%SystemRoot%\\System32\\imageres.dll,-72"  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Jpeg\shell]  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Jpeg\shell\open]  
 "MuiVerb"=hex(2):40,00,25,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,46,00,\  
  69,00,6c,00,65,00,73,00,25,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,\  
  00,20,00,50,00,68,00,6f,00,74,00,6f,00,20,00,56,00,69,00,65,00,77,00,65,00,\  
  72,00,5c,00,70,00,68,00,6f,00,74,00,6f,00,76,00,69,00,65,00,77,00,65,00,72,\  
  00,2e,00,64,00,6c,00,6c,00,2c,00,2d,00,33,00,30,00,34,00,33,00,00,00  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Jpeg\shell\open\command]  
 @=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\  
  00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,72,00,75,00,\  
  6e,00,64,00,6c,00,6c,00,33,00,32,00,2e,00,65,00,78,00,65,00,20,00,22,00,25,\  
  00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,46,00,69,00,6c,00,65,00,73,00,\  
  25,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,20,00,50,00,68,00,6f,\  
  00,74,00,6f,00,20,00,56,00,69,00,65,00,77,00,65,00,72,00,5c,00,50,00,68,00,\  
  6f,00,74,00,6f,00,56,00,69,00,65,00,77,00,65,00,72,00,2e,00,64,00,6c,00,6c,\  
  00,22,00,2c,00,20,00,49,00,6d,00,61,00,67,00,65,00,56,00,69,00,65,00,77,00,\  
  5f,00,46,00,75,00,6c,00,6c,00,73,00,63,00,72,00,65,00,65,00,6e,00,20,00,25,\  
  00,31,00,00,00  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Jpeg\shell\open\DropTarget]  
 "Clsid"="{FFE2A43C-56B9-4bf5-9A79-CC6D4285608A}"  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Gif]  
 "ImageOptionFlags"=dword:00000001  
 "FriendlyTypeName"=hex(2):40,00,25,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,\  
  00,46,00,69,00,6c,00,65,00,73,00,25,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,\  
  77,00,73,00,20,00,50,00,68,00,6f,00,74,00,6f,00,20,00,56,00,69,00,65,00,77,\  
  00,65,00,72,00,5c,00,50,00,68,00,6f,00,74,00,6f,00,56,00,69,00,65,00,77,00,\  
  65,00,72,00,2e,00,64,00,6c,00,6c,00,2c,00,2d,00,33,00,30,00,35,00,37,00,00,\  
  00  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Gif\DefaultIcon]  
 @="%SystemRoot%\\System32\\imageres.dll,-83"  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Gif\shell]  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Gif\shell\open]  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Gif\shell\open\command]  
 @=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\  
  00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,72,00,75,00,\  
  6e,00,64,00,6c,00,6c,00,33,00,32,00,2e,00,65,00,78,00,65,00,20,00,22,00,25,\  
  00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,46,00,69,00,6c,00,65,00,73,00,\  
  25,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,20,00,50,00,68,00,6f,\  
  00,74,00,6f,00,20,00,56,00,69,00,65,00,77,00,65,00,72,00,5c,00,50,00,68,00,\  
  6f,00,74,00,6f,00,56,00,69,00,65,00,77,00,65,00,72,00,2e,00,64,00,6c,00,6c,\  
  00,22,00,2c,00,20,00,49,00,6d,00,61,00,67,00,65,00,56,00,69,00,65,00,77,00,\  
  5f,00,46,00,75,00,6c,00,6c,00,73,00,63,00,72,00,65,00,65,00,6e,00,20,00,25,\  
  00,31,00,00,00  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Gif\shell\open\DropTarget]  
 "Clsid"="{FFE2A43C-56B9-4bf5-9A79-CC6D4285608A}"  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Png]  
 "ImageOptionFlags"=dword:00000001  
 "FriendlyTypeName"=hex(2):40,00,25,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,\  
  00,46,00,69,00,6c,00,65,00,73,00,25,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,\  
  77,00,73,00,20,00,50,00,68,00,6f,00,74,00,6f,00,20,00,56,00,69,00,65,00,77,\  
  00,65,00,72,00,5c,00,50,00,68,00,6f,00,74,00,6f,00,56,00,69,00,65,00,77,00,\  
  65,00,72,00,2e,00,64,00,6c,00,6c,00,2c,00,2d,00,33,00,30,00,35,00,37,00,00,\  
  00  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Png\DefaultIcon]  
 @="%SystemRoot%\\System32\\imageres.dll,-71"  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Png\shell]  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Png\shell\open]  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Png\shell\open\command]  
 @=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\  
  00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,72,00,75,00,\  
  6e,00,64,00,6c,00,6c,00,33,00,32,00,2e,00,65,00,78,00,65,00,20,00,22,00,25,\  
  00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,46,00,69,00,6c,00,65,00,73,00,\  
  25,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,20,00,50,00,68,00,6f,\  
  00,74,00,6f,00,20,00,56,00,69,00,65,00,77,00,65,00,72,00,5c,00,50,00,68,00,\  
  6f,00,74,00,6f,00,56,00,69,00,65,00,77,00,65,00,72,00,2e,00,64,00,6c,00,6c,\  
  00,22,00,2c,00,20,00,49,00,6d,00,61,00,67,00,65,00,56,00,69,00,65,00,77,00,\  
  5f,00,46,00,75,00,6c,00,6c,00,73,00,63,00,72,00,65,00,65,00,6e,00,20,00,25,\  
  00,31,00,00,00  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Png\shell\open\DropTarget]  
 "Clsid"="{FFE2A43C-56B9-4bf5-9A79-CC6D4285608A}"  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Wdp]  
 "EditFlags"=dword:00010000  
 "ImageOptionFlags"=dword:00000001  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Wdp\DefaultIcon]  
 @="%SystemRoot%\\System32\\wmphoto.dll,-400"  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Wdp\shell]  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Wdp\shell\open]  
 "MuiVerb"=hex(2):40,00,25,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,46,00,\  
  69,00,6c,00,65,00,73,00,25,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,\  
  00,20,00,50,00,68,00,6f,00,74,00,6f,00,20,00,56,00,69,00,65,00,77,00,65,00,\  
  72,00,5c,00,70,00,68,00,6f,00,74,00,6f,00,76,00,69,00,65,00,77,00,65,00,72,\  
  00,2e,00,64,00,6c,00,6c,00,2c,00,2d,00,33,00,30,00,34,00,33,00,00,00  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Wdp\shell\open\command]  
 @=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\  
  00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,72,00,75,00,\  
  6e,00,64,00,6c,00,6c,00,33,00,32,00,2e,00,65,00,78,00,65,00,20,00,22,00,25,\  
  00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,46,00,69,00,6c,00,65,00,73,00,\  
  25,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,20,00,50,00,68,00,6f,\  
  00,74,00,6f,00,20,00,56,00,69,00,65,00,77,00,65,00,72,00,5c,00,50,00,68,00,\  
  6f,00,74,00,6f,00,56,00,69,00,65,00,77,00,65,00,72,00,2e,00,64,00,6c,00,6c,\  
  00,22,00,2c,00,20,00,49,00,6d,00,61,00,67,00,65,00,56,00,69,00,65,00,77,00,\  
  5f,00,46,00,75,00,6c,00,6c,00,73,00,63,00,72,00,65,00,65,00,6e,00,20,00,25,\  
  00,31,00,00,00  
   
 [HKEY_CLASSES_ROOT\PhotoViewer.FileAssoc.Wdp\shell\open\DropTarget]  
 "Clsid"="{FFE2A43C-56B9-4bf5-9A79-CC6D4285608A}"  
   
 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Photo Viewer]  
   
 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Photo Viewer\Capabilities]  
 "ApplicationDescription"="@%ProgramFiles%\\Windows Photo Viewer\\photoviewer.dll,-3069"  
 "ApplicationName"="@%ProgramFiles%\\Windows Photo Viewer\\photoviewer.dll,-3009"  
   

После импорта .reg файла необходимо добавить ассоциации. В Windows 10 правка реестра для ассоциаций файлов является не очень корректным методом. Работать будет, но регулярно будет сыпать алерты, что ассоциации сброшены/настроены некорректно.

Для выгрузки стандартного полного xml файла ассоциаций можно взять чистую систему, включить на ней через реестр Windows Photo Viewer, возможно, подправить что-то еще и сделать выгрузку файла ассоциаций в xml
Dism.exe /Online /Export-DefaultAppAssociations:C:\defapp-custom.xml
На выходе получаем примерно такое содержимое:

 <?xml version="1.0" encoding="UTF-8"?>  
 <DefaultAssociations>  
  <Association Identifier=".3g2" ProgId="WMP11.AssocFile.3G2" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".3gp" ProgId="WMP11.AssocFile.3GP" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".3gp2" ProgId="WMP11.AssocFile.3G2" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".3gpp" ProgId="WMP11.AssocFile.3GP" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".aac" ProgId="WMP11.AssocFile.ADTS" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".adt" ProgId="WMP11.AssocFile.ADTS" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".adts" ProgId="WMP11.AssocFile.ADTS" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".avi" ProgId="WMP11.AssocFile.AVI" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".bmp" ProgId="PhotoViewer.FileAssoc.Bitmap" ApplicationName="Просмотр фотографий Windows" />  
  <Association Identifier=".dib" ProgId="PhotoViewer.FileAssoc.Bitmap" ApplicationName="Просмотр фотографий Windows" />  
  <Association Identifier=".flac" ProgId="WMP11.AssocFile.FLAC" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".gif" ProgId="PhotoViewer.FileAssoc.Gif" ApplicationName="Просмотр фотографий Windows" />  
  <Association Identifier=".htm" ProgId="IE.AssocFile.HTM" ApplicationName="Internet Explorer" />  
  <Association Identifier=".html" ProgId="IE.AssocFile.HTM" ApplicationName="Internet Explorer" />  
  <Association Identifier=".jfif" ProgId="PhotoViewer.FileAssoc.JFIF" ApplicationName="Просмотр фотографий Windows" />  
  <Association Identifier=".jpe" ProgId="PhotoViewer.FileAssoc.Jpeg" ApplicationName="Просмотр фотографий Windows" />  
  <Association Identifier=".jpeg" ProgId="PhotoViewer.FileAssoc.Jpeg" ApplicationName="Просмотр фотографий Windows" />  
  <Association Identifier=".jpg" ProgId="PhotoViewer.FileAssoc.Jpeg" ApplicationName="Просмотр фотографий Windows" />  
  <Association Identifier=".jxr" ProgId="PhotoViewer.FileAssoc.Wdp" ApplicationName="Просмотр фотографий Windows" />  
  <Association Identifier=".m2t" ProgId="WMP11.AssocFile.M2TS" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".m2ts" ProgId="WMP11.AssocFile.M2TS" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".m3u" ProgId="WMP11.AssocFile.m3u" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".m4a" ProgId="WMP11.AssocFile.M4A" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".m4v" ProgId="WMP11.AssocFile.MP4" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".mkv" ProgId="WMP11.AssocFile.MKV" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".mod" ProgId="WMP11.AssocFile.MPEG" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".mov" ProgId="WMP11.AssocFile.MOV" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".MP2" ProgId="WMP11.AssocFile.MP3" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".mp3" ProgId="WMP11.AssocFile.MP3" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".mp4" ProgId="WMP11.AssocFile.MP4" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".mp4v" ProgId="WMP11.AssocFile.MP4" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".mpa" ProgId="WMP11.AssocFile.MPEG" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".MPE" ProgId="WMP11.AssocFile.MPEG" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".mpeg" ProgId="WMP11.AssocFile.MPEG" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".mpg" ProgId="WMP11.AssocFile.MPEG" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".mpv2" ProgId="WMP11.AssocFile.MPEG" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".mts" ProgId="WMP11.AssocFile.M2TS" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".png" ProgId="PhotoViewer.FileAssoc.Png" ApplicationName="Просмотр фотографий Windows" />  
  <Association Identifier=".tif" ProgId="TIFImage.Document" ApplicationName="Просмотр фотографий Windows" />  
  <Association Identifier=".tiff" ProgId="TIFImage.Document" ApplicationName="Просмотр фотографий Windows" />  
  <Association Identifier=".TS" ProgId="WMP11.AssocFile.TTS" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".TTS" ProgId="WMP11.AssocFile.TTS" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".txt" ProgId="txtfile" ApplicationName="Блокнот" />  
  <Association Identifier=".url" ProgId="IE.AssocFile.URL" ApplicationName="Браузер" />  
  <Association Identifier=".wav" ProgId="WMP11.AssocFile.WAV" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".wdp" ProgId="PhotoViewer.FileAssoc.Wdp" ApplicationName="Просмотр фотографий Windows" />  
  <Association Identifier=".website" ProgId="IE.AssocFile.WEBSITE" ApplicationName="Internet Explorer" />  
  <Association Identifier=".wm" ProgId="WMP11.AssocFile.ASF" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".wma" ProgId="WMP11.AssocFile.WMA" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".wmv" ProgId="WMP11.AssocFile.WMV" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier=".WPL" ProgId="WMP11.AssocFile.WPL" ApplicationName="Проигрыватель Windows Media" />  
  <Association Identifier="http" ProgId="IE.HTTP" ApplicationName="Internet Explorer" />  
  <Association Identifier="https" ProgId="IE.HTTPS" ApplicationName="Internet Explorer" />  
 </DefaultAssociations>  

А далее берем SCCM, собираем пакет, кладем в него наш .reg файл, xml файл и, например, .bat (который мы и будем использовать как command line в program у пакета) файл такого содержимого:

 regedit.exe /s %~dp0photoviewer-assoc.reg  
 dism.exe /online /Import-DefaultAppAssociations:"%~dp0defapp-custom.xml"  

Имена файлов, естественно, ставим нужные. Про %~dp0, надеюсь, объяснять не нужно, но гугл, если что, знает.

Добавляем установку нашего пакета в Task Sequence после шага Setup Windows and Configuration Manager, радуемся полученному результату.


понедельник, 4 марта 2019 г.

Не отображаются In-Console updates, SCCM 1810

После обновления до SCCM 1810 (а мы обновлялись с 2012 R2 SP1), в разделе Administration-Updates and Servicing должны появляться Rollup апдейты, хотфиксы и т.д., но их не было видно.

Для обновления до SCCM 1810 нужно было установить SP4 на SQL 2012. 
Как-то я упустил момент, что у меня висел алерт о том, что на сайт-сервере нужно обновить SQL native client.

Увидеть его можно во вкладке Monitoring-Updates and Servicing Status:


При попытке синхронизации обновлений, в логе dmpdownloader.log была ругань на соединение с SQL. 
SQL Native Client был обновлен до версии из SP4, обновления появились в консоли. 

В - Внимательность.

Ну и небольшая цитата из документации:

"When you install a new site, Configuration Manager automatically installs SQL Server Native Client as a redistributable component. After the site is installed, Configuration Manager does not upgrade SQL Server Native Client. This check makes sure the site has a supported version of the SQL Native Client. Starting in version 1810, the minimum version is SQL 2012 SP4 (11.*.7001.0)."

пятница, 1 марта 2019 г.

Windows 10. SCCM Offline servicing, dism.

При подготовке к миграции на Windows 10, пришлось немало поразбираться с различными тонкостями. Бытует мнение, что очень хорошей практикой при установке Windows 10 является использование install.wim, входящим в родной iso Windows 10, что и было решено попробовать.

Использование штатного install.wim оправдано, если вам не нужно делать capture системы, в которой "зашито" какое-то ПО . Возможно, оно не умеет устанавливаться в silent режиме или есть какие-то тонкости с донастройкой после установки, которые нельзя прикатить централизованно.

Для минимизации времени установки Windows 7, мы использовали capture, т.к. в системе был установлен office 2013. Раз в месяц шаблон конвертировался в ВМ, устанавливались все обновления на ОС и Office, дальше ВМ опять конвертировалась в шаблон, делался клон, он захватывался. С появлением office 2019 все немного изменилось и данная процедура потеряла смысл.

Мы остановились на редакции Windows 10 2019 LTSC. Берем наш install.wim, добавляем в SCCM, с помощью Offline Servicing (у вас должен быть SUP) пытаемся накатить на него Service Stack Update (а его нужно накатить в первую очередь. В данный момент актуальной версией является kb4470788), он успешно применяется к образу. После этого пытаемся добавить последний Cumulative Update (в данный момент актуальным является февральский kb4487044), смотрим в OfflineServicingMgr.log и видим там ошибку:
InstallUpdate returned code 0x80073713
Failed to install update with ID 16827616 on the image. ErrorCode = 14099
При этом, если попробовать установить обновление для Adobe Flash - оно устанавливается нормально. Гуглил-гуглин, очень много сообщений о том, что именно CU не устанавливаются в режиме SCCM - Offline Servicing. Кто-то пишет, что какие-то CU ставятся, какие-то нет. Находил информацию, что проблема действительно имеет место быть, она известна разработчикам, но там что-то сильно поменяли в механизме и править в ближайшем будущем не будут (но это не точно).

Что ж, берем в руки dism и делаем все то же самое и даже больше.
1. Монтируем стандартный install.wim
dism /mount-image /imagefile:"c:\img\install.wim" /mountdir:c:\mounted /index:1
2. Устанавливаем Service Stack update
dism /add-package /image:"c:\mounted" /packagepath="C:\upd\windows10.0-kb4470788-x64_76f112f2b02b1716cdc0cab6c40f73764759cb0d.msu" /logpath=c:\upd\dism.log
3. Устанавливаем актуальный CU
dism /add-package /image:"c:\mounted" /packagepath="C:\upd\windows10.0-kb4487044-x64_6024f9853d489cf4eab66ce2145e91df45183de7.msu" /logpath=c:\upd\dism.log

4. Устанавливаем обновление для Adobe Flash
dism /add-package /image:"c:\mounted" /packagepath="C:\upd\windows10.0-kb4487038-x64_1f1aed068ed38987aa2c100e7e01292404be1703.msu" /logpath=c:\upd\dism.log
Обновления интегрированы, можно было бы размонтировать образ и получить пропатченный install.wim, но образ получается слишком толстым (примерно на 1Гб больше, чем базовый), поэтому мы сделаем небольшой Cleanup.
Если выполнить команду

dism /image:"c:\mounted" /get-packages /format:table