Jump to content
Jon

Windows 10 Deployment Scenarios Overview

Recommended Posts

With the imminent public release of Windows 10 I have been readying my test environments to be able to deploy and test Windows 10. This is a quick overview of the main deployment scenarios supported and some links to the
software you will need. Also I’ve included some links to a selection of videos from the MS Ignite conference that I found the most useful for someone new to Windows 10 deployment.
 
Deployment Scenarios
 
The main deployment scenarios are:
  • Wipe and Load
  • In-place Upgrade
  • Provisioning
 
Wipe and Load
This is the traditional process and follows these general stages:
  • Wipe device
  • Deploy customised OS image
  • Inject drivers
  • Install applications
Optionally this can include steps to capture and restore user data and/or settings if present on the device (usually laptops). Wipe and Load can be done with both MDT and ConfigMgr.
 
Pros
  • Device will be in a known new state
  • Removes any remnants of old installations, updates and obsolete applications. Over months and years performance and disk space can be adversely affected
  • Can use a custom image that could be pre-updated, or contain applications that rarely change - this can drastically improve deployment times
Cons
  • Can have a longer deployment time due to re-installation of all applications post-deployment
  • Must have driver packages available for all machine variants
  • Creating scripts to capture and restore user data can be time-consuming
 
In-place Upgrade
This is a newer scenario available for clients running Windows 7/8/8.1. Windows setup does most of the work for you:
  • Save existing user data, settings, applications and drivers
  • Deploy original Windows 10 image
  • Restore everything
This is a new scenario introduced with Windows 8.1 and Windows 10 and it will be interesting to see how it works in anger. In the Microsoft presentations I’ve seen this is being advertised as the preferred method for upgrading from Windows 7 and 8. I personally prefer a wipe-and-load so that I know everything is clean. Also, new OS deployment is often used as an good opportunity to upgrade major software like Microsoft Office which makes some of the in-place upgrade benefits redundant.
One scenario I think may benefit is the ability to get a Windows client from an OEM and easily upgrade it to Windows 10 while keeping all the drivers it has. Getting the driver packages for new machines was a burden for some smaller companies.
 
Pros
  • Preserves all data: user data, setting, applications and drivers and therefore is potentially less risky
  • Don’t always require new drivers if existing drivers are compatible
  • Often a shorter deployment time
  • Requires less preparation
Cons
  • Cannot use a customised image, the original Windows 10 media must be used
  • If a machine had obsolete installations and settings these will remain
 
Provisioning 
This is another new Enterprise-focused scenario designed to help with the situations where a company wants to ship a new Windows 10 machine directly from the OEM to a user and then have enterprise software and policies applied to that machine to bring it into compliance.
This is controlled by a provisioning package (.ppkg) that is obtained and executed on the target machine and can perform the following operations:
  • Change Windows 10 version from Pro to Enterprise and add in Enterprise features, updates and language packs
  • Retains drivers and applications
  • Install or remove Modern UI applications 
  • Enrol into a domain or management solution
Provisioning packages are created with the new Windows Image and Configuration Designer (Windows ICD) tool.
 
Pros
  • Can change Windows from Pro to Enterprise - this previously required a wipe-and-load
  • Enables Bring Your Own Device (BYOD) scenarios
Cons 
  • The available policies are a small - but useful - subset of those available in Group Policy
  • Yet another tool to go into the toolkit along with WinPE, WIMs, MDT, ConfigMgr. Many organisations already struggle with the best way to deploy and now we have a choice of bespoke vs MDT vs ConfigMgr vs MDM vs Windows ICD
  • For remote installations, you need a delivery mechanism and the .ppkg files involved may be large
  • The only applications that can be installed are Modern UI applications. PowerShell scripts and Win32 applications are in the long-term plan.
 
Deployment Tools and Kits
Here are links to the toolkits you need for MDT and ConfigMgr to deploy Windows 10. Many are in beta or RC stage - I’ll update the links when the final versions are publicly available.
 
Videos
Here are a selection of videos from the MS Ignite conference in May 2015 that I found the most useful:
 
Edited by Jon

Share this post


Link to post
Share on other sites

Thanks for the post, Jon. I am working at a client's right now in which upgrade discussions have already begun. Thankfully I believe it'll coincide with a hardware refresh, so the number of machines we actually upgrade will be small. And I don't think they'll be ready to even plan a rollout until 2016, but the requests are already piling up for testing resources, both physical and virtual.


"Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball

How to get your question answered on this forum!

Share this post


Link to post
Share on other sites

Hi 

My first post 

from so many days i am trying to make a best image of Windows 10 for our organisation but there are lot of problems i am facing with it

at first i tried audit mode after sysprep cortana cant be click and no where to enable back it. and we got lots of issues on that audit mode so i am making the fresh image with all silent installers using batch file but still there are some softwares need to install manually so i came here today

Share this post


Link to post
Share on other sites

Hi everyone!

 

I know, it is an old post but I just registered on the forum, after all thoses years of using AutoIT.

I made (and still update) a tools based on Microsoft whitepapers to create a recovery environment for Windows 7/8/10 to simplify the create of a factory image (like Dell and other do).

 

My software is a mix of CMD file, PowerShell and AutoIT scripts.

 

You may search for "Anarethos Recovery Tools". I don't know/should post a URL since it is my first post.

 

Just wanted to let you know!

Share this post


Link to post
Share on other sites
5 hours ago, Anarethos said:

You may search for "Anarethos Recovery Tools". I don't know/should post a URL since it is my first post.

Welcome, It seems your only purpose is to "plug" the  product?


SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites

@Jos

Hi! Sorry if it looks like that. I registered yesterday because I planned to ask a question (which I just did in the Support forum) since I am having issue with my said software. While lurking around, I found this thread about Windows 10 imaging and I though my software could be of use to some people installing Windows 10 (and previous) OS so I posted it. I though that a software made in part with AutoIT could please the community!

