WMS Tasks Sequence
Hi All,
Is there a way to sequence tasks that come up on the manifest picking screen in WMS? The sequence of tasks is not necessarily the same as the order of the order lines even though our picking rule groups by order.
Thanks.
Hi,
I hope to understand exactly what you want to do. If you need a long delay with your E series board check the following link
http://digital.ni.com/public.nsf/allkb/f66ccab02d3b901886256a03005ee14a
Let me know if it's ok.
Regards
Omar S. NI
Similar Messages
-
Creative Cloud: "Build" MSI Hangs During SCCM OSD Task Sequence Installation
I wanted to share problem and solution I found when deploying Creative Cloud Packager-created packages/application using SCCM 2012 R2. I encountered this problem packaging this as both a Package and as an Application in SCCM.
When installing the software through SCCM Software Center onto a client, Software Center would close right as the installation of the "Build" folder MSI completed. This is abnormal behavior.
When installing the application as part of an OSD Task Sequence, the software would get installed (as shown by logs) but SCCM would hang forever at the "Installing Application" step.
I tried all sorts of different settings in SCCM and with the MSIEXEC command line and eventually traced it to the Reboot Manager functionality in MSIEXEC that will close and attempt to restart processes using files that the installer needs. Reboot Manager clobbered part of SCCM and in the Task Sequence, the connection between SCCM and the installer was broken.
The solution is to pass the property "MSIRESTARTMANAGERCONTROL=Disable" along the command line when calling MSIEXEC on the Build folder MSI file. This setting disabled Restart Manager so it didn't mess up SCCM. Once I did this, my Software Center installs and OSD Task Sequences ran as intended.
For reference, I used the REBOOT=ReallySuppress property for reboots and let SCCM determine what to do with reboots based on the return code. My testing was done with Windows 8.1 Enterprise x64.Like said, did you configure my proposal: "Configuration Manager client will force a mandatory device
restart" ? After you've configured that, update your deployment type manually and remove the old revisions of the application and try running the TS again. I'm guessing you're a little bit too fast on your doings so the ConfigMgr doesn't play a long very
nicely...
The TS stops because of your Hard Reboot (exit code 1641), I've seen this before and I configured my application so that ConfigMgr client will force device restart and that fixed my problem. Although, also my application is the last one in the TS, but still,
the TS continues after the reboot.
Btw. have you tried changing your command line to:
msiexec.exe /i cd-ord.msi TRANSFORMS=sv-se.mst MVLICENSE_KEY=xxxxxxxxxxxxxxxxx /L*V "%temp%\cdord.log" /qn
/norestart -
Task Sequence If Statement for chosen DomainOUs ?
In my CustomSettings.ini I have five different "DomainOUs" lines which prompt whoever is running the Task Sequence to select an Org Unit while they're putting in the Computer Name.
To keep things as simple as possible, I'd like a single Task Sequence that includes multiple "Install Application" packages which get installed based on which OU the machine is in. Can
I use the "Options" tab of my various "Install Application" packages with
an "If Statement" that applies it based on which "DomainOUs" was
chosen earlier?
I know I can make five separate Task Sequences for each OU and have the five different "Install Application" packages in them, but I'd like to avoid that as when I go to
update a common app, I'd have to do that in all five Task Sequences as opposed to one.You can add an XML file with only the Language settings, that will bypass the language selection prompt.
Bear in mind that when you create the answer file with Windows System Image Manager, you have to use the same architecture (64 or 32) as the target image.
http://www.scconfigmgr.com/2014/01/30/create-an-answer-file-for-language-settings-during-osd-with-configmgr/
Please take a moment to Vote as Helpful and/or Mark as Answer where applicable. Thanks. -
Help with enabling TPM in Task Sequence for Dell Laptops
Hi there,
I would appreciate some advice on creating a task sequence for Win8.1 with TPM enabling for Dell laptops; I have BitLocker set up manually with a Group policy, but want to have TPM enabled in the task sequence. I have read older posts on sites such as windows
noob, but can't see how to reference the CCTK and get TPM going for win8.1 in a SCCM2012 environment.
Obviously I haven't created this before so any help would be appreciated; I have noticed when I try to import my CCTK configurations into SCCM as it isn't a zip file I cannot do it.Luckily Dell wrote a whitepaper about that subject, see:
http://en.community.dell.com/techcenter/extras/m/white_papers/20209083
My Blog: http://www.petervanderwoude.nl/
Follow me on twitter: pvanderwoude -
Getting Access is Denied when Running Script in OSD Task Sequence
I am attempting put in a script that will move the computer account to the proper OU in AD. I have the script but when it launches inside of the TS I get "CScript Error: Loading script "C:\_SMSTaskSequence\WDPackage\Scripts\MoveOU.vbs" failed
(Access is denied. )."
I am using the Run Command Line, and using the "Run this step as the following account" I have verified that the account has access to do what I need it to do in AD. I have attached the logs as well.
PackageID = 'WI10015A' InstallSoftware
3/21/2012 8:46:53 AM 3316 (0x0CF4)
BaseVar = '', ContinueOnError='' InstallSoftware
3/21/2012 8:46:53 AM 3316 (0x0CF4)
SwdAction = '0001' InstallSoftware
3/21/2012 8:46:53 AM 3316 (0x0CF4)
Getting linked token InstallSoftware
3/21/2012 8:46:53 AM 3316 (0x0CF4)
failed to get the token information InstallSoftware
3/21/2012 8:46:53 AM 3316 (0x0CF4)
Get RunAs private desktop SMSTS-169042\SMSTSDesktop
InstallSoftware 3/21/2012 8:46:54 AM
3316 (0x0CF4)
Run command line under a user account InstallSoftware
3/21/2012 8:46:54 AM 3316 (0x0CF4)
Found the location for the package _SMSTSWI10015A. The location is on \\<SCCMSERVERNAME>\SMSPKGF$\WI10015A\
InstallSoftware 3/21/2012 8:46:54 AM
3316 (0x0CF4)
nPos != CCM::Utility::String::npos, HRESULT=80004005 (e:\nts_sms_fre\sms\framework\tscore\resolvesource.cpp,253)
InstallSoftware 3/21/2012 8:46:54 AM
3316 (0x0CF4)
Creating a connection to \\<SCCMSERVERNAME>\SMSPKGF$\WI10015A\ with default account
InstallSoftware 3/21/2012 8:46:54 AM
3316 (0x0CF4)
Connection request for "\\<SCCMSERVERNAME>\SMSPKGF$\WI10015A"
InstallSoftware 3/21/2012 8:46:54 AM
3316 (0x0CF4)
No credentials available for connecting to "\\<SCCMSERVERNAME>\SMSPKGF$\WI10015A". See whether the share has already been connected.
InstallSoftware 3/21/2012 8:46:54 AM
3316 (0x0CF4)
Connecting to "\\<SCCMSERVERNAME>\SMSPKGF$\WI10015A"
InstallSoftware 3/21/2012 8:46:54 AM
3316 (0x0CF4)
Successfully connected to "\\<SCCMSERVERNAME>\SMSPKGF$\WI10015A"
InstallSoftware 3/21/2012 8:46:54 AM
3316 (0x0CF4)
Resolved source to '\\<SCCMSERVERNAME>\SMSPKGF$\WI10015A'
InstallSoftware 3/21/2012 8:46:54 AM
3316 (0x0CF4)
Command line for extension .exe is "%1" %* InstallSoftware
3/21/2012 8:46:54 AM 3316 (0x0CF4)
Set command line: Run command line InstallSoftware
3/21/2012 8:46:54 AM 3316 (0x0CF4)
Working dir '\\<SCCMSERVERNAME>\SMSPKGF$\WI10015A'
InstallSoftware 3/21/2012 8:46:54 AM
3316 (0x0CF4)
Executing command line: Run command line InstallSoftware
3/21/2012 8:46:54 AM 3316 (0x0CF4)
Create a process under given user token InstallSoftware
3/21/2012 8:46:54 AM 3316 (0x0CF4)
Process completed with exit code 1 InstallSoftware
3/21/2012 8:46:54 AM 3316 (0x0CF4)
Microsoft (R) Windows Script Host Version 5.8
InstallSoftware 3/21/2012 8:46:54 AM
3316 (0x0CF4)
Copyright (C) Microsoft Corporation. All rights reserved.
InstallSoftware 3/21/2012 8:46:54 AM
3316 (0x0CF4)
InstallSoftware 3/21/2012 8:46:54 AM
3316 (0x0CF4)
CScript Error: Loading script "C:\_SMSTaskSequence\WDPackage\Scripts\MoveOU.vbs" failed (Access is denied. ).
InstallSoftware
3/21/2012 8:46:54 AM 3316 (0x0CF4)
Command line returned 1 InstallSoftware
3/21/2012 8:46:54 AM 3316 (0x0CF4)
Entering ReleaseSource() for \\<SCCMSERVERNAME>\SMSPKGF$\WI10015A\
InstallSoftware 3/21/2012 8:46:54 AM
3316 (0x0CF4)
reference count 1 for the source \\<SCCMSERVERNAME>\SMSPKGF$\WI10015A\ before releasing
InstallSoftware 3/21/2012 8:46:54 AM
3316 (0x0CF4)
Released the resolved source \\<SCCMSERVERNAME>\SMSPKGF$\WI10015A\
InstallSoftware 3/21/2012 8:46:54 AM
3316 (0x0CF4)
Process completed with exit code 1 TSManager
3/21/2012 8:46:54 AM 2520 (0x09D8)
TSManager 3/21/2012 8:46:54 AM
2520 (0x09D8)
Failed to run the action: Move Computer to Correct OU.
Incorrect function. (Error: 00000001; Source: Windows)
TSManager 3/21/2012 8:46:54 AM
2520 (0x09D8)
Sending status message . . . TSManager
3/21/2012 8:46:54 AM 2520 (0x09D8)
Send a task execution status message SMS_TSExecution_ActionFailError
TSManager 3/21/2012 8:46:54 AM
2520 (0x09D8)
MP server <SCCMSERVERNAME> and port 80. SSL=false. CRL=false.
TSManager 3/21/2012 8:46:54 AM
2520 (0x09D8)
Site code: WI1 TSManager
3/21/2012 8:46:54 AM 2520 (0x09D8)
Client machine name: 1J44KQ1 TSManager
3/21/2012 8:46:54 AM 2520 (0x09D8)
Client Identity: GUID:6ffb32d4-1184-4e40-a1c8-26272a707a72
TSManager 3/21/2012 8:46:54 AM
2520 (0x09D8)
Advertisement ID: WI12029D TSManager
3/21/2012 8:46:54 AM 2520 (0x09D8)
Package ID: WI1001E7 TSManager
3/21/2012 8:46:54 AM 2520 (0x09D8)
Sending StatusMessage TSManager
3/21/2012 8:46:54 AM 2520 (0x09D8)
Formatted header: TSManager
3/21/2012 8:46:54 AM 2520 (0x09D8)
<Msg SchemaVersion="1.1" ReplyCompression="zlib"><ID/><SourceID>ABB94CBE-33F4-4EB9-A151-34EE3474A0F9</SourceID><SourceHost/><TargetAddress>mp:[http]MP_StatusManager</TargetAddress><ReplyTo>direct:OSD</ReplyTo><Priority>3</Priority><Timeout>3600</Timeout><SentTime>2012-03-21T12:46:54Z</SentTime><Protocol>http</Protocol><Body
Type="ByteRange" Offset="0" Length="4174"/><Hooks/><Payload Type="inline"/><TargetHost/><TargetEndpoint>StatusReceiver</TargetEndpoint><ReplyMode>Sync</ReplyMode><CorrelationID/></Msg>
TSManager
3/21/2012 8:46:54 AM 2520 (0x09D8)
CLibSMSMessageWinHttpTransport::Send: URL: <SCCMSERVERNAME>:80 CCM_POST /ccm_system/request
TSManager 3/21/2012 8:46:54 AM
2520 (0x09D8)
The request has succeeded. 200 OK TSManager
3/21/2012 8:46:55 AM 2520 (0x09D8)
Set a global environment variable _SMSTSLastActionRetCode=1
TSManager 3/21/2012 8:46:55 AM
2520 (0x09D8)
Set a global environment variable _SMSTSLastActionSucceeded=false
TSManager 3/21/2012 8:46:55 AM
2520 (0x09D8)
Clear local default environment TSManager
3/21/2012 8:46:55 AM 2520 (0x09D8)
Let the parent group (Testing) decides whether to continue execution
TSManager 3/21/2012 8:46:55 AM
2520 (0x09D8)
The execution of the group (Testing) has failed and the execution has been aborted. An action failed.
Operation aborted (Error: 80004004; Source: Windows)
TSManager 3/21/2012 8:46:55 AM
2520 (0x09D8)
Failed to run the last action: Move Computer to Correct OU. Execution of task sequence failed.
Incorrect function. (Error: 00000001; Source: Windows)
TSManager 3/21/2012 8:46:55 AM
2520 (0x09D8)
Any suggestions would be greatly appreciated!
"You can't fix stupid!"I'm having the exact same issue. I'm using AutoIT for my script to move the computer account. I've tried using ADO, LDAP, and LDAP/ADSystemInfo object. They all fail with access denied. In fact the ADO version of my script fails just
trying to create the "ADODB.Connection" object which I know for a fact doesn't require elevation or administrator access. However, all three versions of the script work correctly when run manually outside the TS. They also work correctly on XP
machines during OSD. Only when deploying a Win7 machine do they fail during the TS. I've tried adding the runas user to the local administrators group beforehand but no dice. Did you have to restart the computer after doing the net localgroup
change? There has to be some other security config in Win7 that is set somewhere doing this. I just can't figure out what. I've even started looking at DCOM/COM permissions to see if something isn't right there.
I don't see why but maybe the script needs to be run locally? Any other ideas? -
Open task sequence log with cmtrace on error
Hi,
Is there a way to make an SCCM 2012 R2 task sequence automatically open the smsts.log (with cmtrace) when an error occurs?
J.
Jan HoedtI would agree with Torstren. The difficult piece would be determining where the smsts.log is, based on where its at in the task sequence. Once you have that it wouldn't be too difficult to place those steps in the
Gather Logs and StateStore on Failure group. The catch will be, even if CMTrace is open, the machine will still reboot after 15 minutes unless the cmd prompt is also open. -
SCCM 2012 SP1 MDT task sequence fails on reboot does not retain ip
we are having a sccm 2012 sp1 server that used for installation of win 8.1 Enterprise , the task sequence works perfectly fine but when we run the same task on HP Elite 8300 system having Intel 82579LM Adapter from Windows XP , after the reboot the
task fails as no ip address is assigned the NIC , We did download the WInPE Adapter drivers from HP site and injecting to the x86 Boot Image (6.2.9200) however the task still fails ,
Our environment uses all static ip address , the same task as mentioned earlier has worked fine with Different brands of HP elite 8200/8100 , infact the elite 8200 also uses the same NIC card
Find below the smsts.log file
Main error in the log file is
No physical network adapters found OSDNetSettings 2/12/2014 1:02:38 AM 2064 (0x0810)
Found network adapter "Intel(R) 82579LM Gigabit Network Connection" with IP Address 169.254.181.151. TSMBootstrap 2/12/2014 1:05:41 PM 1984 (0x07C0)
Xtract from LOG
SMSTSRebootDelay=60 Reboot 2/12/2014 1:01:56 AM 3496 (0x0DA8)
SMSTSRebootMessage=A new Microsoft Windows operating system is being installed. The computer must restart to continue. Reboot 2/12/2014 1:01:56 AM 3496 (0x0DA8)
SMSTSRebootRequested=WinPE Reboot 2/12/2014 1:01:56 AM 3496 (0x0DA8)
Process completed with exit code 0 TSManager 2/12/2014 1:01:56 AM 1876 (0x0754)
!--------------------------------------------------------------------------------------------! TSManager 2/12/2014 1:01:56 AM 1876 (0x0754)
Successfully completed the action (Restart to Windows PE) with the exit win32 code 0 TSManager 2/12/2014 1:01:56 AM 1876 (0x0754)
Set authenticator in transport TSManager 2/12/2014 1:01:56 AM 1876 (0x0754)
Set a global environment variable _SMSTSLastActionRetCode=0 TSManager 2/12/2014 1:01:57 AM 1876 (0x0754)
Set a global environment variable _SMSTSLastActionSucceeded=true TSManager 2/12/2014 1:01:57 AM 1876 (0x0754)
Clear local default environment TSManager 2/12/2014 1:01:57 AM 1876 (0x0754)
Updated security on object E:\_SMSTaskSequence. TSManager 2/12/2014 1:01:57 AM 1876 (0x0754)
Set a global environment variable _SMSTSNextInstructionPointer=59 TSManager 2/12/2014 1:01:57 AM 1876 (0x0754)
Set a TS execution environment variable _SMSTSNextInstructionPointer=59 TSManager 2/12/2014 1:01:57 AM 1876 (0x0754)
Set a global environment variable _SMSTSInstructionStackString=0 41 57 TSManager 2/12/2014 1:01:57 AM 1876 (0x0754)
Set a TS execution environment variable _SMSTSInstructionStackString=0 41 57 TSManager 2/12/2014 1:01:57 AM 1876 (0x0754)
Save the current environment block TSManager 2/12/2014 1:01:57 AM 1876 (0x0754)
Executing command line: "bcdedit.exe" TSManager 2/12/2014 1:01:57 AM 1876 (0x0754)
CreateProcess failed. Code(0x80070002) TSManager 2/12/2014 1:01:57 AM 1876 (0x0754)
Command line execution failed (80070002) TSManager 2/12/2014 1:01:57 AM 1876 (0x0754)
Staging boot image UNB0003A TSManager 2/12/2014 1:01:57 AM 1876 (0x0754)
ResolveSource flags: 0x00000000 TSManager 2/12/2014 1:01:59 AM 1876 (0x0754)
SMSTSPersistContent: . The content for package UNB0003A will be persisted TSManager 2/12/2014 1:01:59 AM 1876 (0x0754)
Set authenticator in transport TSManager 2/12/2014 1:01:59 AM 1876 (0x0754)
WinHttp credentials set TSManager 2/12/2014 1:01:59 AM 1876 (0x0754)
List of files to be downloaded TSManager 2/12/2014 1:01:59 AM 1876 (0x0754)
Downloaded file from http://unb-ho-sccmdb.exch1.mas.unb.com:80/SMS_DP_SMSPKG$/UNB0003A/sccm?/WinPE.UNB0003A.wim to E:\_SMSTaskSequence\Packages\UNB0003A\WinPE.UNB0003A.wim TSManager 2/12/2014 1:02:22 AM 1876
(0x0754)
VerifyContentHash: Hash algorithm is 32780 TSManager 2/12/2014 1:02:22 AM 1876 (0x0754)
Found boot image E:\_SMSTaskSequence\Packages\UNB0003A\WinPE.UNB0003A.wim TSManager 2/12/2014 1:02:25 AM 1876 (0x0754)
Copying boot image locally... TSManager 2/12/2014 1:02:25 AM 1876 (0x0754)
Failed to find ADK installation root registry key TSManager 2/12/2014 1:02:32 AM 1876 (0x0754)
Opening image file E:\_SMSTaskSequence\WinPE\sources\boot.wim TSManager 2/12/2014 1:02:32 AM 1876 (0x0754)
Applying image 1 to volume E:\_SMSTaskSequence\WinPE TSManager 2/12/2014 1:02:32 AM 1876 (0x0754)
Closing image file E:\_SMSTaskSequence\WinPE\sources\boot.wim TSManager 2/12/2014 1:02:35 AM 1876 (0x0754)
Capturing WinPE bootstrap settings TSManager 2/12/2014 1:02:35 AM 1876 (0x0754)
Environment scope successfully created: Global\{E7E5BB69-6198-4555-B5CA-6C46A2B5EB78} TSManager 2/12/2014 1:02:35 AM 1876 (0x0754)
Executing command line: "osdnetsettings.exe" capture adapters:true scope:Global\{E7E5BB69-6198-4555-B5CA-6C46A2B5EB78} TSManager 2/12/2014 1:02:35 AM 1876 (0x0754)
==============================[ OSDNetSettings.exe ]=========================== OSDNetSettings 2/12/2014 1:02:36 AM 2064 (0x0810)
Command line: "osdnetsettings.exe" capture adapters:true scope:Global\{E7E5BB69-6198-4555-B5CA-6C46A2B5EB78} OSDNetSettings 2/12/2014 1:02:36 AM 2064 (0x0810)
No adapters found with non-empty DNSDomainSuffixSearchOrder OSDNetSettings 2/12/2014 1:02:36 AM 2064 (0x0810)
Adapter "ROOT\SYMC_TEEFER2MP\0000" not found OSDNetSettings 2/12/2014 1:02:38 AM 2064 (0x0810)
No physical network adapters found OSDNetSettings 2/12/2014 1:02:38 AM 2064 (0x0810)
OSDNetSettings finished: 0x00000000 OSDNetSettings 2/12/2014 1:02:38 AM 2064 (0x0810)
Process completed with exit code 0 TSManager 2/12/2014 1:02:38 AM 1876 (0x0754)
Installing boot image to hard drive TSManager 2/12/2014 1:02:38 AM 1876 (0x0754)
Backing up existing boot system before trying to set up new boot system TSManager 2/12/2014 1:02:38 AM 1876 (0x0754)
BootLoader::backup: C:\, E:\_SMSTaskSequence\backup TSManager 2/12/2014 1:02:39 AM 1876 (0x0754)
BootLoader::restore: E:\_SMSTaskSequence\WinPE, C:\ TSManager 2/12/2014 1:02:43 AM 1876 (0x0754)
Saving bcd store to E:\_SMSTaskSequence\WinPE\boot\BCD TSManager 2/12/2014 1:02:43 AM 1876 (0x0754)
Executing command line: "E:\_SMSTaskSequence\WinPE\SMS\bin\i386\bootsect.exe" /NT60 SYS /MBR TSManager 2/12/2014 1:02:45 AM 1876 (0x0754)
Process completed with exit code 0 TSManager 2/12/2014 1:02:46 AM 1876 (0x0754)
Updated security on object E:\_SMSTaskSequence. TSManager 2/12/2014 1:02:47 AM 1876 (0x0754)
Set a global environment variable _SMSTSNextInstructionPointer=59 TSManager 2/12/2014 1:02:47 AM 1876 (0x0754)
Set a TS execution environment variable _SMSTSNextInstructionPointer=59 TSManager 2/12/2014 1:02:47 AM 1876 (0x0754)
Set a global environment variable _SMSTSInstructionStackString=0 41 57 TSManager 2/12/2014 1:02:47 AM 1876 (0x0754)
Set a TS execution environment variable _SMSTSInstructionStackString=0 41 57 TSManager 2/12/2014 1:02:47 AM 1876 (0x0754)
Save the current environment block TSManager 2/12/2014 1:02:47 AM 1876 (0x0754)
Updated security on object C:\_SMSTSVolumeID.7159644d-f741-45d5-ab29-0ad8aa4771ca. TSManager 2/12/2014 1:02:47 AM 1876 (0x0754)
Updated security on object D:\_SMSTSVolumeID.7159644d-f741-45d5-ab29-0ad8aa4771ca. TSManager 2/12/2014 1:02:47 AM 1876 (0x0754)
Updated security on object E:\_SMSTSVolumeID.7159644d-f741-45d5-ab29-0ad8aa4771ca. TSManager 2/12/2014 1:02:47 AM 1876 (0x0754)
Updated security on object E:\_SMSTaskSequence. TSManager 2/12/2014 1:02:47 AM 1876 (0x0754)
Set a global environment variable _SMSTSNextInstructionPointer=59 TSManager 2/12/2014 1:02:47 AM 1876 (0x0754)
Set a TS execution environment variable _SMSTSNextInstructionPointer=59 TSManager 2/12/2014 1:02:47 AM 1876 (0x0754)
Set a global environment variable _SMSTSInstructionStackString=0 41 57 TSManager 2/12/2014 1:02:47 AM 1876 (0x0754)
Set a TS execution environment variable _SMSTSInstructionStackString=0 41 57 TSManager 2/12/2014 1:02:47 AM 1876 (0x0754)
Save the current environment block TSManager 2/12/2014 1:02:47 AM 1876 (0x0754)
Expand a string: %_SMSTSMDataPath%\Logs TSManager 2/12/2014 1:02:47 AM 1876 (0x0754)
<![LOG[LOGGING: Finalize process ID set to 780]LOG]!><time="01:04:01.537+480" date="02-12-2014" component="TSBootShell" context="" type="1" thread="784" file="tslogging.cpp:1495">
1/1/1601 12:00:00 AM 1995266923 (0x76ED5B6B)
==============================[ TSBootShell.exe ]============================== TSBootShell 2/12/2014 1:04:01 AM 784 (0x0310)
Succeeded loading resource DLL 'X:\sms\bin\i386\1033\TSRES.DLL' TSBootShell 2/12/2014 1:04:01 AM 784 (0x0310)
Debug shell is enabled TSBootShell 2/12/2014 1:04:01 AM 784 (0x0310)
Waiting for PNP initialization... TSBootShell 2/12/2014 1:04:01 AM 796 (0x031C)
RAM Disk Boot Path: MULTI(0)DISK(0)RDISK(0)PARTITION(3)\_SMSTASKSEQUENCE\WINPE\SOURCES\BOOT.WIM TSBootShell 2/12/2014 1:04:01 AM 796 (0x031C)
WinPE boot path: E:\_SMSTASKSEQUENCE\WINPE\SOURCES\BOOT.WIM TSBootShell 2/12/2014 1:04:01 AM 796 (0x031C)
Booted from fixed disk TSBootShell 2/12/2014 1:04:01 AM 796 (0x031C)
Found config path E:\_SMSTaskSequence TSBootShell 2/12/2014 1:04:01 AM 796 (0x031C)
hMap != 0, HRESULT=80070002 (e:\nts_sccm_release\sms\framework\tscore\environmentscope.cpp,515) TSBootShell 2/12/2014 1:04:01 AM 796 (0x031C)
m_pGlobalScope->open(), HRESULT=80070002 (e:\nts_sccm_release\sms\framework\tscore\environmentlib.cpp,337) TSBootShell 2/12/2014 1:04:01 AM 796 (0x031C)
this->open(), HRESULT=80070002 (e:\nts_sccm_release\sms\framework\tscore\environmentlib.cpp,549) TSBootShell 2/12/2014 1:04:01 AM 796 (0x031C)
hMap != 0, HRESULT=80070002 (e:\nts_sccm_release\sms\framework\tscore\environmentscope.cpp,515) TSBootShell 2/12/2014 1:04:01 AM 796 (0x031C)
m_pGlobalScope->open(), HRESULT=80070002 (e:\nts_sccm_release\sms\framework\tscore\environmentlib.cpp,337) TSBootShell 2/12/2014 1:04:01 AM 796 (0x031C)
this->open(), HRESULT=80070002 (e:\nts_sccm_release\sms\framework\tscore\environmentlib.cpp,549) TSBootShell 2/12/2014 1:04:01 AM 796 (0x031C)
hMap != 0, HRESULT=80070002 (e:\nts_sccm_release\sms\framework\tscore\environmentscope.cpp,515) TSBootShell 2/12/2014 1:04:01 AM 796 (0x031C)
m_pGlobalScope->open(), HRESULT=80070002 (e:\nts_sccm_release\sms\framework\tscore\environmentlib.cpp,337) TSBootShell 2/12/2014 1:04:01 AM 796 (0x031C)
open(), HRESULT=80070002 (e:\nts_sccm_release\sms\framework\tscore\environmentlib.cpp,430) TSBootShell 2/12/2014 1:04:01 AM 796 (0x031C)
Can not find DeploymentType in file TsmBootstrap.ini or the file doesn't exist. This is not running on Windows To Go. TSBootShell 2/12/2014 1:04:01 AM 796 (0x031C)
hMap != 0, HRESULT=80070002 (e:\nts_sccm_release\sms\framework\tscore\environmentscope.cpp,515) TSBootShell 2/12/2014 1:04:01 AM 796 (0x031C)
m_pGlobalScope->open(), HRESULT=80070002 (e:\nts_sccm_release\sms\framework\tscore\environmentlib.cpp,337) TSBootShell 2/12/2014 1:04:01 AM 796 (0x031C)
open(), HRESULT=80070002 (e:\nts_sccm_release\sms\framework\tscore\environmentlib.cpp,430) TSBootShell 2/12/2014 1:04:01 AM 796 (0x031C)
Restoring boot system from E:\_SMSTaskSequence\backup TSBootShell 2/12/2014 1:04:01 AM 796 (0x031C)
Successfully loaded the BCD boot system TSBootShell 2/12/2014 1:04:05 AM 796 (0x031C)
Successfully loaded an exported NTLDR boot system TSBootShell 2/12/2014 1:04:05 AM 796 (0x031C)
BootLoader::restore: E:\_SMSTaskSequence\backup, C:\ TSBootShell 2/12/2014 1:04:05 AM 796 (0x031C)
Successfully merged logs from cache. TSBootShell 2/12/2014 1:04:06 AM 796 (0x031C)
hMap != 0, HRESULT=80070002 (e:\nts_sccm_release\sms\framework\tscore\environmentscope.cpp,515) TSBootShell 2/12/2014 1:04:06 AM 796 (0x031C)
m_pGlobalScope->open(), HRESULT=80070002 (e:\nts_sccm_release\sms\framework\tscore\environmentlib.cpp,337) TSBootShell 2/12/2014 1:04:06 AM 796 (0x031C)
open(), HRESULT=80070002 (e:\nts_sccm_release\sms\framework\tscore\environmentlib.cpp,430) TSBootShell 2/12/2014 1:04:06 AM 796 (0x031C)
Loading bootstrap settings from E:\_SMSTaskSequence\WinPE TSBootShell 2/12/2014 1:04:06 AM 796 (0x031C)
Loading saved WinPE settings TSBootShell 2/12/2014 1:04:06 AM 796 (0x031C)
Creating key 'Software\Microsoft\SMS\47006C006F00620061006C005C007B00450037004500350042004200360039002D0036003100390038002D0034003500350035002D0042003500430041002D003600430034003600410032004200350045004200370038007D00' TSBootShell
2/12/2014 1:04:06 AM 796 (0x031C)
Environment scope successfully created: Global\{E7E5BB69-6198-4555-B5CA-6C46A2B5EB78} TSBootShell 2/12/2014 1:04:06 AM 796 (0x031C)
Configuring WinPE bootstrap settings TSBootShell 2/12/2014 1:04:06 AM 796 (0x031C)
Creating WinPE answer file TSBootShell 2/12/2014 1:04:06 AM 796 (0x031C)
Setting hive location to "X:\windows\system32" TSBootShell 2/12/2014 1:04:06 AM 796 (0x031C)
Getting namespace "Microsoft-Windows-Setup" for architecture "x86" TSBootShell 2/12/2014 1:04:06 AM 796 (0x031C)
Configuring global network settings TSBootShell 2/12/2014 1:04:06 AM 796 (0x031C)
Join type: TSBootShell 2/12/2014 1:04:06 AM 796 (0x031C)
DNS domain: exch1.mas.unb.com TSBootShell 2/12/2014 1:04:06 AM 796 (0x031C)
DNS domain search order: TSBootShell 2/12/2014 1:04:06 AM 796 (0x031C)
IP filter sec enabled: false TSBootShell 2/12/2014 1:04:06 AM 796 (0x031C)
No adapters found in environment. Performing global configuration only. TSBootShell 2/12/2014 1:04:06 AM 796 (0x031C)
Writing configuration information to E:\_SMSTaskSequence\WinPE\WinPeUnattend.xml TSBootShell 2/12/2014 1:04:06 AM 796 (0x031C)
Successfully saved configuration information to E:\_SMSTaskSequence\WinPE\WinPeUnattend.xml TSBootShell 2/12/2014 1:04:06 AM 796 (0x031C)
Executing command line: wpeinit.exe -winpe TSBootShell 2/12/2014 1:04:06 AM 796 (0x031C)
The command completed successfully. TSBootShell 2/12/2014 1:05:40 AM 796 (0x031C)
Starting DNS client service. TSBootShell 2/12/2014 1:05:40 AM 796 (0x031C)
Finalizing network settings TSBootShell 2/12/2014 1:05:40 AM 796 (0x031C)
No adapters found in environment. Performing global finalization only. TSBootShell 2/12/2014 1:05:40 AM 796 (0x031C)
Finalizing global network settings TSBootShell 2/12/2014 1:05:40 AM 796 (0x031C)
DNS domain: exch1.mas.unb.com TSBootShell 2/12/2014 1:05:40 AM 796 (0x031C)
DNS domain search order: TSBootShell 2/12/2014 1:05:40 AM 796 (0x031C)
DNS for WINS enabled: false TSBootShell 2/12/2014 1:05:40 AM 796 (0x031C)
LMHosts file enabled: true TSBootShell 2/12/2014 1:05:40 AM 796 (0x031C)
Host lookup file: TSBootShell 2/12/2014 1:05:40 AM 796 (0x031C)
WINS scope ID: TSBootShell 2/12/2014 1:05:40 AM 796 (0x031C)
Executing command line: X:\sms\bin\i386\TsmBootstrap.exe /env:WinPE /configpath:E:\_SMSTaskSequence TSBootShell 2/12/2014 1:05:40 AM 796 (0x031C)
The command completed successfully. TSBootShell 2/12/2014 1:05:40 AM 796 (0x031C)
==============================[ TSMBootStrap.exe ]============================== TSMBootstrap 2/12/2014 1:05:40 AM 1984 (0x07C0)
Command line: X:\sms\bin\i386\TsmBootstrap.exe /env:WinPE /configpath:E:\_SMSTaskSequence TSMBootstrap 2/12/2014 1:05:40 AM 1984 (0x07C0)
Succeeded loading resource DLL 'X:\sms\bin\i386\1033\TSRES.DLL' TSMBootstrap 2/12/2014 1:05:40 AM 1984 (0x07C0)
Succeeded loading resource DLL 'X:\sms\bin\i386\TSRESNLC.DLL' TSMBootstrap 2/12/2014 1:05:40 AM 1984 (0x07C0)
Adding SMS bin folder "X:\sms\bin\i386" to the system environment PATH TSMBootstrap 2/12/2014 1:05:40 AM 1984 (0x07C0)
Failed to open PXE registry key. Not a PXE boot. TSMBootstrap 2/12/2014 1:05:40 AM 1984 (0x07C0)
Resuming Task Sequence in WinPE TSMBootstrap 2/12/2014 1:05:40 AM 1984 (0x07C0)
Creating key 'Software\Microsoft\SMS\47006C006F00620061006C005C007B00350031004100300031003600420036002D0046003000440045002D0034003700350032002D0042003900370043002D003500340045003600460033003800360041003900310032007D00' TSMBootstrap
2/12/2014 1:05:40 AM 1984 (0x07C0)
Environment scope successfully created: Global\{51A016B6-F0DE-4752-B97C-54E6F386A912} TSMBootstrap 2/12/2014 1:05:40 AM 1984 (0x07C0)
Creating key 'Software\Microsoft\SMS\47006C006F00620061006C005C007B00420041003300410033003900300030002D0043004100360044002D0034006100630031002D0038004300320038002D003500300037003300410046004300320032004200300033007D00' TSMBootstrap
2/12/2014 1:05:40 AM 1984 (0x07C0)
Environment scope successfully created: Global\{BA3A3900-CA6D-4ac1-8C28-5073AFC22B03} TSMBootstrap 2/12/2014 1:05:40 AM 1984 (0x07C0)
Loading the Task Sequencing Environment from "E:\_SMSTaskSequence\TSEnv.dat". TSMBootstrap 2/12/2014 1:05:41 AM 1984 (0x07C0)
Updating the local data path in the Task Sequencing Environment. TSMBootstrap 2/12/2014 1:05:41 AM 1984 (0x07C0)
Setting LogMaxSize to 1000000 TSMBootstrap 2/12/2014 1:05:41 AM 1984 (0x07C0)
Setting LogMaxHistory to 1 TSMBootstrap 2/12/2014 1:05:41 AM 1984 (0x07C0)
Setting LogLevel to 0 TSMBootstrap 2/12/2014 1:05:41 AM 1984 (0x07C0)
Setting LogEnabled to 1 TSMBootstrap 2/12/2014 1:05:41 AM 1984 (0x07C0)
Setting LogDebug to 1 TSMBootstrap 2/12/2014 1:05:41 AM 1984 (0x07C0)
Command line for extension .exe is "%1" %* TSMBootstrap 2/12/2014 1:05:41 AM 1984 (0x07C0)
Set command line: "X:\sms\bin\i386\TsProgressUI.exe" /Register:WinPE TSMBootstrap 2/12/2014 1:05:41 AM 1984 (0x07C0)
Executing command line: "X:\sms\bin\i386\TsProgressUI.exe" /Register:WinPE TSMBootstrap 2/12/2014 1:05:41 AM 1984 (0x07C0)
==========[ TsProgressUI started in process 2004 ]========== TsProgressUI 2/12/2014 1:05:41 AM 2008 (0x07D8)
Command line: "X:\sms\bin\i386\TsProgressUI.exe" /Register:W
In dire need of help,
I have already gone through the below articles on the NET
http://social.technet.microsoft.com/Forums/systemcenter/en-US/0fe5cded-51cf-487a-97e3-837fb3426a3e/install-software-updates-in-osd-reboots-leaves-clients-in-provisioning-mode?forum=configmgrosd
http://social.technet.microsoft.com/Forums/systemcenter/en-US/c590e486-d3ca-423f-8953-e596160f3567/updates-hang-during-osd-kb2509007-not-working-for-me?forum=configmgrosd
Awating response,
Hasan RezaWell Finally I sorted my issue ,
Just want to share the solution, may be it would be helpful to some one else and save some times
The problem was that the Xp images has lot of hidden NIC installed , this would not allow the system to work with the correct NIC card and Ip address (System -> View Hidden Devices) , what I did 2 things
1) Copied the OSD Script folder from the SCCM Server to the Client pc and ran that ztigather.wsf and captured the output , it was evident that it showed capturing multiple adapters , (There are some blogs that pointed out that OSD can capture only one nic
due to the only one Adapter0 section being defined in the ZTIgather.xml file,)
2) I open the registry at the xp pc navigated to HKLM-> System ->Current Control Set-> Services-> TCPIP -> Parameters-> Interfaces ->
Expect for the NIC card that had the Ip address assigned I deleted all other nic card's guid,
As then post running deleting the old scanstate (USMTUTIL /rd c:\statestore) , reran the task and VOILA..
All worked fine , below are the two post I followed , though notvery relevant but they were helpful and help me reached the conclusion.
Thanks,
Hasan Reza.
http://systemscenter.ru/mdt2012.en/ztigatherwsf.htm
http://social.technet.microsoft.com/Forums/windowsserver/en-US/8acb7cd1-7028-4ffe-86c9-eb43041cf8b3/how-do-i-get-rid-of-second-169254xx-ipv4-address-on-windows-server-2008-sp2-x86?forum=winservergen -
The code below is a simple powershell statement which enables me to change the execution policy so that I can run powershell scripts. When I run this in a normal windows enviroment the statement will work fine, not giving me an issue whatsoever. However,
whenever it runs in the task sequence the TS fails. I am running this via the command line option in the task sequence, each time running this step as 3 different types of administrators.
powershell.exe -noninteractive Set-ExecutionPolicy -ExecutionPolicy unrestricted
Checking the log file it states this:
Set-ExecutionPolicy : The term 'Set-ExecutionPolicy' is not recognized as the InstallSoftware 13/10/2014 17:28:09 3768 (0x0EB8)
name of a cmdlet, function, script file, or operable program. Check the InstallSoftware 13/10/2014 17:28:09 3768 (0x0EB8)
spelling of the name, or if a path was included, verify that the path is InstallSoftware 13/10/2014 17:28:09 3768 (0x0EB8)
correct and try again. InstallSoftware 13/10/2014 17:28:09 3768 (0x0EB8)
At line:1 char:1 InstallSoftware 13/10/2014 17:28:09 3768 (0x0EB8)
+ Set-ExecutionPolicy -ExecutionPolicy unrestricted InstallSoftware 13/10/2014 17:28:09 3768 (0x0EB8)
+ ~~~~~~~~~~~~~~~~~~~ InstallSoftware 13/10/2014 17:28:09 3768 (0x0EB8)
+ CategoryInfo : ObjectNotFound: (Set-ExecutionPolicy:String) [], InstallSoftware 13/10/2014 17:28:09 3768 (0x0EB8)
CommandNotFoundException InstallSoftware 13/10/2014 17:28:09 3768 (0x0EB8)
+ FullyQualifiedErrorId : CommandNotFoundException InstallSoftware 13/10/2014 17:28:09 3768 (0x0EB8)
InstallSoftware 13/10/2014 17:28:09 3768 (0x0EB8)
Failed to run the action: Script Exception.
Incorrect function. (Error: 00000001; Source: Windows) TSManager 13/10/2014 17:28:09 2716 (0x0A9C)
I am new to both SCCM and Powershell, but from my point of view, this should work, considering that the syntax is not actually incorrect? Please could anyone with any idea drop some hints and tips on how to
stop this issue.I'm not using 3 admin accounts at once if that's how it sounded. I have tried 3 different Admin accounts because I felt that perhaps the difference in permissions may have made a difference in whether I was able to run the syntax and scripts. So I tried
using my own personal administrator account, the SCCMNA account, and the local admin account, which I read worked.
At this point in the task sequence I have:
- Installed the OS
- Connected to the domain
- Installed Applications such as; Flash, Shockware, Reader etc.
Once it has installed the last application within a folder called "Helper Apps" (Which contains various Java and Adobe apps which install fine) it will then run a "Use Toolkit Package" using the MDT toolkit, once this stage is complete
it then progresses to the Script Exception section of the TS.
powershell.exe -noninteractive Set-ExecutionPolicy -ExecutionPolicy unrestricted
I obviously need this to work otherwise I am not allowed to run the script, but because this syntax is "incorrect" it stops the task sequence.
I hope this information might shed some more light on the situation. -
Error 16389 running a Task Sequence to install software
We've run into multiple WinXPProSP3 computers generating error code 16389 when trying to run a TS. After searching on Google, we found this,
http://blogs.technet.com/b/smsandmom/archive/2007/10/29/sccm-2007-task-sequence-fails-drive-letter-not-displayed.aspx
, which led to another article to modify a RegKey, HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E967-E325-11CE-BFC1-08002BE10318} , to add a key of UpperFilters, with a value of PartMgr. The key WAS missing on the machines with
the error, and, adding that key and value DOES fix the problem. This key and value seem to be default for the OS.
However, searching Google for that RegKey has a LOT of suggestions to delete that key and value, due to issues with USB Thumbdrives and iPods not being seen when plugged in--so, it seems that there may be a conflict.
Does anyone know of a fix for Error 16389 without having to add that key, if it's going to cause other problems?
Thanks.Hi,
Will you please past the detailed errors in the smsts.log?
From your description your are using TS to install software right?
If so you should first make sure this software package meats the following requirement when it was deployed through TS:
this program can be installed under local system account.
this program can be installed without any user interaction (such as: press next button).
this program will not force computer reboot, it allows sccm ts to manage the reboot.
If your OSD TS return 16389 exit code, you can try to change the volume license keys. Because once i have seem this error and it was solved by changing the volume license key.
Hope this will help.
Thanks -
Hello All,
What I am trying to do is use SCCM's own OSD Task Sequence / Windows PE to deploy an operating system that boots using VHD Native Boot. (C:\ = VHD File with Windows, D:\ Data drive with BCDBoot).
MDT 2013 Can do it I've been told, but I am putting off MDT until Windows 10 if I can get away with it.
TechNet VHD Native Boot on Windows 8.1:
http://technet.microsoft.com/en-us/library/hh825689.aspx
http://technet.microsoft.com/en-us/library/hh825691.aspx
The good news is it is working up to the "Apply Operating System" phase, but that apply operating system phase is reported as an error even though it completes successfully. It can't clean up the SMSTS folder it's looking for on the C:\ because
it's been moved over to the D:\ by a diskpart script. We are left with the deployment working but requiring IT staff to deal with the OOBE Personalization wizard and adding each PC to the domain manually. From that point on the SCCM client can do the rest,
which works for US before we upgrade to Windows 10 with utilizing MDT.
I am not talking about deploying an OS to a VHD file and putting that file on a network share i.e.
http://blogs.technet.com/b/configurationmgr/archive/2013/10/31/new-in-system-center-2012-r2-configuration-manager-deploying-an-operating-system-to-a-virtual-hard-drive-vhd.aspx
I reported getting the diskpart script working first here:
https://social.technet.microsoft.com/Forums/en-US/ff124f09-1d2e-4fc4-a5b6-63b683f3d208/native-vhd-boot-deployments-from-sccm-2012-r2?forum=configmanagerosd
Here it is:
rem work around any USB disk left in or any CDROM detected by PE as drive D
select volume D
assign letter=F noerr
rem select the formatted volume and reassign it's drive letter
select volume C
assign letter=D
rem create and setup VHD file
create vdisk file=D:\DEV_WIN81.VHD maximum=250000 type=expandable
select vdisk file=D:\DEV_WIN81.VHD
attach vdisk
create partition primary
active
format FS=NTFS quick label="Developer Win81 VHD"
assign letter=C
rescan
exit
(type=fixed is better for performance - we'll surely activate when we have dual boot 8.1 / Windows 10 later for the Win10 VHD's)
The Task Sequence looks like this:
I'd like to add a few more steps after apply operating system if I can, but I have to resolve this error with "Apply Operating system before I can go further."
Question:
Can an OSD guru tell me if there are any Task Sequence Variables we could throw at this to make the Apply Operating System sequence complete without error so we can do all SCCM OSD Deployment steps?
If we can, then someone (not me) gets to add a new TechNet blog post about this being possible. It's my understanding presently that only MDT can support deploying WIM files into VHDs on Workstations, that boot them.
The install image was created using dism to convert a VHD from a Hyper-V host into a wim. I know I'm meant to use SCCM to capture it, but I don't think that's causing this problem because when we are deploying from that image to a HDD without VHD we don't
get any issues.
I'm only allowed enough characters to paste the tail end of the apply operating system phase only:
<![LOG[Execution engine result code: Success (0)]LOG]!><time="18:29:37.691-420" date="12-26-2014" component="TSManager" context="" type="1" thread="960" file="tsmanager.cpp:929">
<![LOG[Cleaning Up.]LOG]!><time="18:29:37.691-420" date="12-26-2014" component="TSManager" context="" type="1" thread="960" file="tsmanager.cpp:675">
<![LOG[Removing Authenticator]LOG]!><time="18:29:37.691-420" date="12-26-2014" component="TSManager" context="" type="1" thread="960" file="tsmanager.cpp:686">
<![LOG[shKey.DeleteValue( c_szRegValue_SecurityToken ), HRESULT=80070002 (e:\nts_sccm_release\sms\framework\ccmutillib\ccmutillib.cpp,1660)]LOG]!><time="18:29:37.691-420" date="12-26-2014" component="TSManager" context="" type="0" thread="960" file="ccmutillib.cpp:1660">
<![LOG[Cleaning up task sequence folder]LOG]!><time="18:29:37.691-420" date="12-26-2014" component="TSManager" context="" type="1" thread="960" file="utils.cpp:2329">
<![LOG[Unable to delete file C:\_SMSTaskSequence\TSEnv.dat (0x80070005). Continuing.]LOG]!><time="18:29:37.738-420" date="12-26-2014" component="TSManager" context="" type="1" thread="960" file="ccmfile.cpp:1056">
<![LOG[hr, HRESULT=80070091 (e:\nts_sccm_release\sms\framework\core\ccmcore\ccmfile.cpp,1218)]LOG]!><time="18:29:37.738-420" date="12-26-2014" component="TSManager" context="" type="0" thread="960" file="ccmfile.cpp:1218">
<![LOG[Failed to delete directory 'C:\_SMSTaskSequence']LOG]!><time="18:29:37.738-420" date="12-26-2014" component="TSManager" context="" type="2" thread="960" file="ccmfile.cpp:1218">
<![LOG[(dwRet = ::SetNamedSecurityInfoW ((WCHAR*) pszObjectName, objectType, OWNER_SECURITY_INFORMATION, pOwnerSID, NULL, NULL, NULL)) == ERROR_SUCCESS, HRESULT=80070005 (e:\qfe\nts\sms\framework\tscore\utils.cpp,6675)]LOG]!><time="18:29:37.738-420" date="12-26-2014" component="TSManager" context="" type="0" thread="960" file="utils.cpp:6675">
<![LOG[SetNamedSecurityInfo() failed.]LOG]!><time="18:29:37.738-420" date="12-26-2014" component="TSManager" context="" type="3" thread="960" file="utils.cpp:6675">
<![LOG[SetObjectOwner() failed. 0x80070005.]LOG]!><time="18:29:37.738-420" date="12-26-2014" component="TSManager" context="" type="3" thread="960" file="utils.cpp:6687">
<![LOG[SetObjectOwner (szFName, SE_FILE_OBJECT, c_szAdministrators), HRESULT=80070005 (e:\qfe\nts\sms\framework\tscore\utils.cpp,6772)]LOG]!><time="18:29:37.738-420" date="12-26-2014" component="TSManager" context="" type="0" thread="960" file="utils.cpp:6772">
<![LOG[RemoveFile() failed for C:\_SMSTaskSequence\TSEnv.dat. 0x80070005.]LOG]!><time="18:29:37.738-420" date="12-26-2014" component="TSManager" context="" type="3" thread="960" file="utils.cpp:6816">
<![LOG[RemoveDirectoryW failed (0x80070091) for C:\_SMSTaskSequence]LOG]!><time="18:29:37.738-420" date="12-26-2014" component="TSManager" context="" type="2" thread="960" file="utils.cpp:6900">
<![LOG[Deleting volume ID file C:\_SMSTSVolumeID.7159644d-f741-45d5-ab29-0ad8aa4771ca ...]LOG]!><time="18:29:37.738-420" date="12-26-2014" component="TSManager" context="" type="1" thread="960" file="resolvesource.cpp:506">
<![LOG[DeleteFileW(sVolumeIDFile.c_str()), HRESULT=80070002 (e:\qfe\nts\sms\framework\tscore\resolvesource.cpp,508)]LOG]!><time="18:29:37.738-420" date="12-26-2014" component="TSManager" context="" type="0" thread="960" file="resolvesource.cpp:508">
<![LOG[Deleting volume ID file D:\_SMSTSVolumeID.7159644d-f741-45d5-ab29-0ad8aa4771ca ...]LOG]!><time="18:29:37.738-420" date="12-26-2014" component="TSManager" context="" type="1" thread="960" file="resolvesource.cpp:506">
<![LOG[DeleteFileW(sVolumeIDFile.c_str()), HRESULT=80070002 (e:\qfe\nts\sms\framework\tscore\resolvesource.cpp,508)]LOG]!><time="18:29:37.738-420" date="12-26-2014" component="TSManager" context="" type="0" thread="960" file="resolvesource.cpp:508">
<![LOG[Successfully unregistered Task Sequencing Environment COM Interface.]LOG]!><time="18:29:37.738-420" date="12-26-2014" component="TSManager" context="" type="1" thread="960" file="environmentlib.cpp:910">
<![LOG[Command line for extension .exe is "%1" %*]LOG]!><time="18:29:37.738-420" date="12-26-2014" component="TSManager" context="" type="0" thread="960" file="commandline.cpp:228">
<![LOG[Set command line: "X:\sms\bin\x64\TsProgressUI.exe" /Unregister]LOG]!><time="18:29:37.738-420" date="12-26-2014" component="TSManager" context="" type="0" thread="960" file="commandline.cpp:731">
<![LOG[Executing command line: "X:\sms\bin\x64\TsProgressUI.exe" /Unregister]LOG]!><time="18:29:37.738-420" date="12-26-2014" component="TSManager" context="" type="1" thread="960" file="commandline.cpp:827">
<![LOG[==========[ TsProgressUI started in process 8012 ]==========]LOG]!><time="18:29:37.754-420" date="12-26-2014" component="TsProgressUI" context="" type="1" thread="8040" file="winmain.cpp:330">
<![LOG[Command line: "X:\sms\bin\x64\TsProgressUI.exe" /Unregister]LOG]!><time="18:29:37.754-420" date="12-26-2014" component="TsProgressUI" context="" type="0" thread="8040" file="winmain.cpp:332">
<![LOG[Unregistering COM classes]LOG]!><time="18:29:37.754-420" date="12-26-2014" component="TsProgressUI" context="" type="1" thread="8040" file="winmain.cpp:204">
<![LOG[Unregistering class objects]LOG]!><time="18:29:37.754-420" date="12-26-2014" component="TsProgressUI" context="" type="1" thread="8040" file="winmain.cpp:495">
<![LOG[Shutdown complete.]LOG]!><time="18:29:37.754-420" date="12-26-2014" component="TsProgressUI" context="" type="1" thread="8040" file="winmain.cpp:512">
<![LOG[Process completed with exit code 0]LOG]!><time="18:29:37.754-420" date="12-26-2014" component="TSManager" context="" type="1" thread="960" file="commandline.cpp:1123">
<![LOG[Successfully unregistered TS Progress UI.]LOG]!><time="18:29:37.754-420" date="12-26-2014" component="TSManager" context="" type="1" thread="960" file="utils.cpp:2903">
<![LOG[Sending success status message]LOG]!><time="18:29:37.754-420" date="12-26-2014" component="TSManager" context="" type="1" thread="960" file="tsmanager.cpp:784">
<![LOG[MP server http://OUR-SCCM.ourcompany.com. Ports 80,443. CRL=false.]LOG]!><time="18:29:37.754-420" date="12-26-2014" component="TSManager" context="" type="1" thread="960" file="utils.cpp:5881">
<![LOG[Setting authenticator]LOG]!><time="18:29:37.785-420" date="12-26-2014" component="TSManager" context="" type="1" thread="960" file="utils.cpp:5903">
<![LOG[Set authenticator in transport]LOG]!><time="18:29:37.785-420" date="12-26-2014" component="TSManager" context="" type="0" thread="960" file="libsmsmessaging.cpp:7734">
<![LOG[Sending StatusMessage]LOG]!><time="18:29:37.785-420" date="12-26-2014" component="TSManager" context="" type="1" thread="960" file="libsmsmessaging.cpp:4023">
<![LOG[Setting message signatures.]LOG]!><time="18:29:37.801-420" date="12-26-2014" component="TSManager" context="" type="0" thread="960" file="libsmsmessaging.cpp:1295">
<![LOG[Setting the authenticator.]LOG]!><time="18:29:37.801-420" date="12-26-2014" component="TSManager" context="" type="0" thread="960" file="libsmsmessaging.cpp:1325">
<![LOG[CLibSMSMessageWinHttpTransport::Send: URL: OUR-SCCM.ourcompany.com:80 CCM_POST /ccm_system/request]LOG]!><time="18:29:37.801-420" date="12-26-2014" component="TSManager" context="" type="1" thread="960" file="libsmsmessaging.cpp:8604">
<![LOG[Request was successful.]LOG]!><time="18:29:37.832-420" date="12-26-2014" component="TSManager" context="" type="0" thread="960" file="libsmsmessaging.cpp:8939">
<![LOG[::RegQueryValueExW(hSubKey, szReg, NULL, NULL, NULL, &dwSize), HRESULT=80070002 (e:\qfe\nts\sms\framework\tscore\utils.cpp,811)]LOG]!><time="18:29:37.832-420" date="12-26-2014" component="TSManager" context="" type="0" thread="960" file="utils.cpp:811">
<![LOG[RegQueryValueExW is unsuccessful for Software\Microsoft\SMS\Task Sequence, SMSTSEndProgram]LOG]!><time="18:29:37.832-420" date="12-26-2014" component="TSManager" context="" type="2" thread="960" file="utils.cpp:811">
<![LOG[GetTsRegValue() is unsuccessful. 0x80070002.]LOG]!><time="18:29:37.832-420" date="12-26-2014" component="TSManager" context="" type="2" thread="960" file="utils.cpp:842">
<![LOG[End program: ]LOG]!><time="18:29:37.832-420" date="12-26-2014" component="TSManager" context="" type="1" thread="960" file="tsmanager.cpp:805">
<![LOG[Finalize logging request ignored from process 856]LOG]!><time="18:29:37.832-420" date="12-26-2014" component="TSManager" context="" type="1" thread="960" file="tslogging.cpp:1737">
<![LOG[Process completed with exit code 0]LOG]!><time="18:29:37.863-420" date="12-26-2014" component="TSPxe" context="" type="1" thread="592" file="commandline.cpp:1123">
<![LOG[Task Sequence Manager returned code 0x00000000]LOG]!><time="18:29:37.863-420" date="12-26-2014" component="TSPxe" context="" type="1" thread="592" file="tsmediawizardcontrol.cpp:2180">
<![LOG[Exiting with return code 0x00000000]LOG]!><time="18:29:37.863-420" date="12-26-2014" component="TSPxe" context="" type="1" thread="592" file="tsmbootstrap.cpp:1238">
<![LOG[Execution complete.]LOG]!><time="18:29:37.879-420" date="12-26-2014" component="TSBootShell" context="" type="1" thread="760" file="bootshell.cpp:693">
<![LOG[hMap != 0, HRESULT=80070002 (e:\qfe\nts\sms\framework\tscore\environmentscope.cpp,493)]LOG]!><time="18:29:37.879-420" date="12-26-2014" component="TSBootShell" context="" type="0" thread="760" file="environmentscope.cpp:493">
<![LOG[m_pGlobalScope->open(), HRESULT=80070002 (e:\qfe\nts\sms\framework\tscore\environmentlib.cpp,335)]LOG]!><time="18:29:37.879-420" date="12-26-2014" component="TSBootShell" context="" type="0" thread="760" file="environmentlib.cpp:335">
<![LOG[this->open(), HRESULT=80070002 (e:\qfe\nts\sms\framework\tscore\environmentlib.cpp,553)]LOG]!><time="18:29:37.879-420" date="12-26-2014" component="TSBootShell" context="" type="0" thread="760" file="environmentlib.cpp:553">
<![LOG[::RegQueryValueExW(hSubKey, szReg, NULL, NULL, NULL, &dwSize), HRESULT=80070002 (e:\qfe\nts\sms\framework\tscore\utils.cpp,811)]LOG]!><time="18:29:37.879-420" date="12-26-2014" component="TSBootShell" context="" type="0" thread="760" file="utils.cpp:811">
<![LOG[RegQueryValueExW is unsuccessful for Software\Microsoft\SMS\Task Sequence, SMSTSEndProgram]LOG]!><time="18:29:37.879-420" date="12-26-2014" component="TSBootShell" context="" type="2" thread="760" file="utils.cpp:811">
<![LOG[GetTsRegValue() is unsuccessful. 0x80070002.]LOG]!><time="18:29:37.879-420" date="12-26-2014" component="TSBootShell" context="" type="2" thread="760" file="utils.cpp:842">
<![LOG[End program: ]LOG]!><time="18:29:37.879-420" date="12-26-2014" component="TSBootShell" context="" type="1" thread="760" file="bootshell.cpp:725">
<![LOG[Finalizing logging from process 752]LOG]!><time="18:29:37.879-420" date="12-26-2014" component="TSBootShell" context="" type="1" thread="760" file="tslogging.cpp:1741">
<![LOG[Finalizing logs to root of first available drive]LOG]!><time="18:29:37.879-420" date="12-26-2014" component="TSBootShell" context="" type="1" thread="760" file="tslogging.cpp:1583">
<![LOG[Successfully finalized logs to D:\SMSTSLog]LOG]!><time="18:29:37.879-420" date="12-26-2014" component="TSBootShell" context="" type="1" thread="760" file="tslogging.cpp:1640">
<![LOG[Cleaning up task sequencing logging configuration.]LOG]!><time="18:29:37.879-420" date="12-26-2014" component="TSBootShell" context="" type="0" thread="760" file="tslogging.cpp:584">
MCSE,MCNE,SCO,Sair Linux/GNU, Open source-enthusiast.I have already set it to FALSE. The solution to this will be some different OSD Task Sequence variables or a statement that it can't be made to work.
I believe that setting defines what volume will be the BOOT / OS Drive Letter. Some people were getting D:\WINDOWS as their boot volume drive letter. Setting to true means whatever was the System Drive letter (usually C) in the image will remain as such
after it was was applied, setting it to false will make the system have the same drive letter arrangement as what Windows PE detects. In my case I set it to false so that no matter what the new VHD file setup as drive C will be the system drive. I'll set it
to true on the next deployment but I expect there to be no difference, because in both PE and the WIM the installation volume is the C:.
We are talking about the DRIVE LETTERS Windows PE SCCM OSD is using for it's temporary files - and how we can manipulate these locations using OSD Task Sequence Variables, so the Apply OS doesn't try and clean up files that are not there
- and fail with an error if you have added a VHD Native Boot volume.
This OSDPreserveDriveLetter setting isn't having any effect on the problem here.
I believe that Format step is setting some task variables used by the OSD Deployment process - telling it where to store it's temporary files. However between the Format Disks and Apply operating system steps the OSD Task Sequence isn't picking up on the
fact what was the C:\ after Format HDD step is now the D:\ .
A developer who has an understanding of how the OSD boot process executes in order would be able to see what's going on here.
MCSE,MCNE,SCO,Sair Linux/GNU, Open source-enthusiast. -
Hi,
Although the Driver Utility Task Sequence is working fine as expected, i have noticed that after initiating the Driver Utility from from the Software Center it takes quite a long time to start the installation of the drivers and few Apps which are in chain
I have pasted the log from a Computer which shows that it checks/Processes all the packages which are in the T/s and that is where it spends the time, although for this model it has to install just 3-4 drivers
Can we do something about this, to make the installation process just checks/Examines the drivers which are associated under its Specific Model Tree and saves time. ( Fyi there are around 14 Different Models of Laptops/Desktops which are separated
by folder and a WQL Query to identify the Model.
could not paste the log file as its too long
Thank you,
Tanoj
OSLM ENGINEER - SCCM 2007 & 2012Is there a specific need that you need to update the already installed drivers or is this just something that someone
has always done and it will always be done? Give it a thought for a moment.
We dont upgrade the already installed Drivers, its just installed when a machine is newly imaged / reimaged
so whenever a new image is being engineered, simultaneously we create a new T/s with updated drivers and that goes to production along with the new image release
Thank you all for your replies, looks like the only option at this point is to workaround with splitting the T/s
Regards
Tanoj
OSLM ENGINEER - SCCM 2007 & 2012 -
Failed to run task sequence - 80004005. DNS working though.
I seem to be getting a fairly common generic error but with possibly with a slight difference then some of the other problems/answers I have seen. Generally it looks like this is a DNS issue but I am not sure in my case.
Let me 1<sup>st</sup> describe my infrastructure and what I am trying to accomplish. System Center 2012 R2, trying to deploy server 2012. We use PKI on the main MPs/DPs. I have another DP that I will use for OSD content that
won’t use PKI. I am 1<sup>st</sup> attempting to use boot media, vs PXE, to image a computer. I have distributed the content to the DP, created a boot media USB and everything looks good there as far as I can tell. My boot media
selects the PKI MP and we have created the client cert and I direct it to the non-http DP. The process seems to accept the certificate and the boot media creation completes. Next boot off the media on the computer and drop into Windows PE where
I can manually enter the IP information. When I click next the process fails.
Error:
Failed to Run Task Sequence
An error occurred while retrieving policy for this computer (0x80004005).
So starting some of the troubleshooting I F8.
-Can I ping the SCCM site servers? Yes, I can ping, both short and FQDN, the primary, MP, DP.
Looking at the SMSTSLog I see the following lines/errors.
1)Failed to open PXE registry key. Not a PXE boot.
2)Failed to find the source drive where WinPE was booted from
But then the next line is: Executing from Media WinPE
These 2 are at the top of the log and the process seems to continue on with the IP and variable information. These are the lines of information later in the log with the error(s):
-CLibSMSMessageWinHTTPTransport::Send:URL: (my MP)
-In SSL, but with no client cert
-Error. Received 0x80072ee7 from WinHttpSendRequest.
-Hr,HRESULT=80072ee7
-sending with winhttp failed, 80072ee7
-m_pHttp Transport -> (etc….)
-MPKeyInformation.RequestMPKeyInformationForMedia
-Failed to get information of MP: https//(my MP)
So I am wondering where I start. I don’t see that unknown host line that seems to indicate that it is a DNS issue. I see some stuff about the in SSL but with no cert. Does this mean that the cert we had to create isn’t working correctly?
We pretty much followed
http://www.jamesbannanit.com/2012/05/how-to-build-and-capture-in-configuration-manager-2012-using-https/
I have also looked through this
http://blogs.technet.com/b/configurationmgr/archive/2009/07/27/a-step-by-step-for-using-osd-through-system-center-configuration-manager-2007.aspx
And I have pretty much everything done there except a network access account. Looking at my settings I am set to, “Use the computer account of the Configuration Manager client” However, my computer I am trying to image is a “WORKGROUP” and not
joining the domain. But.. am I really getting that far in the process? Would I be failing to get policy because of this or does this just come into play when I try to get the OS from the DP?Have you seen this thread?
http://social.technet.microsoft.com/Forums/systemcenter/en-US/528c2b54-55ef-4926-bebb-f73ca18a059b/trouble-deploying-windows-7-using-osd-using-pxe-in-sccm-2007-sp2-r3-error-80072ee7?forum=configmgrosd
I have some free manuals http://1drv.ms/1kk6u6j -
How to use two different boot images in the same task sequence
I have a need to use Two boot images in the same task sequence. The reason is I'm deploying ZTI to McAfee encrypted devices which I have already done with McAfee v6 Encryption successfully.
Here's where my problem comes in. We are about to deploy McAfee v7 which means we will have a mix of v6 and v7 in our environment. I must have two special Boot images one with v6 drivers and one with v7 drivers in order for my process to work. I don't see
a way right now to assign more than one boot image to a task sequence. Is there any way to do this?
If I can't do that then I will have to create two task sequences and target collections based on the Endpoint Encryption version to deploy to.
If anyone has suggestions it would be much appreciated. Thank youHave you tested copying those files to %windir%\system32\drivers during the WinPE session (just enable commandline support to your boot image) to see if they need to be in there before the OS start? Test that and if they don't need to be there during the
boot up of WinPE then:
Create two packages (v6 and v7)
"Run command line", use the package created earlier and just use "copy /Y .\*.* %windir%\system32\drivers" ...again, this should be run according to your needs, variable or some other check like I said -
How can I stop a task sequence if a custom HTA preflight check fails?
In our currently deployment method, we launch an HTA program before initiating the OSD process. This is only when run from the RAP menu, not via PXE. When a user initiates OSD through that menu, they get a message prompting them to close Outlook, and
a countdown of 5 mins, then OSD starts. They also have the ability to click on an 'OK' button to proceed on their own.
I've created a new script which checks WMI if Outlook and/or OCS are open, and if the machine is running on battery, spit out a "Failed" response and stop the HTA. I've also added a "recheck" button to re-do the check, and an 'OK
button if people jsut want to continue.
I'm curious if there is a way to prevent the task sequence from continuing if any of those conditions arent met. Currently it just pops up and says "Failed, Cannot conitue", but if they close the window, the task sequence thinks the program
has run, and the OSD migration starts. I'd like to be able and get the script to cancel the OSD process if a check fails.
Has anyone had success with this, using WINXP? I'd use the MS pre-flight check but it's only for WIN7.Interesting. Thanks for the response. Is there anybody out there that can assist with VBS part of the solution?
Here's the code I'm working with. Currently the battery piece isnt working as it should but I can figure that our, eventually. I'd like to get Jason's proposed solution in the code. If this isn't the right place, I'll take this somewhere
else.
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>OSD Preflight checks</title>
<HTA:APPLICATION
APPLICATIONNAME="OSD Preflight checks"
ID="objOSDPreReqChecks"
SCROLL="no"
CONTEXTMENU="no"
SINGLEINSTANCE="no"
MAXIMIZEBUTTON="no"
MINIMIZEBUTTON="no"
WINDOWSTATE="normal"/>
<!-- #region STYLEs-->
<style type="text/css">
H1{color:Black;text-align:center;font-family: Arial, Helvetica, sans-serif;font-size: 26px;}
p{font-family:"Arial";font-size:10px;}
fail{color:Red;text-align:center;}
.Version {float:left; font-size:1.0em;font-style:italic;color:#888888;font-weight:bold;}
.Header1 {width: 180px; text-align: right;font-weight:bold;}<!-- '1st column heading -->
H2 {font-family: Arial, Helvetica, sans-serif; text-align: center;}
H3 {font-style: italic;}
.style2 {width: 180px; text-align: left;}
.Header2 {width: 150px; text-align: right;font-weight:bold;}<!-- '2nd column heading -->
.style4 {width: 410px; text-align: left;}
.StatusBar
font-family: Arial, Helvetica, sans-serif;
text-align: center;
.hidden {display: none; visibility: hidden;}
</style><!-- #endregion -->
</head>
<script language="VBScript" type="text/vbscript">
'======================================================================================
' Script
' Version
' Purpose To check a machine is suitable for taking an OS deployment
'======================================================================================
'Features
' Modular design
' Verbose "Debug Mode"
' In-built data validation
' Custom error handling
' Custom error codes - 90x0
' Generic WMI handler
'BUGfix: Change CLng to CDbl to avoid overflow (in GetRAM)
'fixed - moved head section to top to become head > script > body
'fixed - fCheckModel display with leading ,
'fixed - fgetmodels dictionary list
Option Explicit
' #region GLOBAL DECLARATIONS: Persistent fold region
'======================================================================================
'GLOBAL Vars
'Things to just display (in GUI)
Dim strRAM
Dim strCPUInfo
Dim strCPUName
Dim strCPUDesc
Dim iCPUCount
Dim iCPUCoreCount
Dim iRAM
Dim strBIOSver, strBIOSDate, strBIOSInfo
'Time related
Dim TimerInterval 'timer to refresh HTA at start
Dim iTimer 'abort timer
Const iAbortTimeout=300000 'delay before window closes (in milliseconds)
Dim pbTimerID
Dim pbHTML
Dim pbWaitTime
Dim pbHeight
Dim pbWidth
Dim pbBorder
Dim pbUnloadedColor
Dim pbLoadedColor
Dim pbStartTime
'Dictionary
Dim objModelsDict,colKeys,strKey 'models
Dim objApprovedMakesDict
'Misc GLOBAL vars
Dim blnDebug 'set TRUE to trigger debug mode
Dim bAbortBuild 'Boolean flag to abort or not abort
Dim strTemp 'throwaway/scratch
Dim strNamespace 'wmi default namespace for ANY machine
Dim strComputer 'wmi reference to current machine, just .
Dim strService 'WMI service
Dim strQuery 'custom WQL
Dim ErrMsg 'custom error messages
Dim iErrMode 'State machine for error mode
Dim lFlags 'WMI flag
Dim strDisks
'Pre-requisites - things that will cause build to abort if values do not meet spec
Dim strHTAVendor 'Make of hardware
Dim strHTAVendorState
Dim strHTAModel 'Model of hardware
Dim strHTAModelState 'Model state
Dim strHTARAM 'RAM
Dim strHTARAMState 'RAM state
Dim strHTACPUSpeed 'Processor speed
Dim strHTACPUCores 'Number of cores
Dim strHTACPUFullInfo 'CPU + cores
Dim strHTAHDD 'Disk info
Dim strHTAHDDState 'Disk state
Dim strHTACheckRAW 'NTFS check
Dim strHTAArchitecture 'Processor support
Dim strHTAProduct 'Product ID
Dim strHTAOutlook 'Outlook running
Dim strHTAOutlookState 'Outlook state
Dim strHTABattery 'Battery check
Dim strHTABatteryState 'Battery state
'for WQL filters
Dim strWQLPCInfo 'Pre-req - (1) for various inc. domain role (servers)
Dim strWQLRAM 'Pre-req - (2) RAM
Dim strWQLCPU 'Pre-req - CPU speed string (not int)
Dim strWQLBootOrder 'Pre-req - Boot order string
Dim strWQLSATAMode 'Pre-req - HDD mode
Dim strWQLGenericBIOS
Dim strWQLCPUCount 'Pre-req - how many CPUs
Dim strWQLCPUInfo
Dim strWQLFSType 'Pre-req - Check HDD not RAW (i.e. is NTFS)
Dim strWQLDisks 'Disks
Dim strWQLChassis 'Machine type
Dim strWQLID 'Unique code from OEM
Dim strWQLProc 'is Outlook running = False
Dim strWQLBattery 'is on Battery = False
'State
Const cProblem = " Problem!"
Const cRunAgain =" RunCheck: Run System Check Again"
Const cSuccess = " Success!"
Const cPassed=" Pass"
Const cFail=" Fail"
'Pre-requisite to check: SET VALUES HERE vvvvvvvvvvvvvvvv
Const cApprovedOEM="Hewlett-Packard"
Const LegacyOEM1="Dell Inc."
Const LegacyOEM2="IBM"
Const cMinimumMemoryMB = 1000 'RAM in MB
'Const cMinimumMemoryMB = 1000000 'force fail test data RAM in MB
Const cMinFS="NTFS"
' Const cMinFS="HPFS" 'force fail test data
Const iMinCores=1
'Const iMinCores=10099 'force fail cores test data
Const iMinCPUSpeed=2 '20 'in GHz
'Const iMinCPUSpeed=90000 'in GHz
Const iMinCPUArch=32
'Const iMinCPUArch=64
' #endregion
' To hide anything use ID.className = "hidden", to show set to "", e.g. NotFoundArea.className = "hidden"
Sub Window_Onload
Err.Clear
VersionSpan.InnerText = objOSDPreReqChecks.Version 'Get version
self.focus
self.moveTo 100,100 'Move window top left
StatusBar.InnerText="Validating machine..."
document.body.style.cursor = "wait" 'hourglass cursor
'Call PreflightChecks 'use for testing as a VBS only, otherwise HTA timer will call below
TimerInterval = window.setInterval("PreflightChecks",10)
End Sub
Function PreflightChecks
' #region HEADER NOTES: Persistent fold region
'Version history
'ver 5 OCTOBER 2011 - added error handler
'ver 3rd Nov - removed HPonly queries
'// Solution: Custom Script for use with MDT - Adapted from hardwareinfo.vbs Mikael Nystrom – http://deploymentbunny.com
'Typical BIOS content
'Processor Speed = 2133/1066 MHz
'Boot Order = Network Controller,ATAPI CD-ROM Drive,USB device,Hard Drive,Diskette Drive,PnP Device #2,PnP Device #3,PnP Device #4,PnP Device #5,PnP Device #6,PnP Device #7,PnPe #8,PnP Device #9,PnP Device #10,PnP Device #11
'SATA (disk) mode: *IDE,--,RAID,-- or IDE,*AHCI,RAID
'On Error Resume Next
' #endregion
' #region CONSTANTS: Persistent fold region
'======================================================================================
'Fields available in HP BIOS
Const sAsset = "Notebook Asset Tag"
Const sOwner = "Notebook Ownership Tag"
Const sMan = "Manufacturer"
Const sNoteModel = "Notebook Model"
Const sCPU = "Processor Type"
Const sCPUSpeed = "Processor Speed"
Const sRAM = "Memory Size"
Const sModel = "Product Name"
Const sBIOSName ="System BIOS"
Const sBIOSVer = "BIOS Version"
Const sBIOSDate = "BIOS Date"
'Other BIOS stuff you could use too
'Const sOwnerTag = "Enter Ownership Tag"
'Const sBIOS = "PCID"
'Const sBIOS = "Define Custom URL"
'Const sBIOS = "Set Alarm Time"
'Const sBIOS = "PCID Version"
Const TextMode="1" 'text case sensitive for dict obj
'WMI core constants
Const wbemFlagReturnImmediately = 16 'wmi - Causes the call to return immediately.
Const wbemFlagForwardOnly = 32 'wmi - Causes a forward-only enumerator to be returned.
'Forward-only enumerators are generally much faster and
'use less memory than conventional enumerators, but don't allow calls to SWbemObject.Clone_
'Advisory config values - as in "you want to the change these"
Dim strHTABootOrder
Dim strHTASATAMode
'Dim strHTACPU
' #endregion
'======================================================================================
' #region WQL: Persistent fold region
lFlags = wbemFlagReturnImmediately + wbemFlagForwardOnly
'Queries of things to check (HP)
strWQLBootOrder = "select Name, value from HP_BIOSSetting where Name='Boot order'"
strWQLSATAMode = "select Name, value from HP_BIOSSetting where (Name='SATA emulation' or name='SATA device mode')"
strWQLDisks ="SELECT * FROM Win32_DiskDrive where mediatype like 'Fixed%hard disk%'" 'win32_disk only avail after W7
strWQLFSType ="SELECT * from Win32_LogicalDisk where DriveType='3'" 'only bother with HDDs
'Generic WMI query strings
strWQLGenericBIOS="SELECT Manufacturer,SMBIOSBIOSVersion,ReleaseDate FROM Win32_BIOS WHERE PrimaryBIOS = True"
strWQLCPUCount= "SELECT NumberOfProcessors,NumberOfLogicalProcessors from Win32_ComputerSystem"
strWQLCPUInfo="SELECT Name,DataWidth,description,MaxClockSpeed,NumberofCores,NumberOfLogicalProcessors from Win32_Processor"
strWQLPCInfo="SELECT Domain,DomainRole,SystemType,Manufacturer,Model,TotalPhysicalMemory FROM Win32_ComputerSystem"
' strWQLPCInfo="SELECT Domain,DomainRole,SystemType,Manufacturer FROM Win32_ComputerSystem"
strWQLChassis="SELECT ChassisTypes from Win32_SystemEnclosure"
strWQLID="SELECT IdentifyingNumber,UUID from Win32_ComputerSystemProduct"
strWQLRAM="SELECT * FROM Win32_PhysicalMemory"
strWQLProc="SELECT * FROM Win32_Process"
strWQLBattery="SELECT * FROM BatteryStatus Where Voltage > 0"
' #endregion
' #region MAIN algorithm
'=====================================================================================================
' MAIN
'Algorithm
'1) Check make (vendor)
'2) Check model (in list)
'3) Check RAM >x
'4) Check HDD TYPE (HDD is not RAW)
'5) Check CPU architecture
'6) Check outlook
'7) Check battery
'=====================================================================================================
'Initialise
window.clearInterval(TimerInterval) 'Reset timer to 0
' blnDebug=True
blnDebug=False
bAbortBuild=False 'default to DON'T abort
' bAbortBuild=True
'Build list of approved vendors
Set objApprovedMakesDict = CreateObject("Scripting.Dictionary")
objApprovedMakesDict.comparemode=VBTextCompare
objApprovedMakesDict.add cApprovedOEM,"OK"
objApprovedMakesDict.add LegacyOEM1,"OK"
objApprovedMakesDict.add LegacyOEM2,"OK"
objApprovedMakesDict.add "Lenovo","Testdata"
If blnDebug Then Stop
'1) all machines check make
strHTAVendor=fCheckVendor(strWQLGenericBIOS) 'check vendor in BIOS - if vendor not approved ABORT without proceeding
If bAbortBuild=True Then
StatusBar.InnerText=StatusBar.InnerText & VbCrLf & "FATAL ERROR - goodbye cruel world"
iTimer = window.setTimeout("Abort", iAbortTimeout, "VBScript")
Else
StatusBar.InnerText="Vendor: " & strHTAVendor & vbTab & " " & strHTAVendorState
'2) Discover current Model
strHTAModel=fGetModelName(strWQLPCInfo) 'get model name from WMI
strHTAModel=fUniversalCheckData(strHTAModel,"'Discover Model - fGetModelName'") 'validate
Call fGetModels 'get list of all valid models (from text file)
strHTAModel=fCheckModel(strHTAModel)
'2a) Model number (optional)
strHTAProduct=fGetComputerSystemProdIDNumber(strWQLID) 'manufacturer's product ID
strHTAProduct=fUniversalCheckData(strHTAProduct,"'Discover ID - fGetComputerSystemProdIDNumber'")
' StatusBar.InnerText=StatusBar.InnerText & VbCrLf & vbTab & "Product Code: " & vbTab & strHTAProduct
'3) Check installed Memory
strHTARAM=fGetRAM(strWQLRAM) 'find RAM size
strHTARAM=fUniversalCheckData(strHTARAM,"'Detect RAM - fCheckRAM'")
strHTARAM=fCheckRAM(strHTARAM) 'check RAM meets req
If strHTARAMState=cFail Then Exit Function
'4) Disk format IS NTFS
strDisks=fGetDrives(strWQLFSType) 'Get formatting info for all drives
strHTACheckRAW=fUniversalCheckData(strDisks,"'Detect filesystem - fCheckNTFS'") 'Validate data
strHTACheckRAW=fCheckNTFS(strDisks) 'Check FS format is acceptable (not RAW)
If strHTACheckRAW=cFail Then Exit Function
'Generic CPU calls
strHTACPUFullInfo="CPUs:" & fGetCPUInfo(strWQLCPUInfo) & " with CPU cores:" & iCPUCoreCount
strBIOSInfo="BIOS version: " & strBIOSver & ", dated " & strBIOSDate
'5a) CPU Speed check (info from http://www.robvanderwoude.com/wmiexamples.php)
strCPUInfo=WMI(strWQLCPUInfo,strNamespace) 'Get CPU details
strTemp=split(strCPUInfo,"@"): strHTACPUSpeed=strTemp(1)
strHTACPUSpeed=fUniversalCheckData(strHTACPUSpeed,"'Check processor - fCheckCPUSpeed'") 'Validate data
strHTACPUSpeed=fCheckCPUSpeed(strHTACPUSpeed) 'Check CPU clock speed
'5b) cores check
strHTACPUCores=fUniversalCheckData(iCPUCoreCount,"Check core count - fCheckCores") 'Validate data
iCPUCoreCount=fCheckCores(iCPUCoreCount) 'pass or fail?
'5c) CPU address width
strHTAArchitecture=fUniversalCheckData(strHTAArchitecture,"Check core count - fCheckCores") 'Validate data
strHTAArchitecture=fCheckCPUArch(strHTAArchitecture)
'6) Check outlook
strHTAOutlook=fCheckProcess(strWQLProc)
'7) Check Battery
strHTABattery=fCheckBattery(strWQLBattery)
'end checkss
document.body.style.cursor = "default"
'Display hardware values in GUI (in table)
Vendor.innerhtml = strHTAVendor 'Use str...var..STATE if you want Pass/fail text instead
Model.innerhtml = strHTAModel
Product.innerhtml = strHTAProduct
RAM.innerhtml = strHTARAM
CPUspeed.innerhtml = strHTACPUSpeed
CPUInfo.innerhtml = strHTACPUFullInfo
HDDFS.innerhtml = strHTACheckRAW
CapableArchitecture.innerhtml=strHTAArchitecture
BIOSversion.innerhtml = strBIOSver
BIOSDate.innerhtml = strBIOSDate' CPUName.innerhtml = strCPUDesc 'GetCPUName
End If
'======================================================================================
' #endregion
End Function
'generic WMI queries, by field and namespace
Function WMI(strQuery,strNameSpace)
'Aim: generic WMI calls
'return value of BIOS
On Error Resume Next
Dim colItems,objItem
Dim objWMI
Const strService = "winmgmts:{impersonationlevel=impersonate}//" 'binding to WMI
Const strComputer = "." 'this machine
Set objWMI = GetObject(strService & strComputer & strNamespace) 'GLOBAL wmi
Set colItems = objWMI.ExecQuery(strQuery,,lFlags)
For Each objItem In colItems
If Err Then
StatusBar.InnerText=StatusBar.InnerText & VbCrLf & "WMI query: " & strQuery & " in " & strNamespace & objItem.Name
Call ErrHandler("WMI error " & strQuery,1)
Else
WMI=objItem.Name 'Return value
End If
Next
End Function
Function fGetModelName(strWQLPCInfo)
'Aim: Get model name from BIOS - WMI field sometimes varies if laptop, so try two
'Return STRING: Model string from BIOS or "UNKNOWN" if null
On Error Resume Next
Dim colPCInfo,objPCItem
Dim strModel
Set colPCInfo = GetObject("winmgmts:").ExecQuery(strWQLPCInfo,"WQL",lFlags)
If Err Then
Call ErrHandler("fGetModelName: Error querying WMI " & strWQLPCInfo,2)
Else
For Each objPCItem In colPCInfo
If Not IsNull(objPCItem.Model) Then
strModel=objPCItem.Model
' iRAM=objPCItem.TotalPhysicalMemory
Else
If (strHTAVendor=cApprovedOEM And IsLaptop = True) Then ' resort to HP specific query for older laptops
'Notebook
strModel=QueryHPBIOS(sNoteModel)
if strModel="" then strModel=QueryHPBIOS(sModel) 'try alt value
Else
strModel=QueryHPBIOS(sModel)
End If
End If
Next
End If
If strModel = "" Then
fGetModelName = "UNKNOWN"
Model.style.visibility="hidden"
Else
fGetModelName=strModel
End If
End Function
'====================================================
'====================================================
Function fGetRAM(strQuery)
'Aim: get RAM installed. NB Win32_ComputerSystem::TotalPhysicalMemory may not be accurate
'Return integer
On Error Resume Next 'equiv to Err.Clear
Dim colItems, item
Dim iTotalMemory
Set colItems = GetObject("winmgmts:").ExecQuery(strQuery,"WQL",lFlags)
If Err Then
Call ErrHandler("fGetRAM: Error querying " & strQuery,2)
Else
iTotalMemory = 0
For Each item In colItems
iTotalMemory = iTotalMemory + CDBL(item.Capacity)/(1024^2)
Next
End If
If iTotalMemory = "" Then
fGetRAM = "RAM UNKNOWN"
RAM.style.visibility="hidden"
Else
fGetRAM=iTotalMemory
End If
End Function
'====================================================
'====================================================
Function fGetCPUInfo(strQuery)
'Aim: query WMI for CPU info - number and number of cores
'Return: function=CPU count, var for the cores: iCPUCoreCount, strHTAArchitecture, strCPUDesc
On Error Resume Next
Dim colItems, objItem
Dim NumberOfProcessors
Set colItems = GetObject("winmgmts:").ExecQuery(strQuery,"WQL",lFlags)
If Err Then
Call ErrHandler("GetCPUInfo: Error querying " & strQuery,2)
Else
For Each objItem In colItems
If Err Then
Else
If Not IsNull(objItem.NumberOfCores) Then
NumberOfProcessors = Trim(objItem.NumberOfCores) 'NumberOfProcessors
End If
If Not IsNull(objItem.NumberOfLogicalProcessors) Then
iCPUCoreCount = Int(Trim(objItem.NumberOfLogicalProcessors))
End If
If Not IsNull(objItem.DataWidth) Then
strHTAArchitecture=Trim(objItem.DataWidth) & "-bit"
End If
If Not IsNull(objItem.description) Then
strCPUDesc = Trim(objItem.description) 'cpu name
End If
End If
Next
If NumberOfProcessors = "" Then
NumberOfProcessors = "UNKNOWN"
End If
fGetCPUInfo = Int(NumberOfProcessors)
' iCPUCoreCount = Int(NumberOfLogicalProcessors)
End If
End Function
'====================================================
'====================================================
Function fGetComputerSystemProdIDNumber(strWQLID)
'Aim: Get UUID from Win32_ComputerSystemProduct
'Return: great big integer
Dim colSys,objSys
Dim strUUID
On Error resume next
Set colSys = GetObject("winmgmts:").ExecQuery(strWQLID,"WQL",lFlags)
If Err then
Call ErrHandler("fGetComputerSystemProdIDNumber: Error querying " & strWQLID,2)
Else
For Each objSys In colSys
If Not IsNull(objSys.IdentifyingNumber) Then
strUUID = Trim(objSys.IdentifyingNumber)
End If
Next
If strUUID = "" Then
fGetComputerSystemProdIDNumber = "UNKNOWN"
Else
fGetComputerSystemProdIDNumber = strUUID
End If
End If
End Function
'=================================================================================
'=================================================================================
Function fGetDrives(strQuery)
Dim colDisks,objHDD
Dim strDriveType, strDiskSize, strDisk
Dim strDiskFSType
Dim iGBUnits
On Error Resume Next
iGBUnits=1073741824
Dim iRAW
iRAW=0
Set colDisks = GetObject("winmgmts:").ExecQuery(strQuery)
For Each objHDD In colDisks
Select Case objHDD.DriveType
Case 1 strDriveType = "Drive could not be determined."
Case 2 strDriveType = "Removable Drive"
Case 3 strDriveType = "Local hard disk."
Case 4 strDriveType = "Network disk."
Case 5 strDriveType = "Compact disk (CD)"
Case 6 strDriveType = "RAM disk."
Case Else strDriveType = "Drive type Problem."
End Select
strDiskFSType = objHDD.FileSystem
'Find C
If objHDD.Name="C:" Then
If isNull(objHDD.FreeSpace) Then
If blnDebug=True then Call ErrHandler("ALERT!! Volume " & objHDD.Name & "is RAW",1) 'Abort/clean
fCheckDrives="ALERT!! Volume " & objHDD.Name & "is RAW"
End If
End If
strDiskSize = Int(objHDD.Size /iGBUnits) & "GB" 'calc size of disk
strDisk = strDisk & VbCrLf & "Vol " & objHDD.Name & " (" & strDriveType & ") size: " & strDiskSize & " (free: " & Int(objHDD.FreeSpace /iGBUnits) & "GB), " & strDiskFSType
fGetDrives=strDisk
Next
If (Err.Number <>0) Then
Call ErrHandler("WMI Property Query Error: [" & Err.Number & "]",2)
fGetDrives = -1
Exit Function
End If
End Function
'=================================================================================
'=================================================================================
Function fUniversalCheckData(varData,strStage) 'template
'Aim: Check value passed...
'is not blank
'is in range x..y
'spelt OK
'is in a list
'format is text, numeric
'return: string: the original value
On Error Resume Next
Dim Err
if blnDebug Then StatusBar.InnerText = StatusBar.InnerText & VbCrLf & "Validating " & strStage & " data..."
If Err Then
Call ErrHandler("WARNING: Error discovering value in " & strStage,2) '1=Quit,2=Warn
strHTAModel="Unknown"
Else
Select Case varData
Case IsEmpty(varData) Or IsNull(varData)
Call ErrHandler("WARNING: Error in "& strStage,2) '1=Quit,2=Warn
fUniversalCheckData="Unknown"
Case IsNumeric(varData)
If varData<0 Then
Call ErrHandler("WARNING: Value negative"& strStage,2) '1=Quit,2=Warn
fUniversalCheckData="Unknown"
End if
' & varData &
Case IsDate(varData)
Case Else
fUniversalCheckData=varData 'Data OK - return value unchanged
End Select
End If
End Function
'=================================================================================
'Checks - follow if true DO, if false warn/abort
'=================================================================================
Function fCheckBattery(strQuery)
'Aim: Find if battery is running
'Return pass/fail
On Error Resume Next 'equiv to Err.Clear
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
Dim colItems, item
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\WMI")
Set colItems = objWMIService.ExecQuery("SELECT * FROM BatteryStatus Where Voltage > 0", "WQL", _
wbemFlagReturnImmediately + wbemFlagForwardOnly)
For Each item In colItems
if objItem.PowerOnline = True Then
strHTABattery=objItem.PowerOnline
strHTABatteryState = cFail
Err.Raise 9010,"fCheckBattery",strHTABattery & " Laptop running on battery. OSD Cannot continue."
Call ErrHandler(ucase(strHTABatteryState) & ": " & Err.Description & " (Code: " & Err.Number & " - " & Err.Source & ")",1)
StatusBar.InnerText=StatusBar.InnerText & VbCrLf & "FATAL ERROR - Laptop on Battery. Please plug into an outlet before proceeding."
iTimer = window.setTimeout("Abort", iAbortTimeout, "VBScript")
Else
strHTABatteryState = cPassed
End if
Next
fCheckBattery=strHTABattery
End Function
'====================================================
Function fCheckProcess(strQuery)
'Aim: Find if outlook is running
'Return pass/fail
On Error Resume Next 'equiv to Err.Clear
Dim colItems, item
Set colItems = GetObject("winmgmts:").ExecQuery(strQuery,"WQL",lFlags)
For Each item In colItems
if item.Name = "OUTLOOK.EXE" Then
strHTAOutlook=item.Name
strHTAOutlookState = cFail
Err.Raise 9010,"fCheckOutlook",strHTAOutlook & " running. OSD Cannot continue."
Call ErrHandler(ucase(strHTAOutlookState) & ": " & Err.Description & " (Code: " & Err.Number & " - " & Err.Source & ")",1)
StatusBar.InnerText=StatusBar.InnerText & VbCrLf & "FATAL ERROR - Outlook Running, please close outlook before proceeding."
iTimer = window.setTimeout("Abort", iAbortTimeout, "VBScript")
Elseif item.Name = "communicator.exe" Then
strHTAOutlook=item.Name
strHTAOutlookState = cFail
Err.Raise 9010,"fCheckOutlook",strHTAOutlook & " running. OSD Cannot continue."
Call ErrHandler(ucase(strHTAOutlookState) & ": " & Err.Description & " (Code: " & Err.Number & " - " & Err.Source & ")",1)
StatusBar.InnerText=StatusBar.InnerText & VbCrLf & "FATAL ERROR - Communicator Running, please close OCS before proceeding."
iTimer = window.setTimeout("Abort", iAbortTimeout, "VBScript")
Else
strHTAOutlookState = cPassed
End if
Next
fCheckProcess=strHTAOutlook
End Function
'====================================================
'1 - Make
Function fCheckVendor(strVendor)
'Aim: Check make is one the OS/build is designed For
'Return: STRINGS for "Make", BIOS version and BIOS date (generic): strHTAVendorState pass or fail
On Error Resume Next
Dim colItems,objItem
Set colItems = GetObject("winmgmts:").ExecQuery(strVendor, "WQL", lFlags)
For Each objItem In colItems
strHTAVendor=objItem.Manufacturer
if objApprovedMakesDict.exists(strHTAVendor) then
strBIOSver=objItem.SMBIOSBIOSVersion
strBIOSDate=Mid( objItem.ReleaseDate, 5, 2 ) & "/" & Mid( objItem.ReleaseDate, 7, 2 ) & "/" & Left( objItem.ReleaseDate, 4 )
strHTAVendorState=cPassed
Else
strHTAVendorState=cFail
Err.Raise 9010,"fCheckVendor",strHTAVendor & " found. The build will not work on this make of hardware"
Call ErrHandler(ucase(strHTAVendorState) & ": " & Err.Description & " (Code: " & Err.Number & " - " & Err.Source & ")",1)
bAbortBuild=True
end if
Next
fCheckVendor=strHTAVendor
End Function
'=================================================================================
'=================================================================================
'2 - Models check
Function fCheckModel(strThisModel)
'Aim Check target machine is in list of models
'Return string
On Error Resume Next
StatusBar.InnerText=StatusBar.InnerText & VbCrLf & "Checking model..." & VbCrLf
If objModelsDict.exists(trim(strThisModel)) then ' if current model in objDict then huzzah
strHTAModelState=cPassed
StatusBar.InnerText=StatusBar.InnerText & vbTab & "Model detected: " & vbTab & strHTAModelState
Else
strHTAModelState=cFail
Err.Raise 9010,"fCheckModel",strThisModel & " found. The build will not work on this model of hardware"
Call ErrHandler(ucase(strHTAModelState) & ": " & Err.Description & " (Code: " & Err.Number & " - " & Err.Source & ")",1)
end if
fCheckModel=strHTAModel
End Function
'=================================================================================
'=================================================================================
'3 - RAM
Function fCheckRAM(strRAM)
'Aim: Check installed RAM > x
'Return string digits with units, e.g. 4GB
'use strHTARAM for value
'==================================================================
' Memory Preflight Check (from MDT2012)
'==================================================================
On Error Resume Next
StatusBar.InnerText=StatusBar.InnerText & VbCrLf & "Checking RAM..."
If Err.Number <> 0 Then
Call ErrHandler("Error occurred while calculating computer's memory.",2)
End If
fCheckRAM = Int(strRAM/1024) & "GB" 'format in GB
If Int(strRAM) > cMinimumMemoryMB Then
strHTARAMState=cPassed 'Sufficient memory - show whole number in GB"
StatusBar.InnerText=StatusBar.InnerText & vbTab & "RAM installed: " & vbTab & strHTARAMState
Else
strHTARAMState=cFail
Err.Raise 9030 ,"fCheckRAM","Not enough memory in this machine!" & " Required physical memory is: " & cMinimumMemoryMB & " MB."
Call ErrHandler(ucase(strHTARAMState) & ": " & Err.Description & " (Code: " & Err.Number & " - " & Err.Source & ")",1) 'abort build
End If
End Function
'=================================================================================
'=================================================================================
'4 - NTFS disk
Function fCheckNTFS(strDiskFS)
'Aim: Check HDD is NTFS
'Return string
On Error Resume Next
StatusBar.InnerText=StatusBar.InnerText & VbCrLf & "Checking file system is not RAW..."
If Instr(1,strDiskFS,cMinFS,VBTextCompare)<>0 Then
fCheckNTFS=cMinFS 'disk format is OK (NTFS)
StatusBar.InnerText=StatusBar.InnerText & vbTab & " File system: " & cPassed
Else
fCheckNTFS=cFail
Err.Raise 9040 ,"fCheckNTFS","WARNING: Disk not correct file-system. Type required is: " & cMinFS & "." & VbCrLf & _
"The deployment will fail unless you reformat the target disk immediately."
Call ErrHandler(Err.Description & " (Code: " & Err.Number & " - " & Err.Source & ")",2) 'halt build
End If
End Function
'====================================================
'=================================================================================
'5 - CPU checks
'=================================================================================
Function fCheckCPUSpeed(strCPU) 'any HW
'Aim: Check CPU speed
'Return string = number + appropriate units, e.g. 5HGz (strCPU)
On Error Resume Next
StatusBar.InnerText=StatusBar.InnerText & VbCrLf & "Checking CPU spec..."
Select Case Right(strCPU,3) 'check units
Case "MHz"
strCPU=Left(strCPU,4)/1000 'reformat to GHz
Case "GHz"
strCPU=strCPU 'unit already OK
Case Else
Call ErrHandler("CPU units are unknown",2)
End Select
'Check clock speed
If Int(Left(trim(strCPU),1))>=iMinCPUSpeed Then
fCheckCPUSpeed=strHTACPUSpeed 'CPU is fine i.e don't change value
StatusBar.InnerText=StatusBar.InnerText & vbTab & "CPU Speed: " & cPassed
Else
fCheckCPUSpeed=cFail 'already in GHz
Err.Raise 9050,"fCheckCPUSpeed","CPU speed pre-requisite failed. Minimum processor clock speed is: " & iMinCPUSpeed
Call ErrHandler(Err.Description & " (Code: " & Err.Number & " - " & Err.Source & ")",1) 'halt build
End If
End Function
'=================================================================================
'=================================================================================
Function fCheckCPUArch(strCPUArch) 'any HW
'Aim: Check CPU width
'Return string
On Error Resume Next
StatusBar.InnerText=StatusBar.InnerText & VbCrLf & "Checking CPU bus width..."
'Check clock speed
If Int(Left(trim(strCPUArch),2))>=iMinCPUArch Then
fCheckCPUArch=strHTAArchitecture 'CPU is fine i.e don't change value
StatusBar.InnerText=StatusBar.InnerText & vbTab & "CPU width: " & cPassed
Else
fCheckCPUArch=cFail 'already in GHz
Err.Raise 9052,"fCheckCPUArch","CPU width pre-requisite failed. Minimum processor width required is: " & iMinCPUArch
Call ErrHandler(Err.Description & " (Code: " & Err.Number & " - " & Err.Source & ")",1) 'abort build
End If
End Function
'=================================================================================
Function fCheckCores(iCores)
'Aim: Check hardware (CPU) has a minimum number of cores
'Return Integer
On Error Resume Next
StatusBar.InnerText=StatusBar.InnerText & VbCrLf & "Checking CPU cores..."
If iCores>=iMinCores Then
fCheckCores=iCores
StatusBar.InnerText=StatusBar.InnerText & vbTab & "Core count: " & vbTab & cPassed
'StatusBar.InnerText=StatusBar.InnerText & vbTab & "CPU cores: " & cPassed
Else
fCheckCores=cFail
Err.Raise 9051,"fCheckCores","WARNING: Not enough cores on the CPU to support the build. Minimum CPU cores is: " & iMinCores
Call ErrHandler(Err.Description & " (Code: " & Err.Number & " - " & Err.Source & ")",2) 'halt build
End If
End Function
'=================================================================================
'=================================================================================
Function fCheckHPCPUSpeed 'HP ONLY
'Aim: Check CPU speed
'return: string
'Check CPU speed
On Error Resume Next
strWQLCPU = "processor speed"
strTemp=QueryHPBIOS(strWQLCPU,"")
Select Case Right(strTemp,3)
Case "MHz"
strTemp=Left(strTemp,4)/1000 'reformat to GHz
Case "GHz"
strTemp 'is OK
Case Else
Call ErrHandler("CPU is unknown",2)
End Select
'Check clock speed
If strTemp>=iMinCPUSpeed Then
fCheckCPUSpeed= strTemp & "GHz"
Else
Err.Raise 9050,,"CPU speed pre-requisite failed"
Call ErrHandler("CPU is too slow",1)
fCheckCPUSpeed=cFail 'already in GHz
End If
End Function
'=================================================================================
'=================================================================================
Function fGetModels
'Aim: Read external text file
'return: dictionary object - models as key, integer as value e.g. Dell Optiplex,12
'On Error Resume Next
Dim objFSO
Dim objFile
Dim strFile
Dim strEntry
Dim n
Dim strfilepath
Dim iLineCount 'count lines to avoid listing first item with ,.
Set objModelsDict = CreateObject("Scripting.Dictionary")
set objFSO=CreateObject("Scripting.FileSystemObject")
Const ForReading=1
strfilepath = Left(window.location.pathname,InStrRev(window.location.pathname,"\"))
strFile=strfilepath & "Models.txt"
set objFile=objFSO.OpenTextFile(strFile,ForReading)
iLineCount=0
'read in each line of data until you reach the end of the file
do While objFile.AtEndOfStream<>True
strEntry=objFile.ReadLine
'you can now do what ever you want with the line as referenced with the strEntry variable such as
'echoing it back (e.g. wscript.Echo strEntry) or passing it as a variable to a function of subroutine (e.g. MyFunction strEntry)
objModelsDict.comparemode=VBTextCompare
objModelsDict.Add strEntry,iLineCount
iLineCount=iLineCount+1
If blnDebug then
If iLineCount=1 Then
StatusBar.InnerText=trim(strEntry)
Else
StatusBar.InnerText=StatusBar.InnerText & ", " & trim(strEntry) 'list models
End If
End If
Loop
objFile.Close
End Function
'=================================================================================
'=================================================================================
'====================================================
Function ErrHandler(strErrorMsg,iErrMode)
'Aim: to handle error states
' 1 = Abort
' 2 = Warn
'Return 'Appropriate text message explaining the error
'====================================================
Const msgTitle="SCCM Deployment Preflight Checklist"
'On Error Resume Next '< don't use that as we want to KEEP the error properties
'Abort=1
If iErrMode=1 Then
StatusBar.InnerText=strErrorMsg 'overwrite status with Error message
' StatusBar.InnerText=StatusBar.InnerText & VbCrLf & " " & strHTAOutlook & " " & strHTAVendor & " " & strHTAVendorState & _
' VbCrLf & " " & strHTAModel & strHTAModelState & _
' VbCrLf & " " & strHTARAM & strHTARAMState & _
' VbCrLf & " " & strHTAHDD & strHTAHDDState
iTimer = window.setTimeout("Abort", iAbortTimeout, "VBScript") 'Abort (close) after n seconds
'MsgBox strErrorMsg,vbExclamation,msgTitle
'ErrBar.class=""
ElseIf iErrMode=2 Then
'Warning
StatusBar.InnerText=StatusBar.InnerText & VbCrLf & strErrorMsg & " " '& "(" & Err.Description & " :" & Err.Number & ")"',vbExclamation,msgTitle
Err.Clear
End If
End Function
'====================================================
Sub Abort
'Aim: Quit gracefully
window.close()
End Sub
</script>
<!-- #region BODY -->
<body>
<br />
<div>
<span style="version"> <span id="VersionSpan"></span></div>
<div style="text-align: center;">
<H1 style="font-family: Arial, Helvetica, sans-serif; font-size: large; text-align: center; color: #000000; text-transform: capitalize">System information</H1>
<span>
<table border="1" cellspacing="0" cellpadding="0" style="width: 912px"
id="SysInfoTable">
<tr class="h1">
<td align="right" class="Header1" style="width: 76px; height: 18px">
</td>
<td align="right" class="Header1" style="height: 18px"><em id="VendorCaption">Vendor</em></td>
<td align="left" class="style2" style="height: 18px"><span id="Vendor"></span></td>
<td align="right" class="Header2" style="height: 18px"><em id="ModelCaption">Model</em></td>
<td align="center" class="style4" style="width: 400px; height: 18px"><span id="Model"></span></td>
</tr>
<tr>
<td align="right" class="Header1" style="width: 76px">
</td>
<td align="right" class="Header1"><em id="ProductCaption">Product ID</em></td>
<td align="left" class="style2"><span id="Product"></span></td>
<td align="right" class="Header2"><em id="RAMCaption">Memory(in MB)</em></td>
<td align="left" class="style4" style="width: 400px"><span id="RAM"></span></td>
</tr>`
<tr>
<td align="right" class="Header1" style="width: 76px">
</td>
<td align="right" class="Header1"><em id="CPUCaption">CPU speed (in GHz)</em></td>
<td align="left" class="style2"><span id="CPUspeed"></span></td>
<td align="right" class="Header2"><em id="CPUInfoCaption">No: CPU\Cores</em></td>
<td align="left" class="style4" style="width: 400px"><span id="CPUInfo"></span></td>
</tr>
<tr>
<td align="right" class="Header1" style="width: 76px">
</td>
<td align="right" class="Header1"><em id="DiskFSCaption">Filesystem info</em></td>
<td align="left" class="style2"><span id="HDDFS"></span></td>
<td align="right" class="Header2"><em id="CapableArchCaption">Architecture</em></td>
<td align="left" class="style4" style="width: 400px"><span id="CapableArchitecture"></span></td>
</tr>
<tr>
<td align="right" class="Header1" style="width: 76px">
</td>
<td align="right" class="Header1"><em id="BIOSVerCaption">BIOS version</em></td>
<td align="left" class="style2" ><span id="BIOSVERSION"></span></td>
<td align="right" class="Header2"><em id="BIOSDateCaption">BIOS Date</em></td>
<td align="left" class="style4" style="width: 400px"><span id="BIOSDate"></span></td>
</tr>
</table>
</span>
</div>
<div class="StatusBar">
<br />
<Span id="StatusBar">Loading...please wait.</Span>
</div> <br><br>
<div align="center">
<input type="button" name="btnStop" id="btnStop" value="Continue" onclick="Abort">
<input type="Button" value="Re-Scan Machine" name="button1" onClick="Window_Onload" class="button">
</div>
</body><!-- #endregion -->
</html> -
I'm wondering how people are migrating their embedded devices that are using the FBWF. I've done some googling and it seems like most people are just re-imaging the devices and after migrating a single device i see why. Its not a pretty process. This will
be a long description but ultimately my question stems more from trying to find a better way to execute the device migration from 2007 to 2012.
Some back ground on my situation might be in order here. I'm in the process of wrapping up our 2007 to 2012 migration. We have a 2007 infrastructure that was a central server with 2 primaries and 286 secondary site servers. I've consolidated that to a single
2012 primary site server that hosts all the main roles. There are 2 more servers in the data centers both operating solely as push distribution points I'll refer to them as 2012 01 02 and 03. I'm over half way through the migration and so far haven't needed
to offload any site roles. There are almost 10,000 clients now reporting to the 2012 site server and almost a 100 field servers pulling content from 2012 02 as their source dp as pull dp is the only way forward for this many devices. I've read the horror stories
of trying spin up 200 plus push dps. We are running PKI. I'm at the point now where i need to start migrating the Windows Embedded Seven Standard clients that have the 2007 sccm client on them with WEDM for write filter handling.
What i'm wondering is if anyone has any pointers for me regarding migrating the WES 7 devices. My plan that i've come up with is to somehow script the process using a 2007 WEDM Task Sequence to try and migrate them over to 2012. Things are complicated as
I need to somehow script the install, the policy checkin, hardware inventory, software inventory, and validate the SCEP client installs before I reboot the device one last time to enable the FBWF. How I handled the SCCM 2007 client install on these devices
when they were provisioned was to just create a batch file that would sleep for ten minutes then check to see if the inventoryagent.log file had been created yet. I realize now that is inefficient as i can kick off the inventory using a WMI method once the
client has installed. Also I need to make sure the machine gets its first policy as that is how it creates the communication using PKI through that first policy transfer and that also finalizes the client install. The biggest piece i'm uncertain about in this
regard is the SCEP client.
I had to change the SCEP client install from yes to no in the default client settings as we have some Mcaffee servers that can't have the SCEP client on them. I have incremental updates enabled on the collection that has the policy that installs the SCEP
client but this will take an unknown amount of time unless i force the environment to update as the device starts in 2012 install, or if I could kick off the SCEP isntall... IDK. I'm also wondering if i should keep the device in the migration process until
i validate it has its proper scep policy applied which I believe can be validated by a registry key somewhere.
Once the 2012 client gets installed will that cause it to lose its place within the 2007 Task Sequence? Considering its going to take a minimum of 2 reboots I'd normally use the task sequence to handle its progression through the process.
I'm also considering trying to use an Orchestrator runbook, as that would be a good way to keep track of the migration process as each device migrates. Especially since this might take several seperate scripts.
I'm going to take a stab at scripting the migration process, but if anyone has any pointers that might make this a less complicated I'd really appreciate it as I've got about 3000 of these devices that need to be migrated over. The other things i've learned
the hard way is any time you have something this complicated over the course of 3000 devices you will run into unknowns and the failure rate increases. I'm in the precarious position of having to not only build this process out but in some situations have
it complete in the shortest amount of time possible as we have sites running 24x7. I know the end users behavior all to well and they will just keep hitting the power button sometimes even though their not supposed to so they can get their device functional
again. In those situations i'd end up, if i'm lucky with a device that no longer has a healthy SCCM client in either environment and the write filter disabled.
So like i said any pointers anyone could throw my way i'd really appreciate. I manually went through the migration process on a single device for proof of concept and ended up with almost 2 pages of pseudo code for my migration script/scripts.
Thanks,
-K.R.Hi,
In R2 there are some new variables you can use to solve this,
http://ccmexec.com/2014/12/smstsmplistrequesttimeout-value-in-milliseconds/
In Sp1 though adding a step to sleep for 2-5 minuter after reboot and before the application install step is a common workaround.. a powershell command with "Start-Sleep
-s 120" should do it.
/Jörgen
-- My System Center blog ccmexec.com -- Twitter
@ccmexec
Maybe you are looking for
-
Ipad 2 Print button does not work after 6 upgrade?
Since we upgraded to iOS6, our print button does not work and does not find our printer. It was working fine until iOS6. Called an Apple Technician and he had me reset, which wiped out all of my saved information but didn't fix the print. He then
-
I have my main file with 3 links. One of these links is a photo gallery. When the link is clicked, I have a strip of thumbnails that opens from the bottom of the main page. Then I want to click the thumbnail that loads another swf file. At the moment
-
NAVS not getting picked up on a PO
Hello, Whilst trying to create a PO; we've observed that condition type NAVS is not getting defaulted. We've checked that the condition records have been maintained/plant & material master indicator has been maintained. Anyone of you has had this ex
-
Insecure Startup Item Disabled
Hello I recently installed a HP Printer (HP PSC 1410 All In One) to my MacBook system running Snow Leopard 10.6.3 and just after I installed I uninstalled when finished. Since the uninstall however, I have been getting an error message at startup rea
-
Airport download speeds slow when extending display to LCD
When I connect my Macbook using the mini display to DVI, DVI to HDMI adapter to my LCD TV, my download speeds pretty much fall off to nothing. When I disconnect the display adapter, the connection resumes. Any ideas?