SCCM 2012 - How to customize a capture image

Hello, fellow experts!

I'm looking for some input on a quick way to customize a capture image using SCCM 2012 R2.

To start, I already have several task sequences developed:

1) Capture Image Task Sequence
2) OS Deployment Task Sequence -- used to deploy both Windows 7 and install all software in a single go.
3) "Software only" task sequence -- used to install all applications on an OS that has been manually installed.

Currently, we're having SCCM install the OS in a PXE boot, and then installing each application one at a time. It goes through this process on each PC we deploy.

What I'm looking to do is make our OS imaging process faster and more efficient by including the software that we know that will be on every PC on the capture image, so that the install process does not need to do it each and every time.

When I launch the "Capture Image" task sequence, it boots into Windows 7 so that we can customize what we need. What I'd like to somehow accomplish is launching the "software only" task sequence that I've set up in the capture image. However, SCCM does not seem to detect the PC as an "unknown" PC even though it's not in AD or Config Manager.

I read that in order to capture an image, the PC must not be joined to a domain. I've tried that anyway as well, and it doesn't work.

Aside from manually installing each application, is there a way to deploy a task sequence to a capture image, or can anyone suggest a better way of accomplishing and managing this?
LVL 1
FirstcomAsked:
Who is Participating?
 
Michael PfisterConnect With a Mentor Commented:
Copy the TS steps for your 30 applications to the Build task sequence. There is no way to run another TS within a TS. Insert each software package right after the Setup Configuration Manager Client.

1)  Let the Build sequence run and you get a system with your packages deployed.

2) Do manual adjustments if required.

3) Run the capture sequence
Untitled.png
0
 
Michael PfisterCommented:
There are 4 task sequence steps neccessary to capture the machine:

- Join Domain or Workgroup (join it to a non-existing workgroup)
- Prepare ConfigMgr Client for Capture
- Prepare Windows for Capture
- Capture the Reference Machine

I've added these steps after my regular build sequence and it works fine.
Just note some software needs special steps to "survive" sysprep, i.e. virus scan
Also DO NOT activate Office/Windows before capturing.

HTH
0
 
FirstcomAuthor Commented:
mpfister,

I have no problem creating a basic capture. My problem is with launching a task sequence during the capture. My original post details my exact problem.
0
Improved Protection from Phishing Attacks

WatchGuard DNSWatch reduces malware infections by detecting and blocking malicious DNS requests, improving your ability to protect employees from phishing attacks. Learn more about our newest service included in Total Security Suite today!

 
Michael PfisterCommented:
Ok, basically my "Build TS" looks like this:

- Install Windows 7 OS, Join domain, SCCM Client etc.
- Install all software thats on all machines (probably what you have in 3) "Software only")
- Capture it
0
 
FirstcomAuthor Commented:
Can you actually do this in the middle of creating a capture image? It was my understanding that a capture image pre-requisite is that it can't be part of a domain.

For some reason when I join it to a domain, Config Manager doesn't pick up on any assigned deployments.
0
 
Michael PfisterCommented:
Therefore these steps right before the capture

-  Join Domain or Workgroup (join it to a non-existing workgroup)

This step removes the Windows machine from the domain.

- Prepare ConfigMgr Client for Capture

This resets the SCCM client

- Prepare Windows for Capture

This runs Sysprep on the Windows machine
0
 
FirstcomAuthor Commented:
I'm attempting to do this. Here's what I'm currently running into:

I load the capture image via PXE boot. After downloading the OS and capturing the reference machine, it launches the OS - presumably to make whatever changes I need to make on the capture image. By default, it's part of a non-existent workgroup, and Config Manager is installed. However, it doesn't show that any software is available to be installed, even if I have a task sequence set to be available to Unknown PCs. One thing I notice is that in the Config Manager section of Control Panel, there are no site settings, etc. When I attempt to set them, it says it can't find any servers.

I'm not sure why Config Manager isn't working and why it's not showing any software available under those circumstances.

So as a troubleshooting step, I try and join it to the domain. Active Directory picks up on it, but when I do a "System Discovery", Config Manager doesn't seem to discover it. If I add it in manually via machine name and MAC address and try to deploy, that doesn't help either.

What's the missing piece?
0
 
FirstcomAuthor Commented:
I should also note that when I try to join our domain, Windows wants me to reboot. However, if I attempt to reboot it will try and capture the image.

I think the ideal situation here is to figure out how to get the capture image to work with ConfigManager without being a part of our domain, but I am open to ideas.
0
 
Michael PfisterCommented:
you are doing it in the wrong order. Capture is the last step of the task sequence
0
 
FirstcomAuthor Commented:
Attached is a screen shot of the task sequence being used to capture the image.
Untitled.png
0
 