You can delete my post if you prefer and sorry for that!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By therks
      So I have no example code currently because I'm not sure where to even start.
      We're using the parental controls on the computer and the kids each have their own user profiles with limited time. The problem we're encountering is when their time runs out, or if they just hit Win+L and leave the computer, their games are still running in the background. I was hoping to write up a quick AutoIt script and throw it in a recurring scheduled task to just sign off any of the kid's profiles that's not currently active. I found some suggestions to use "query session" and then "logoff [user]" in the command line (which it seems I could easily automate with AutoIt) but that's only available on Win Pro and this system is running Home (and I even tried copying the query.exe from a Pro system but it errors out). Is there some AutoIt equivalent to the query and logoff functions or am I stuck?
      Edit: I'm adding some clarification to exactly what I'm hoping to get out of this script.
      I'd like to setup a scheduled task that runs outside of the current user (perhaps under the SYSTEM account?) in case NO user is currently active, that will detect which users are currently signed in. If users from a predefined list are not currently active, sign them off entirely.
      So let me give two examples:
      Example #1:
      - I am logged in, but not active (I left my browser open and locked the computer) - Nephew A is logged in, but not active (his time ran out while his game was running and the computer auto-locked) - Nephew B is logged in, and currently playing a game When script runs, ignore my profile (leave it signed in), log out Nephew A (closing his game), and ignore Nephew B because he's actively using the computer. Example #2:
      - I am logged in - Nephew A is logged in - Nephew B is logged in - No users are currently active (Windows is sitting on the choose user / sign in screen) When script runs, ignore my profile, log out Nephew A and Nephew B.  
      I would perceive pseudo code, going as such:
      $aChildUsers = [ 'NephewA', 'NephewB' ] $aUserList = GetSignedInUsers() For $i = 0 to UBound($aUserList)-1 If Not UserIsActive($aUserList[$i]) Then For $j = 0 to UBound($aChildUsers)-1 If $aUserList[$i] = $aChildUsers[$j] Then LogOffUser($aUserList[$i]) Next EndIf Next Obviously, GetSignedInUsers(), UserIsActive(), LogOffUser() are not real functions. What I'm searching for is something of their equivalent.
      Thanks for your time!
    • By WilliamasKumeliukas
      Hi,
      I started this project alone in May 2020 as project in my spare time at work, I'm working for a IT company that started opening their services to residential customers few months ago and now my position in the company kinda drifted in the doom and gloom world of repetitive tasks like: Reinstallation of Windows 10.
      The procedure is very repetitive and I started feeling like being a robot which is the main reason I started this project.
       
      ==============================FAQ==================================
      1. Q: Do you want this project to be accomplished with the usage of AutoIT ONLY or 3rd party tools / Scripts (BATCH / POWERSHELL / VB) ? A: No, if I cannot find a way using AutoIT to accomplish a task I will move to my Plan B which consist of automating an 3rd party tool to accomplish the affected task until a solution is found. 2. Q: What do I get from helping/collaborating in this project? A: I will personally take the responsability to mention you in the credits of this project. 3. Q: If I have more questions, can I ask? A: Certainly! feel free to ask any questions related to this project! 4. Q: What is the main goal of this project? A: Automating Windows 10 configuration without user interaction needed (as much as possible) ______________________________________________________________________________________________________________________________
      Current progression of the project (more will be added in future)
      « Blue = Info || Yellow = Unfinished/Untested || Purple = Could be better || Green = Done ||Red = Not Yet Started »
      ***Very early Stage ***
      Connect Network Attached Storage(NAS) (Tested & Working - AutoIT only)
      Download & Install up to 567 softwares with Auto prediction of text typed  (Tested & Working - using 3rd party tool)
      Change OEM Information (Tested & Working -  AutoIT)
      Disable ScreenSaver (Require testing AutoIT only)
      Change Computer Name (Require testing AutoIT only) 
      Show Computer Information and Smart status on GUI (Tested & Working - AutoIT Only)
      Change .pdf / .pdfxml from Edge to Adobe Reader DC (Tested &Working - using 3rd party tool)
      Change Edge to Google Chrome as Default Browser (Tested & Working - using 3rd party tool)
      Windows Updates (Working - AutoIT only)
      Install Office 365
      Activate Office 365
      Pin to taskbar Excel, Outlook, Word, Chrome (Tested & Working - using 3rd party tool)
             GUI currently featuring the following options :
      - Checkboxes for desired tasks
      Inputs for : SupportUrl, Manufacturer, Model, SupportPhone, SupportHour, OEM Logo path
      -  Redirect ConsoleWrite with timestamped messages in richedit (errors shown separately in red colored text)
                 *** To Do ***
       - Read informations needed for tasks like: OEM, ComputerName, NAS user/password etc... from a file
       - ListView for Windows Updates
       - Probably more
       
      ***  If this project interest you, Reply here This will greatly help me to see if you'd like this project to become real  ***
      ______________________________________________________________________________________________________________________________
      2020.09.21 Update: Since this topic reached over 200+ views without a single interest shown by community, pm me if you're willing to be part of the project and i'll share with you the GitHub project link  
      Best Regards,
      ~WilliamasKumeliukas
    • By paw
      I use SetSoundDevice to control my audio devices but the UI was either
       
      blurry like this:
      or unusable like this:

      so I made this horrible thing to add scaling to the GUI:
      #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Change2CUI=y #AutoIt3Wrapper_Res_HiDpi=y #AutoIt3Wrapper_AU3Check_Parameters=-w 3 -w 4 -w 5 #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Parameters=/sf /sv /rm #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include <File.au3> ;~ _convertGUI("") If $CmdLine[0] <> 0 Then _convertGUI($CmdLine[1]) Func _convertGUI($sFilePath) If $sFilePath <> "" Then Local $aArray = FileReadToArray($sFilePath) Else ;TEST DATA Local $aArray[6] = ['$H_Res_Language = GUICtrlCreateProgress(5, 120, 210 + 25, 480, 20, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_SIMPLE)) ; $CBS_DROPDOWNLIST)', _ 'Local $h_Ok = GUICtrlCreateButton("Ok", 72, 224, 81, 33, 0)', _ 'GUICreate($Warning_TiTle, 700, 310, -1, -1, $WS_SIZEBOX + $WS_SYSMENU + $WS_MINIMIZEBOX)', _ 'GUICtrlCreateLabel("Output type: ", 30, 130, 65, 20) ;, $SS_RIGHT)', _ '$H_FieldNameEdit = GUICtrlCreateEdit($INP_FieldNameEdit, 100,260+25, 500, 150 - 25) ;comment', 'Local $H_CANCEL = GUICtrlCreateGraphic("Cancel", 224, 224, 97, 33, 0)'] EndIf Local $hTimer = TimerInit(), $iGUIElementCount = 0, $sResult = "", $sFileName = "", $sDrive = "", $sDir = "", $sExtension = "" If @Compiled Then _PathSplit($sFilePath, $sDrive, $sDir, $sFileName, $sExtension) $sFileName = StringRegExpReplace($sFilePath, "^.*\\", "") EndIf For $i = 0 To (UBound($aArray) - 1) If StringRegExp($aArray[$i], "GUICtrlCreate|GUICreate") Then $sResult = _splitComma($aArray[$i]) If Not @error Then $aArray[$i] = $sResult $iGUIElementCount += 1 EndIf Next ConsoleWrite("t = " & TimerDiff($hTimer) & " GUI elements = " & $iGUIElementCount & " lines = " & (UBound($aArray) - 1) & @CRLF) If $sFileName <> "" Then Local $hFile = FileOpen("edited." & $sFileName, 2) _FileWriteFromArray("edited." & $sFileName, $aArray) FileClose($hFile) EndIf Exit EndFunc ;==>_convertGUI Func _splitComma($sString) Local $sSplitResult = "", $sTrimmedR = "", $sTrimmedL = "" Local $aSplit = StringSplit($sString, ',') If Not @error Then $sTrimmedR = "" $sTrimmedL = "" For $j = 1 To $aSplit[0] If StringRegExp($aSplit[1], "(?:.GUICtrlCreateGraphic|GUICtrlCreateProgress|GUICtrlCreateSlider|GUICtrlCreateTab|GUICtrlCreateTreeView)") Then If $j = 1 Then While StringLeft($aSplit[$j], 1) <> '(' $sTrimmedL &= StringLeft($aSplit[$j], 1) $aSplit[$j] = StringTrimLeft($aSplit[$j], 1) WEnd $aSplit[$j] = StringTrimLeft($aSplit[$j], 1) EndIf EndIf If $j = $aSplit[0] Then While StringRight($aSplit[$j], 1) <> ')' $sTrimmedR &= StringRight($aSplit[$j], 1) $aSplit[$j] = StringTrimRight($aSplit[$j], 1) WEnd $aSplit[$j] = StringTrimRight($aSplit[$j], 1) EndIf If StringRegExp($aSplit[$j], "[0-9]") And $aSplit[$j] <> -1 And $aSplit[$j] <> 0 And $aSplit[$j] <> 1 And Not StringInStr($aSplit[$j], ')') Then If StringRegExp($aSplit[$j], "\-|\+") Then ;put parenthesis around + or - $aSplit[$j] = '(' & $aSplit[$j] & ")*$g_DPI" Else $aSplit[$j] = $aSplit[$j] & "*$g_DPI" EndIf EndIf If $j < $aSplit[0] Then $sSplitResult &= $aSplit[$j] & ',' ElseIf $j = $aSplit[0] Then $sSplitResult &= $aSplit[$j] & ')' Else $sSplitResult &= $aSplit[$j] EndIf Next If $sTrimmedR <> "" Then $sSplitResult &= StringReverse($sTrimmedR) If $sTrimmedL <> "" Then $sSplitResult = $sTrimmedL & '(' & $sSplitResult Else SetError(1) Return EndIf ConsoleWrite($sSplitResult & @CRLF) Return $sSplitResult EndFunc ;==>_splitComma
      And now it looks good: 
      but it doesn't work on everything, for example the "GUICtrlCreateLabel("Output type: ", 30, 130, 65, 20) ;, $SS_RIGHT)" (from the autoit3wrapper gui)
      because the comment contains a parenthesis and it would break completely if there were variables as parameters..
      Is there some kind of parser around that I could use instead or maybe someone who has already done something like this?
    • By Danyfirex
      Hello!!!  
      In the past I had problems adding an application as a default for an extension in Windows 10. (It was easy in windows 7 using Registry) But since Windows 8 It requires to do some steps more. I wrote a tool (in other programming language) months ago for handling it. But now I just want to share an AutoIt version.
       
      Check on GitHub.
       
       
      Saludos
    • By Jgladden
      Dan - thanks for all that you do - this stuff is great. 
      Hoping you can assist with an issue we are having now that we have moved to Windows 10/Server 2016. The Chrome interactions were working flawlessly until moving over. Now my code fails when attempting to create the session. As you can see, our Chrome install is not in a standard location but I have validated the path to the binary. I have attached some detail below including system info, console output and the chrome log detail. I have tried several recommendations that have seen in various forums but none have made a difference
      Any assistance you can give would be greatly appreciated. 
      Thanks in advance, 
      chrome_Details.txt
×
×
  • Create New...