пятница, 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

четверг, 6 июля 2017 г.

VMware 6.5, проблема с мышкой в Windows PE

Относительно недавно обновили виртуальную платформу VMware до версии 6.5 и появилась проблема: загружаешься по pxe, стартует Windows PE, а мышкой в ней пользоваться невозможно, т.к. чуть тронешь мышку - курсор начинает летать из угла в угол.

Решил посмотреть версию драйвера мышки, входящего в VMware tools старой версии, который был интегрирован в Windows PE - VMware pointing device 12.4.0.6 (от 17.11.2009 года)

Распаковал VMware tools от версии 6.5 и увидел, что от мышки два драйвера:
  1. VMware Pointing Device 12.5.7.0 от 18.12.2015 года
  2. VMware USB Pointing Device 12.5.7.0 от 18.12.2015 года
Добавил драйвер в SCCM, убрал старый драйвер из загрузочного образа Windows PE, добавил новый и чудо - мышка заработала нормально.

четверг, 4 мая 2017 г.

OSD недоменного компьютера без агента. Unattended.xml

Продолжение истории с разливкой недоменного компьютера.

В решении нашей проблемы поможет файл ответов - unattended.xml (на самом деле имя может быть любое)

Вариантов решения с файлом ответов два:
  1. Настроить autologon для учетной записи встроенного Администратора, тогда она автоматически будет включена
  2. Добавить еще одну учетную запись через файл ответов
 
В моем случае использовался первый вариант. Создать файл ответов можно в GUI, используя System Image Manager (Windows SIM), входящий в состав Windows Assessment and Deployment Kit (Windows ADK).
Детально рассматривать не будем, думаю, читатель разберется. Содержимое файла unattended.xml:

среда, 3 мая 2017 г.

OSD недоменного компьютера без агента, проблемы и решения

Давно не писал в блог, как-то не возникало ничего интересного, что хотелось бы как-то задокументировать.

Недавно появилась задача - сделать Task Sequence для разливки Windows 7 на компьютеры, которые не будут входить в домен и агент SCCM там не нужен. Машины разольют 1 раз и отдадут людям в поля.

Ну все как обычно: сделал эталонную машину, установил весь софт, патчи на Windows/Office, добавил туда необходимый минимум вроде ssh, tftpd и еще пару мелочей. Включил встроенную учетную запись Администратор, от которой и выполнял все действия, пароль сбросил. Воткнул capture media, захватил образ, при этом в Task Sequence указал, что :


Разливаю образ на тестовую машинку, пытаюсь залогиниться учетной записью Администратор, а получаю ошибку, что учетная запись заблокирована. Удивлению нет предела. Ладно, думаю, проблема в том, что не указал пароль. Задаю пароль, разливаю еще раз, ввожу пароль и опять заблокировано.

Раз так, решаю завести еще одну учетную запись в эталонной машинке, добавить ее в группу Администраторы и разлить, уж тут-то будет все равно, что встроенный администратор заблокирован. Создаю учетку, логинюсь ей на компьютер, запускаю из под нее Capture Media, граблю образ, разливаю, пробую залогиниться этой учеткой - неправильный логин или пароль. Загружаюсь в безопасном режиме, захожу под встроенным администратором, открываю консоль и вижу, что нет моей учетной записи и в папке Users каталога тоже нет.

Для теста решил попробовать проделать то же самое, но оставить шаг с установкой агента SCCM. Если ставить агента, то все хорошо и прекрасно - встроенный администратор будет включен, все прекрасно.

Думаю, что надо попробовать запустить шаг Run CMD и выполнить там
net user Администратор /active:yes
, но потом понимаю, что в случае с разливкой недоменной машины и без агента все действия будут выполняться в Windows PE и нужного эффекта не добиться, т.к. данную команду нужно выполнять в Full OS.

Вот так дела... О решении проблемы в следующем посте, скажу лишь, что нужно использовать unattended.xml

четверг, 7 июля 2016 г.

Reporting Subscriptions - Подписка на отчеты

От пользователя были созданы подписки на отчеты по e-mail, пользователя либо удалили, либо по каким-то причинам он перестал иметь права на отчеты. Подписки перестанут работать.
Что бы исправить ситуацию, нужно в SQL Management Studio заменить владельца подписок. Хранятся они в базе ReportServer - dbo.Subscriptions. Для этого используем следующий запрос, поменяв DOMAIN\OLDuser и DOMAIN\NEWuser на нужные вам учетные записи:
DECLARE @OldUserID uniqueidentifier
DECLARE @NewUserID uniqueidentifier
SELECT @OldUserID = UserID FROM dbo.Users WHERE UserName = 'DOMAIN\OLDuser'
SELECT @NewUserID = UserID FROM dbo.Users WHERE UserName = 'DOMAIN\NEWuser'
UPDATE dbo.Subscriptions SET OwnerID = @NewUserID WHERE OwnerID = @OldUserID

четверг, 30 июня 2016 г.

Powershell cannot find drive

При использовании модуля powershell для sccm может появиться ошибка при указании "диска" (имя сайта sccm)
Для перехода можно использовать либо cd имя_сайта: , либо set-location имя_сайта:
 
Можно словить ошибку Cannot find drive. A drive with the name 'S12' does not exist.