Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

SCCM 2012 - How to customize a capture image

Posted on 2014-02-04
18
2,099 Views
Last Modified: 2014-02-07
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?
0
Comment
Question by:Firstcom
  • 10
  • 8
18 Comments
 
LVL 28

Expert Comment

by:Michael Pfister
ID: 39835167
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
 
LVL 1

Author Comment

by:Firstcom
ID: 39835465
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
 
LVL 28

Expert Comment

by:Michael Pfister
ID: 39835752
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
Netscaler Common Configuration How To guides

If you use NetScaler you will want to see these guides. The NetScaler How To Guides show administrators how to get NetScaler up and configured by providing instructions for common scenarios and some not so common ones.

 
LVL 1

Author Comment

by:Firstcom
ID: 39835767
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
 
LVL 28

Expert Comment

by:Michael Pfister
ID: 39835832
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
 
LVL 1

Author Comment

by:Firstcom
ID: 39836034
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
 
LVL 1

Author Comment

by:Firstcom
ID: 39836055
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
 
LVL 28

Expert Comment

by:Michael Pfister
ID: 39836063
you are doing it in the wrong order. Capture is the last step of the task sequence
0
 
LVL 1

Author Comment

by:Firstcom
ID: 39836073
Attached is a screen shot of the task sequence being used to capture the image.
Untitled.png
0
 
LVL 28

Expert Comment

by:Michael Pfister
ID: 39836097
Insert your additional software after setup configuration manager before the capture
0
 
LVL 1

Author Comment

by:Firstcom
ID: 39836111
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
 
LVL 28

Accepted Solution

by:
Michael Pfister earned 500 total points
ID: 39836263
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
 
LVL 1

Author Comment

by:Firstcom
ID: 39837360
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
 
LVL 1

Author Comment

by:Firstcom
ID: 39837767
If you have any other suggestions on why applications may be failing to install, please let me know.
0
 
LVL 28

Expert Comment

by:Michael Pfister
ID: 39837991
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
 
LVL 1

Author Comment

by:Firstcom
ID: 39838902
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
 
LVL 1

Author Comment

by:Firstcom
ID: 39839072
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
 
LVL 28

Expert Comment

by:Michael Pfister
ID: 39839099
Why Apply Network Settings?
Use "Join Domain or Workgroup " and at the parameters enter a non-existing workgroup
0

Featured Post

MIM Survival Guide for Service Desk Managers

Major incidents can send mastered service desk processes into disorder. Systems and tools produce the data needed to resolve these incidents, but your challenge is getting that information to the right people fast. Check out the Survival Guide and begin bringing order to chaos.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

By default the complete memory dump option is disabled in windows . If we want to enable the complete memory dump for a diagnostic purpose, we have a solution for it. here we are using the registry method to enable this.
A quick guide on how to use Group Policy to create a custom power plan and set it active on Windows 7.
In this Micro Tutorial viewers will learn how to use Boot Corrector from Paragon Rescue Kit Free to identify and fix the boot problems of Windows 7/8/2012R2 etc. As an example is used Windows 2012R2 which lost its active partition flag (often happen…
The viewer will learn how to successfully download and install the SARDU utility on Windows 7, without downloading adware.

839 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question