Solved

SCCM 2012 - How to customize a capture image

Posted on 2014-02-04
18
2,022 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
 
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
Free Trending Threat Insights Every Day

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

 
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

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Recently Microsoft released a brand new function called CONCAT. It's supposed to replace its predecessor CONCATENATE. But how does it work? And what's new? In this article, we take a closer look at all of this - we even included an exercise file for…
OfficeMate Freezes on login or does not load after login credentials are input.
This video Micro Tutorial explains how to clone a hard drive using a commercial software product for Windows systems called Casper from Future Systems Solutions (FSS). Cloning makes an exact, complete copy of one hard disk drive (HDD) onto another d…
The Task Scheduler is a powerful tool that is built into Windows. It allows you to schedule tasks (actions) on a recurring basis, such as hourly, daily, weekly, monthly, at log on, at startup, on idle, etc. This video Micro Tutorial is a brief intro…

757 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

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now