Solved

SCCM 2012 - How to customize a capture image

Posted on 2014-02-04
18
2,055 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
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

 
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

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.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Access_log 17 100
HDMI port on laptop not working 26 54
Shadowcopy store on a network share? 5 15
MS Printer Preview Searchs for Printers 16 23
OfficeMate Freezes on login or does not load after login credentials are input.
In this article, I will show you HOW TO: Install VMware Tools for Windows on a VMware Windows virtual machine on a VMware vSphere Hypervisor 6.5 (ESXi 6.5) Host Server, using the VMware Host Client. The virtual machine has Windows Server 2016 instal…
This Micro Tutorial will give you a basic overview of Windows DVD Burner through its features and interface. This will be demonstrated using Windows 7 operating system.
This Micro Tutorial hows how you can integrate  Mac OSX to a Windows Active Directory Domain. Apple has made it easy to allow users to bind their macs to a windows domain with relative ease. The following video show how to bind OSX Mavericks to …

910 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

21 Experts available now in Live!

Get 1:1 Help Now