Help with Win10 Driver injection
-
[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
and
???
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 Yes the driver files are in the C:\windows\drivers folder on the target machine. I am using fog to run that script and it transfers them over from my FOG server onto the target machine. All drivers are stored on my FOG machine and they are transferred over during sysprep. It’s just installing them once sysprep transfers them over, that’s the issue. It’s moving them and doing everything else, just not installing them once on the target machine in the drivers folder.
-
@kyle.heath The answer then was in my previous post.
Look at your unattend file. Where are you telling the OOBE process to look for drivers? This needs to be consistent to where the drivers really are.
Also a comment on your drivers because you didn’t mention what hardware you are using. These drivers need to be in inf form and not compressed installers (i.e. in .exe form). The compressed installers will not execute during oobe.
-
It looked like you added that section to the offlineServicing area, not the OOBE. Right now I added this to the offlineServicing area.
Under oobeSystem I only have
I’m guessing I need to add something additional to the oobeSystem area in my unattend file. My drivers are added to C:\Windows\Drivers in this folder format. Will this not work? Do i need to go into each folder and just add the .exe to my FOG Server? I’m new to this, so any help is appreciated.
-
@kyle.heath According to the prior post, you have added the second part to your xml file. This would mean your OOBE system is looking at driver path c:\windows\DRV?
Anyway you could post the full unattend (blocking out passwords and product keys as/where required?)
-
@Tom-Elliott I put C:\Windows\Drivers in my unattend, why would it look at C:\Windows\DRV ??
-
@Tom-Elliott Here is the full unattend
<?xml version="1.0" encoding="utf-8"?> <unattend xmlns="urn:schemas-microsoft-com:unattend"> <settings pass="generalize"> <component name="Microsoft-Windows-PnpSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <DoNotCleanUpNonPresentDevices>true</DoNotCleanUpNonPresentDevices> <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> </component> <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SkipRearm>1</SkipRearm> </component> </settings> <settings pass="specialize"> <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ExtendOSPartition> <Extend>true</Extend> </ExtendOSPartition> </component> <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SkipAutoActivation>true</SkipAutoActivation> </component> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ComputerName>*</ComputerName> <CopyProfile>true</CopyProfile> <RegisteredOrganization>Microsoft</RegisteredOrganization> <RegisteredOwner>AutoBVT</RegisteredOwner> <ShowWindowsLive>false</ShowWindowsLive> <TimeZone>Eastern Standard Time</TimeZone> <ProductKey>Windows 10 Product Key</ProductKey> </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" 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</InputLocale> <SystemLocale>en-us</SystemLocale> <UILanguage>en-us</UILanguage> <UserLocale>en-us</UserLocale> </component> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" 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> <Password> <Value>Password</Value> <PlainText>false</PlainText> </Password> <Enabled>true</Enabled> <LogonCount>1</LogonCount> <Username>CFA</Username> </AutoLogon> <OOBE> <HideEULAPage>true</HideEULAPage> <NetworkLocation>Work</NetworkLocation> <ProtectYourPC>1</ProtectYourPC> </OOBE> <UserAccounts> <AdministratorPassword> <Value>Password</Value> <PlainText>false</PlainText> </AdministratorPassword> <LocalAccounts> <LocalAccount wcm:action="add"> <Password> <Value>Password</Value> <PlainText>false</PlainText> </Password> <Description>Local Administrator</Description> <DisplayName>CFA</DisplayName> <Group>Administrator</Group> <Name>CFA</Name> </LocalAccount> </LocalAccounts> </UserAccounts> </component> </settings> <settings pass="offlineServicing"> <component name="Microsoft-Windows-PnpCustomizationsNonWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <DriverPaths> <PathAndCredentials wcm:action="add" wcm:keyValue="1"> <Path>C:\Windows\Drivers</Path> </PathAndCredentials> </DriverPaths> </component> </settings> <cpi:offlineImage cpi:source="wim:c:/users/kyle.heath/desktop/windows%2010/sources/install.wim#Windows 10 Education" xmlns:cpi="urn:schemas-microsoft-com:cpi" /> </unattend>
-
@kyle.heath said in FOG Post install script for Win Driver injection:
@Tom-Elliott I put C:\Windows\Drivers in my unattend, why would it look at C:\Windows\DRV ??
Because the picture you previously posted clearly says c:\windows\drv
-
-
@george1421 In my unattend or in the script picture I posted?
-
@kyle.heath The picture from your initial post.
But that aside. Are you syspreping the reference system? When you invoke the sysprep command are you pointing to the xml file you referenced below?
This process does work, I’m using it today (still).
-
Yes I’m using these two commands on my reference system.
cd c:\windows\system32\sysprep
sysprep.exe /generalize /oobe /shutdown /unattend:unattend.xmlI then select upload task in FOG and upload my image.
Right now I am using amd64_Microsoft-Windows-PnpCustomizationNonWinPE_Neutral. Should I be using amd64_Microsoft-Windows-PnpCustomizationWinPE_Neutral instead. I’m still confused as to how my unattend file says DRV when I have it saying Drivers
-
@george1421 Also those 2 pictures I posted on my initial post are YOUR pictures from the beginning of this. I referenced those when I was asking if I needed to add both of them to my unattend.
-
First I would put the unattend.xml file in C:\Windows\Panther windows will look there first. Then when you call sysprep include the full path to the unattend.xml file. There is no guarantee that will be the current directory during instllatio. Are you sure other elements of your unattend.xml file processing? Is it just driver injection that is failing?
You are using the right “amd64_Microsoft-Windows-PnpCustomizationNonWinPE_Neutral” location. The other one "amd64_Microsoft-Windows-PnpCustomizationWinPE_Neutral " is used for the winpe environment as if you were using MDT to deploy the image to the target computer. .
-
@george1421 Yes other parts of my unattend are working…the main thing being windows activation. I had my unattend in C:\Windows\System32\Sysprep. I can move it to C:\Windows\Panther if you think that makes a difference. It’s just the driver injection that’s failing. It’s moving them to the computer and putting them in a C:\Windows\Drivers folder, but not installing. I have them on the FOG server in folders. Do I need to remove the .exe from each folder (network, storage, input, audio) and put only that on the FOG Server.
-
@kyle.heath OK, what hardware are you deploying to?
Also please show me a screen shot or directory tree of how you have your drivers installed in c:\windows\drivers. I’m interested in seeing if your have the drivers in inf format.
-
@george1421 I’m deploying drivers to a Dell Latitude 3570. Here is a SS of what it looks like after the image is deployed. The drivers are there in folders, but they are not installed. I know this because I pointed a missing driver to this folder and it installed fine. It’s just not doing it during sysprep for some reason.
-
@kyle.heath I think, then, what you’re running into (possibly?) is the cart before the horse.
I ran into similar issues, where the installation would run through and install some drivers, but not all. Things like USB devices were not installing because the chipset was being installed after the usb device was installed.
Of course, there’s better ways to handle this, but my fix was to have the setup script run through the installation twice by running dpinst within the directory.
-
@Tom-Elliott So in the script I would need to have it run twice using dpinst…sorry but I’ve never used dpinst so I’m not sure what it is. How would I go about doing this?
-
@kyle.heath I don’t have an example, but i had to find the dpinst binary.
I placed it in the directory where the drivers were found.
I needed a dpinst.xml file too (which just told the dpinst binary how to run without my having to intervene).