Help with Win10 Driver injection

  • Moderator

    [moderator note] This thread was moved (poorly by me) from a tutorial to technical help since this post went beyond the scope of the tutorial. Here is the original post by @kyle-heath
    Thanks for all of this…great help while I’m making a windows 10 image. I do have 1 question. When you say this script will not work and you need to add this to the unattend file. Do I need to add




    I’ve added the one 2nd picture to my unattend and I have a script written that copies all of the drivers to a drivers folder on my target machine, but they are not installing during sysprep. Below is the script. If anyone knows how to get the drivers to install after they are moved onto the target machine, I would greatly appreciate it. Thanks!


    [moderate note] Here is my first response to kyle’s question. If I would have forked the topic correctly his post would have been at the top of this thread.

    @kyle.heath First observation is that you are copying the files to c:\windows\drivers. Are the driver files there?

    In the unattend file you are referencing c:\windows\drv for your driver files.

    Which is it? Where is the true location of your driver files?

    With Win10 the OOBE setup does not look at the registry key for the driver path as it did with Win7 (which actually was a hold over from Win XP and not the recommended way of loading drivers. But it was still supported, so we go to what we know).

  • @george1421

    I just want to see what’s easier to maintain, ex fog client vs using sed command. Where it says computer name, do I replace it with a computer name I want to start? Ex NY-WB- is what I would like to start as a prefix

  • @george1421

    George, I’m 90% good with deployment. I was able to get a working script to deploy the Lenovo drivers. I saw how to use deploy bug to see where it was failing.I ended up using an older script you put. So here’s my issues.

    • I used the fog client and joined the domain successfully, this is windows 10 build 1709. I saw last min where you said to add the pinstall command in the setup complete.exe to install the drivers. How do I use the sed command to copy another setupcomplete.cmd from the fog server instead of reimagining? I looked at some examples, wanted to test using the sed command to copy the updated unattend.xml and setupcomplete.exe, but not sure where to put it in for example, file. I get syntax errors.

  • @george1421 ok, now I understand. I just made that change. I had it set on no because I was following deployment research website. I’m going to try that approach. I’ll post up some updates when I get everything accomplished. Thanks again for guiding me through this.

  • Moderator

    @Jamaal said in Help with Win10 Driver injection:


    If you set the above step to NO, then at the end of the MDT process you will get a status message if your MDT deployment was successful or not. I would enable that to ensure everything deployed correctly, this may be important to know.

    I can only tell you how I use MDT and FOG. After the final status is displayed then the MDT lite touch process is done for me. If I need to make any final system adjustments or add applications that might need to be added, but don’t support unattended installs I would do it at this point. When I feel the system is ready for FOG capture (still without rebooting after MDT), I go to the location where my MDT copy files task sequence is location and run the DoSysPrep.cmd batch file. That batch file copies my custom unattend.xml file to the panther directory, moves setupcomplete.cmd to its location, copies a few other ini files to their proper location and then calls sysprep.exe with the proper commands to run sysprep and power off the system. Then I capture with FOG.

    The pause in the process between the end of MDT and start of DoSysPrep.cmd gives me a chance to make any final adjustments to the system as well as take a virtual machine snapshot of the system before running sysprep. That way if I need to fix something discovered after FOG deployment, i can just restore the VM to the point before sysprep, fix the issue and then run the DoSysPrep.cmd batch file again and recapture with FOG. I don’t need to take the time to rebuild using MDT since I have a snapshot of the system before sysprep. That is my workflow.

  • @george1421 I’m a little confused, sorry. Should I remove the task from MDT to not sysprep the machine and run a custom script to sysprep & use a custom unattend.xml? I have these in the bottom of my rules page, not sure where to see the closing status message.


  • Moderator

    @Jamaal When I create my golden image, I let MDT build it and then after the closing status message, I immediate go to my scripts directory on the target computer and run the sysprep script I copied over using an MDT task sequence. I don’t normally reboot the golden image before sysprep and FOG capture. I NEVER sysprep an image more than once. If I need to do that I will fix what ever reason and then reimage with MDT.

  • @george1421 or should I let the VM boot after MDT deployment, create a cmd script to sysprep again and also point the setupcomplete.cmd and unattended.xml to their correct spots?

  • @george1421 George, I started playing around with the copy script and worked good copying to the Windows 10 client, but I didn’t do fog as yet. I just booted the VM after MDT to test it out and got through setupcomplete.cmd to copy over, but looks like the unattend.xml didn’t make the changes. Any ideas? I didn’t see the c:\drivers folder create even though I used WSIM to add the line? Do I need to call the command to create the folder drivers as well?

  • @george1421 hey George, so I see what the problem was with WSUS. I thought the content folder can be put anywhere since it said remote path. I tried my NAS both network path and iscsi, but still locks up the downloads. I did research and said it’s not supported in a network share, so I put it back on the local.

    Now for the Office 2013 updates, I found this online to extract the service pack 1 and I was able to get the updates faster compared to WSUS.

    I’m working on the unattend file and will work on copying files this weekend. The offline script I was following sucked and didn’t work no matter what I tried. I’ll keep you posted. Thanks for leading me in the right direction.

  • Moderator

    @Jamaal The c:\windows\panther folder is the first place OOBE looks for the unattend.xml file. You really can place it anywhere if you call out the specific directory when you run sysprep. But I’ve never been one to push luck. I place the file in the Panther directory and call out the specific path when sysprep is run.

    As for how wsus is setup for win10, I’d have to look at the wsus server for that.

  • @george1421 and when I get to this process on copying files, where should I tell Fog to copy the unattend.xml? Into c:\windows\system32\sysprep? Or the panther folder?

  • @george1421 ok, I’m gonna try that route for the updates. Just curious, what classifications do you use in WSUS for Windows 10? I selected Windows 10 and windows 10 updates and latest build I think, don’t remember.

  • Moderator

    @Jamaal For windows 10, WSUS works just fine, updates in less that 20 minutes. For Windows 7 it would take hours to run. I think my vm for win10 has 4 vCPU and 6GB of ram.

    For packages like office 2013, I do use wsus offline to download the office updates, but then I place them in the application’s update folder so that when office is installed it also installs all of the updates automatically. That won’t address your slow update issue, but it is a way to speed up the wsus online update process.

  • @george1421 said in Help with Win10 Driver injection:


    yea it’s driving me nuts here, lol. The reason I was gonna go this route was because for some reason, the WSUS is taking forever to download the updates. I let it run for a few hours and I also noticed some errors in WSUS it was trying to download Office 2013 Service pack 1. Would you know on how to speed that process? I have Server 2012 R2 and tried things like increasing the Application Pool that I saw online on IIS. I’ll play around with the offline again shortly as well.

  • Moderator

    @Jamaal I don’t use the offline wsus package during MDT deployment. I just have MDT connect to my local WSUS server and get the updates from there.

    So it maps the Y: drive no problem?

    at the end of the MDT run, can you manually map the Y drive as the deployment user then run the following command via a command prompt? “Y:\DeploymentShare\Scripts\client\update.bat”? Where does it error out in the process?

    but looking at the code how does it get from this

    cscript.exe "%SCRIPTROOT%\ZTIConnect.wsf" /uncpath:\\\DeploymentShare\Scripts\client

    to knowing what the Y: drive is and that the files are in


    Also if the mapping command was magically picking the Y: drive then the path root isn’t consistent


    So \\DeploymentShare\Scripts\client would equal Y:

    Then the execution path is


    So the real path on the server would be


    Not logical

  • @george1421


    Not sure if you’ve done this with MDT, but I’m having issues using WSUS Offline updates for Windows 10 Ver 1709. I got a reference from IT Bros, but still errors out when updating with updates.

    I even tried looking at the YouTube link, but still fails, won’t run Windows Offline install, but will mount the drive with no issues. Do you know another way?

  • @george1421 lol, yea sometimes I slip a few more questions last minute :) ok, I heard of them and I’ll start working on things. I’ll reply back in a few days or so letting you know how I made out. Thanks again for your help.

  • Moderator

    @Jamaal Hey wait, that was more than just one more question. ;-)

    sysprepper.cmd is a batch file I created to do last minute clean up just before sysprepping the system. That way all of the clean up steps are done every time the same way for automation. The batch file is manually run. The last command in sysprepper is to call sysprep and power off the computer.

    To copy all of the specific files (scripts, logos, pictures, config files) from MDT to the target computer during reference image build I used the instructions from here: That way all of our required scripts are placed on the target computer during reference image build.

    There are actually 2 unattend.xml files being used here, but they are used at different times. The first unattend.xml file is created by MDT for the specific reason to build the reference image. MDT manages this unattend.xml file. The second unattend.xml file is used during sysprep and oobe of the target computer after FOG places the image on the target computer. This unattend.xml file may have instructions about creating local accounts, connecting to AD, target system naming all things you need to avoid OOBE asking questions during the imaging process. This is the unattend.xml file you create to customize the target computer to your company’s needs.

  • @george1421 Ok, I’ll work on getting them automated. One more question. So the file you’re referring to called sysprepper.cmd is what you built to copy the files? Or can I look it up online to create that file? Where in the task sequence do I put it in to copy those files? Can you send a screen shot for example? I’m assuming copying the custom unattended.xml file replaces the one MDT uses during deployment?