Michael PfisterCommented:
Insert your additional software after setup configuration manager before the capture
0
 
FirstcomAuthor Commented:
That's precisely what I'm trying to do. We have about 30 applications that need to be added to the capture image and I've developed a task sequence to install software, but the problem is that Config Manager isn't showing any software to be installed when there should be. Please see my prior comments for more information on this problem.
0
 
FirstcomAuthor Commented:
Thanks, mpfister. I'm making progress. I've added the software installation tasks to the sequence. Any time a "package" installs, it installs okay, but it seems like any time an "application" installs, it fails.

I suspect this has to do with it not being on the domain. Is it allowed to join a domain during the task sequence, or should I keep it as part of a non-existent workgroup but somehow allow the client to have admin rights to the config manager server to install software? If so, where are these settings at?

What suggestion would you have in this case?
0
 
FirstcomAuthor Commented:
If you have any other suggestions on why applications may be failing to install, please let me know.
0
 
Michael PfisterCommented:
No problem in joining the domain, as long as you join back to workgroup before capture.

When the application fails on your PC, press F8 (hope you didn't disable it).
Go to C:\Windows\CCM\Logs\SMSTSlog (if I remember correctly)
Have a look at SMSTS.log for error messages.
0
 
FirstcomAuthor Commented:
When I update the task sequence to join the domain, the applications install.

However, when it gets to the step "Prepare Config Manager for Capture" it bombs when it runs the sysprep command, before it even gets into the OS (I was just going to remove it from the domain there).

I am trying to change it back to a workgroup via the task sequence by including another "Apply Network Settings" before it preps anything. Will let you know.

Thanks for your suggestions and input thus far!
0
 
FirstcomAuthor Commented:
It failed

It failed when I added the "Apply Network Settings" task to take it off the domain and put it on a workgroup before capturing the image... Here's the log. Can you advise? It doesn't seem to like running it twice... the error says "in use"


<![LOG[Sending StatusMessage]LOG]!><time="09:09:58.927+360" date="02-06-2014" component="TSManager" context="" type="1" thread="3392" file="libsmsmessaging.cpp:4023">
<![LOG[Setting message signatures.]LOG]!><time="09:09:58.943+360" date="02-06-2014" component="TSManager" context="" type="0" thread="3392" file="libsmsmessaging.cpp:1295">
<![LOG[Setting the authenticator.]LOG]!><time="09:09:58.943+360" date="02-06-2014" component="TSManager" context="" type="0" thread="3392" file="libsmsmessaging.cpp:1325">
<![LOG[CLibSMSMessageWinHttpTransport::Send: URL: configmanager.firstcom.local:80  CCM_POST /ccm_system/request]LOG]!><time="09:09:58.943+360" date="02-06-2014" component="TSManager" context="" type="1" thread="3392" file="libsmsmessaging.cpp:8604">
<![LOG[Request was successful.]LOG]!><time="09:09:58.958+360" date="02-06-2014" component="TSManager" context="" type="0" thread="3392" file="libsmsmessaging.cpp:8939">
<![LOG[Updated security on object C:\_SMSTaskSequence.]LOG]!><time="09:09:58.974+360" date="02-06-2014" component="TSManager" context="" type="1" thread="3392" file="utils.cpp:1704">
<![LOG[Set a global environment variable _SMSTSNextInstructionPointer=42]LOG]!><time="09:09:58.974+360" date="02-06-2014" component="TSManager" context="" type="0" thread="3392" file="executionenv.cxx:668">
<![LOG[Set a TS execution environment variable _SMSTSNextInstructionPointer=42]LOG]!><time="09:09:58.974+360" date="02-06-2014" component="TSManager" context="" type="0" thread="3392" file="executionenv.cxx:386">
<![LOG[Set a global environment variable _SMSTSInstructionStackString=41]LOG]!><time="09:09:58.974+360" date="02-06-2014" component="TSManager" context="" type="0" thread="3392" file="executionenv.cxx:668">
<![LOG[Set a TS execution environment variable _SMSTSInstructionStackString=41]LOG]!><time="09:09:58.974+360" date="02-06-2014" component="TSManager" context="" type="0" thread="3392" file="executionenv.cxx:414">
<![LOG[Save the current environment block]LOG]!><time="09:09:58.974+360" date="02-06-2014" component="TSManager" context="" type="0" thread="3392" file="executionenv.cxx:833">
<![LOG[Successfully save execution state and environment to local hard disk]LOG]!><time="09:09:59.021+360" date="02-06-2014" component="TSManager" context="" type="1" thread="3392" file="engine.cxx:254">
<![LOG[Start executing an instruction. Instruction name: Apply Network Settings. Instruction pointer: 42]LOG]!><time="09:09:59.021+360" date="02-06-2014" component="TSManager" context="" type="1" thread="3392" file="engine.cxx:116">
<![LOG[Set a global environment variable _SMSTSCurrentActionName=Apply Network Settings]LOG]!><time="09:09:59.021+360" date="02-06-2014" component="TSManager" context="" type="0" thread="3392" file="executionenv.cxx:668">
<![LOG[Set a global environment variable _SMSTSNextInstructionPointer=42]LOG]!><time="09:09:59.021+360" date="02-06-2014" component="TSManager" context="" type="0" thread="3392" file="executionenv.cxx:668">
<![LOG[Set a local default variable OSDJoinPassword]LOG]!><time="09:09:59.021+360" date="02-06-2014" component="TSManager" context="" type="0" thread="3392" file="executionenv.cxx:700">
<![LOG[Set a local default variable OSDJoinAccount]LOG]!><time="09:09:59.036+360" date="02-06-2014" component="TSManager" context="" type="0" thread="3392" file="executionenv.cxx:700">
<![LOG[Set a local default variable OSDNetworkJoinType]LOG]!><time="09:09:59.036+360" date="02-06-2014" component="TSManager" context="" type="0" thread="3392" file="executionenv.cxx:700">
<![LOG[Set a local default variable OSDWorkgroupName]LOG]!><time="09:09:59.036+360" date="02-06-2014" component="TSManager" context="" type="0" thread="3392" file="executionenv.cxx:700">
<![LOG[Set a global environment variable _SMSTSLogPath=C:\WINDOWS\CCM\Logs\SMSTSLog]LOG]!><time="09:09:59.036+360" date="02-06-2014" component="TSManager" context="" type="0" thread="3392" file="executionenv.cxx:668">
<![LOG[Expand a string: osdnetsettings.exe configure]LOG]!><time="09:09:59.036+360" date="02-06-2014" component="TSManager" context="" type="0" thread="3392" file="executionenv.cxx:782">
<![LOG[Expand a string: ]LOG]!><time="09:09:59.036+360" date="02-06-2014" component="TSManager" context="" type="0" thread="3392" file="executionenv.cxx:782">
<![LOG[Command line for extension .exe is "%1" %*]LOG]!><time="09:09:59.036+360" date="02-06-2014" component="TSManager" context="" type="0" thread="3392" file="commandline.cpp:228">
<![LOG[Set command line: osdnetsettings.exe configure]LOG]!><time="09:09:59.036+360" date="02-06-2014" component="TSManager" context="" type="0" thread="3392" file="commandline.cpp:731">
<![LOG[Start executing the command line: osdnetsettings.exe configure]LOG]!><time="09:09:59.036+360" date="02-06-2014" component="TSManager" context="" type="1" thread="3392" file="instruction.cxx:722">
<![LOG[!--------------------------------------------------------------------------------------------!]LOG]!><time="09:09:59.036+360" date="02-06-2014" component="TSManager" context="" type="1" thread="3392" file="instruction.cxx:751">
<![LOG[Expand a string: WinPEandFullOS]LOG]!><time="09:09:59.036+360" date="02-06-2014" component="TSManager" context="" type="0" thread="3392" file="executionenv.cxx:782">
<![LOG[Executing command line: osdnetsettings.exe configure]LOG]!><time="09:09:59.036+360" date="02-06-2014" component="TSManager" context="" type="1" thread="3392" file="commandline.cpp:827">
<![LOG[==============================[ OSDNetSettings.exe ]===========================]LOG]!><time="09:09:59.395+360" date="02-06-2014" component="OSDNetSettings" context="" type="1" thread="652" file="main.cpp:134">
<![LOG[Command line: "osdnetsettings.exe" configure]LOG]!><time="09:09:59.395+360" date="02-06-2014" component="OSDNetSettings" context="" type="1" thread="652" file="main.cpp:135">
<![LOG[Setting %SystemRoot% to "C:\WINDOWS"]LOG]!><time="09:09:59.426+360" date="02-06-2014" component="OSDNetSettings" context="" type="0" thread="652" file="smiinterface.cpp:819">
<![LOG[Launching command shell.]LOG]!><time="09:14:11.516+360" date="02-06-2014" component="OSDSetupHook" context="" type="1" thread="1632" file="debugwindow.cpp:202">
<![LOG[Windows station: WinSta0]LOG]!><time="09:14:11.516+360" date="02-06-2014" component="OSDSetupHook" context="" type="1" thread="1632" file="utils.cpp:43">
<![LOG[Desktop: Default]LOG]!><time="09:14:11.516+360" date="02-06-2014" component="OSDSetupHook" context="" type="1" thread="1632" file="utils.cpp:62">
<![LOG[executing command: C:\WINDOWS\system32\cmd.exe /k]LOG]!><time="09:14:11.516+360" date="02-06-2014" component="OSDSetupHook" context="" type="1" thread="1632" file="debugwindow.cpp:63">
<![LOG[executed command: C:\WINDOWS\system32\cmd.exe /k]LOG]!><time="09:14:11.516+360" date="02-06-2014" component="OSDSetupHook" context="" type="1" thread="1632" file="debugwindow.cpp:80">
<![LOG[m_spSettingsEngine->LoadStore(0x00000001), HRESULT=80070020 (e:\nts_sccm_release\sms\framework\osdcore\smiinterface.cpp,830)]LOG]!><time="09:18:31.128+360" date="02-06-2014" component="OSDNetSettings" context="" type="0" thread="652" file="smiinterface.cpp:830">
<![LOG[initialize( pszWindowsDir, wProcessorArchitecture, false ), HRESULT=80070020 (e:\nts_sccm_release\sms\framework\osdcore\smiinterface.cpp,740)]LOG]!><time="09:18:31.128+360" date="02-06-2014" component="OSDNetSettings" context="" type="0" thread="652" file="smiinterface.cpp:740">
<![LOG[m_pSMIInterface->initFromWindowsDir( pszSourceDir, wProcessorArchitecture ), HRESULT=80070020 (e:\nts_sccm_release\sms\framework\osdcore\xmlanswerfile.cpp,571)]LOG]!><time="09:18:31.144+360" date="02-06-2014" component="OSDNetSettings" context="" type="0" thread="652" file="xmlanswerfile.cpp:571">
<![LOG[pXMLSysprepAnswerFile->Init( sAnswerFile, sTargetSystemDir, wProcessorArchitecture ), HRESULT=80070020 (e:\nts_sccm_release\sms\framework\osdcore\infanswerfile.cpp,1395)]LOG]!><time="09:18:31.144+360" date="02-06-2014" component="OSDNetSettings" context="" type="0" thread="652" file="infanswerfile.cpp:1395">
<![LOG[Failed to initialize unattend answer file C:\WINDOWS\panther\unattend\unattend.xml. Code 0x80070020]LOG]!><time="09:18:31.144+360" date="02-06-2014" component="OSDNetSettings" context="" type="3" thread="652" file="infanswerfile.cpp:1395">
<![LOG[SysprepAnswerFile::InitSysprepAnswerFile( pSysprepAnswerFile ), HRESULT=80070020 (e:\nts_sccm_release\sms\framework\osdcore\infanswerfile.cpp,330)]LOG]!><time="09:18:31.144+360" date="02-06-2014" component="OSDNetSettings" context="" type="0" thread="652" file="infanswerfile.cpp:330">
<![LOG[Failed to initialize Sysprep answer file (0x80070020)]LOG]!><time="09:18:31.144+360" date="02-06-2014" component="OSDNetSettings" context="" type="3" thread="652" file="infanswerfile.cpp:330">
<![LOG[OSD::Utility::BaseAnswerFile::CreateAnswerFile( pAnswerFile ), HRESULT=80070020 (e:\nts_sccm_release\sms\client\osdeployment\osdnetsettings\main.cpp,165)]LOG]!><time="09:18:31.144+360" date="02-06-2014" component="OSDNetSettings" context="" type="0" thread="652" file="main.cpp:165">
<![LOG[Failed to initialize answer file]LOG]!><time="09:18:31.144+360" date="02-06-2014" component="OSDNetSettings" context="" type="3" thread="652" file="main.cpp:165">
<![LOG[OSDNetSettings finished: 0x80070020]LOG]!><time="09:18:31.144+360" date="02-06-2014" component="OSDNetSettings" context="" type="1" thread="652" file="main.cpp:192">
<![LOG[Process completed with exit code 2147942432]LOG]!><time="09:18:31.144+360" date="02-06-2014" component="TSManager" context="" type="1" thread="3392" file="commandline.cpp:1123">
<![LOG[!--------------------------------------------------------------------------------------------!]LOG]!><time="09:18:31.144+360" date="02-06-2014" component="TSManager" context="" type="1" thread="3392" file="instruction.cxx:804">
<![LOG[Failed to run the action: Apply Network Settings.
The process cannot access the file because it is being used by another process. (Error: 80070020; Source: Windows)]LOG]!><time="09:18:31.144+360" date="02-06-2014" component="TSManager" context="" type="3" thread="3392" file="instruction.cxx:895">
0
 
Michael PfisterCommented:
Why Apply Network Settings?
Use "Join Domain or Workgroup " and at the parameters enter a non-existing workgroup
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.