How secure a task sequence advertisement

Hello
We have a task sequence for the replacing of the OS. Only the local 1 level support should available do run this task sequence when he
is logged on.
When I advertise the
 task sequence to this usergroupe the task sequence fails because task sequences can only be advertised to Computers.
How can I secure the task sequence that only a limited group of Users can run the task sequence?
minou

Here's an excerpt of the smsts.log:
Executing command line: smsswd.exe /run: ServiceUI.exe -process:explorer.exe  %SYSTEMROOT%\System32\mshta.exe c:\safefolder\zticonf.hta TSManager 10/20/2010 2:02:06 PM 3824 (0x0EF0)
=======================[ smsswd.exe ] ======================= InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
PackageID = '' InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
BaseVar   = '', ContinueOnError='' InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
SwdAction = '0001' InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
Command line for extension .exe is "%1" %* InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
Set command line: Run command line InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
Working dir 'C:\SafeFolder' InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
Executing command line: Run command line InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
Process completed with exit code 4294967295 InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
 ======================= InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
 Matched Processes InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
 ======================= InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
 Process Found: [explorer.exe] ID [1744] SESSION [1] InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
 ======================= InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
 Logon Lookup InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
 ======================= InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
 [winlogon.exe] Session: [1] PID [436] [Target Session [1] = Match] InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
 ======================= InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
 Launch Process InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
 ======================= InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
 Program to launch : [C:\WINDOWS\System32\mshta.exe] InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
 Command line      : [C:\WINDOWS\System32\mshta.exe c:\safefolder\zticonf.hta] InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
 API [CreateProcessAsUser] Error: [5] InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
 ======================= InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
 Exiting with [-1] InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
 ======================= InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
Command line returned 4294967295 InstallSoftware 10/20/2010 2:02:06 PM 2908 (0x0B5C)
Process completed with exit code 4294967295 TSManager 10/20/2010 2:02:06 PM 3824 (0x0EF0)
!--------------------------------------------------------------------------------------------! TSManager 10/20/2010 2:02:06 PM 3824 (0x0EF0)
Failed to run the action: Require Password Input.
Unknown error (Error: FFFFFFFF; Source: Unknown) TSManager 10/20/2010 2:02:06 PM 3824 (0x0EF0)

Similar Messages

  • No Task Sequence Advertised for Unknown Computers

    Howdy,
    i have a single MP, Single DP (Same box) SCCM 2012 R2 infrastructure running Server 2012.
    i'm having an issue when trying to perform OSD deployments VIA boot media to clients.  If the client had the SCCM agent on it before and it is known, no problems, i can load up my USB stick, boot to it and it finds my advertisement fine and can image no
    problems.  however if it is a bare metal that has not been imaged before at all, i get "No task sequence found for this device" in windows PE.  
    In checking the SMSTS log on the client, the error i see is "No assigned task sequence"
    During the creation of the boot media i enabled (checked the box for) unknown computer support.  
    The Boot WIM, Image WIM, and TS have all been distributed to the site server and i have verified the content status of all dependencies to be correct. 
    The task sequence is advertised to a collection called "OSD Deployment Test" i have also added the "All Unkown Computers" Collection as a member of "OSD Deployment Test"  I have verified that the "All Unknown Computers"
    Collection DOES include the unknown 86, and unknown 64 computer collections.  however if it is an unknown computer the darn thing STILL will not find the advertised TS.  
    what am i missing here?
    Any help would be GREATLY appreciated!
    Thanks!
    Tainted.

    Thank you for clarifying and clearing that up (sorry it took me a couple replies to understand!)
    It seems it did fail the ONE time i tried to image again but now it is working again even for brand new VM's and the boundary is still removed!  I'm at a complete loss.  We didn't change anything with SCCM and it magically started working?!?!?
    You were right though i checked a log from when it failed earlier and got:
    Authenticator from the environment is empty.
    TSMBootstrap 5/8/2014 9:31:15 AM
    452 (0x01C4)
    Need to create Authenticator Info using PFX
    TSMBootstrap 5/8/2014 9:31:15 AM
    452 (0x01C4)
    Initialized CStringStream object with string: 4DD5CE6B-0164-4AC4-8D0D-569401048658;2014-05-08T17:31:15Z.
    TSMBootstrap 5/8/2014 9:31:15 AM
    452 (0x01C4)
    Using user-defined MP locations: http://ghssccmisc03.ghs.org
    TSMBootstrap 5/8/2014 9:31:15 AM
    452 (0x01C4)
    Set authenticator in transport TSMBootstrap
    5/8/2014 9:31:15 AM 452 (0x01C4)
    Set media certificates in transport TSMBootstrap
    5/8/2014 9:31:15 AM 452 (0x01C4)
    IP: 10.11.12.107 10.11.12.0 TSMBootstrap
    5/8/2014 9:31:15 AM 452 (0x01C4)
    CLibSMSMessageWinHttpTransport::Send: URL: ghssccmisc03.ghs.org:80  GET /SMS_MP/.sms_aut?MPLOCATION&ir=10.11.12.107&ip=10.11.12.0
    TSMBootstrap 5/8/2014 9:31:15 AM
    452 (0x01C4)
    Error. Received 0x80072ee2 from WinHttpSendRequest.
    TSMBootstrap 5/8/2014 9:31:36 AM
    452 (0x01C4)
    hr, HRESULT=80072ee2 (e:\qfe\nts\sms\framework\osdmessaging\libsmsmessaging.cpp,8919)
    TSMBootstrap 5/8/2014 9:31:36 AM
    452 (0x01C4)
    sending with winhttp failed; 80072ee2
    TSMBootstrap 5/8/2014 9:31:36 AM
    452 (0x01C4)
    m_pHttpTransport->Send (0, 0, pServerReply, nReplySize), HRESULT=80072ee2 (e:\qfe\nts\sms\framework\osdmessaging\libsmsmessaging.cpp,5564)
    TSMBootstrap 5/8/2014 9:31:36 AM
    452 (0x01C4)
    CCM::SMSMessaging::CLibSMSMPLocation::RequestMPLocation failed; 0x80072ee2
    TSMBootstrap 5/8/2014 9:31:36 AM
    452 (0x01C4)
    MPLocation.RequestMPLocation (szTrustedRootKey, sIPSubnets.c_str(), sIPAddresses.c_str(), httpS, http), HRESULT=80072ee2 (e:\qfe\nts\sms\framework\osdmessaging\libsmsmessaging.cpp,9565)
    TSMBootstrap 5/8/2014 9:31:36 AM
    452 (0x01C4)
    CCM::SMSMessaging::GetMPLocations failed; 0x80072ee2
    TSMBootstrap 5/8/2014 9:31:36 AM
    452 (0x01C4)
    Failed to query http://ghssccmisc03.ghs.org for MP location
    TSMBootstrap 5/8/2014 9:31:36 AM
    452 (0x01C4)
    MpCnt > 0, HRESULT=80004005 (e:\qfe\nts\sms\client\tasksequence\tsmbootstrap\tsmbootstraputil.cpp,1931)
    TSMBootstrap 5/8/2014 9:31:36 AM
    452 (0x01C4)
    QueryMPLocator: no valid MP locations are received
    TSMBootstrap 5/8/2014 9:31:36 AM
    452 (0x01C4)
    TSMBootstrapUtil::QueryMPLocator ( true, sSMSTSLocationMPs.c_str(), sMediaPfx.c_str(), sMediaGuid.c_str(), sAuthenticator.c_str(), sEnterpriseCert.c_str(), sServerCerts.c_str(), nHttpPort, nHttpsPort, bUseCRL, httpS, http, accessibleMpCnt), HRESULT=80004005
    (e:\qfe\nts\sms\client\tasksequence\tsmbootstrap\tsmediawizardcontrol.cpp,925)
    TSMBootstrap 5/8/2014 9:31:36 AM
    452 (0x01C4)
    Exiting TSMediaWizardControl::GetPolicy. TSMBootstrap
    5/8/2014 9:31:36 AM 452 (0x01C4)
    pWelcomePage->m_pTSMediaWizardControl->GetPolicy(), HRESULT=80004005 (e:\qfe\nts\sms\client\tasksequence\tsmbootstrap\tsmediawelcomepage.cpp,303)
    TSMBootstrap 5/8/2014 9:31:36 AM
    452 (0x01C4)
    Setting wizard error: An error occurred while retrieving policy for this computer  (0x80004005). For more information, contact your system administrator or helpdesk operator.
    TSMBootstrap 5/8/2014 9:31:36 AM
    300 (0x012C)
    WelcomePage::OnWizardNext() TSMBootstrap
    5/8/2014 9:31:36 AM 300 (0x012C)
    Skipping Confirmation Page. TSMBootstrap
    5/8/2014 9:31:36 AM 300 (0x012C)
    Skipping Task Sequence Selection Page. TSMBootstrap
    5/8/2014 9:31:36 AM 300 (0x012C)
    Skipping Variables Selection Page. TSMBootstrap
    5/8/2014 9:31:36 AM 300 (0x012C)
    Skipping Resolve Progress Page. TSMBootstrap
    5/8/2014 9:31:36 AM 300 (0x012C)
    Activating Finish Page. TSMBootstrap
    5/8/2014 9:31:36 AM 300 (0x012C)
    Loading bitmap TSMBootstrap
    5/8/2014 9:31:36 AM 300 (0x012C)
    Executing command line: X:\windows\system32\cmd.exe /k
    TSBootShell 5/8/2014 9:31:40 AM
    604 (0x025C)
    The command completed successfully. TSBootShell
    5/8/2014 9:31:40 AM 604 (0x025C)
    Successfully launched command shell. TSBootShell
    5/8/2014 9:31:40 AM 604 (0x025C)
    It now seems that this could possibly be intermitant?  Any advice on how to troubleshoot this going forward?

  • Problems calling SCCM 2012 task sequence/advertisement remotly

    Hey all so I'm trying to invoke a task sequence from powershell. There are 2 task sequences listed, one for Win 8.1 and 7. In the script below I have invoked the Windows 7 task sequence. The problem is it seems that you have to  be logged in when the
    script is running for it to work. If you're not it throws a error (  Exception calling "ExecuteProgram" with "3" argument(s): "Unspecified error (Exception from HRESULT: 0x80004005 (E_FAIL))"  ) Ideally I want the task
    sequence to go even if there is no user logged on. Is there anyway to make this happen? Thanks!
    $computers = Get-Content 'C:\Users\cody-horton\Desktop\complist.txt'
    if(!(Test-Path C:\users\cody-horton\Desktop\reimage_fails.txt)){
    New-Item -Path C:\users\cody-horton\Desktop -Name reimage_fails.txt –ItemType File
    $computers = $computers | Sort-Object
    Write-Host $computers
    foreach($computer in $computers){
    if(!(Test-Connection -Cn $computer -BufferSize 16 -Count 1 -ea 0 -quiet)){
    Add-Content -Path C:\users\cody-horton\Desktop\reimage_fails.txt -Value "$($computer) Error Connecting"
    }else{
    Invoke-Command -ComputerName $computer -ScriptBlock {
    $softwareCenter = New-Object -ComObject "UIResource.UIResourceMgr"
    $taskSequence = $softwareCenter.GetAvailableApplications() | Where { $_.PackageName -eq "General Fac/Staff Windows 7 Standard x64" }
    $taskSequenceProgramID = "*"
    $taskSequencePackageID = "GS2000C3"
    $softwareCenter.ExecuteProgram($taskSequenceProgramID,$taskSequencePackageID,$true)
    write-host "$computer" -ForegroundColor Green
    Start-Sleep -Seconds 3
    Add-Content -Path C:\users\cody-horton\Desktop\reimage_fails.txt -Value "Done $($date)"

    Hi Codyh,
    To run a SCCM package before logon, this article for your reference:
    PowerShell, Active Setup and running a SCCM package “before log on”:
    http://www.jbmurphy.com/2012/01/20/powershell-active-setup-and-running-a-sccm-package-before-log-on/
    If you have any other questions, please feel free to let me know.
    Best Regards,
    Anna Wang

  • "Welcome to the Task Sequence Wizard" never shows on PXE boot, but does on Boot Media with prestart command

    Hey guys, I have a fairly odd situation here.  I have all OSD Task Sequence advertisements set to "PXE and Boot Media (hidden)" and all are optional
    (not mandatory).  I use a powershell form via prestart command to give the user a choice which limits what task sequences they choose.  When everything is working, this process works.  Unknown desktop-class systems see desktop task sequences,
    and server-class systems see server task sequences.
    Here's where it's different when I use different boot methods:
    Boot Media
    "Welcome to the Task Sequence Wizard" is presented.  User hits or clicks Enter.
    Powershell form is presented; user picks their task sequence
    Confirmation screen is presented with the task sequence they selected (this is an OSD screen the same size as the "Welcome to the Task Sequence Wizard"
    screen.
    Dependency check screen is shown with a progress bar.  If a package is missing from a DP, it will display an error here with the PackageID.  This
    looks the same as "Regular" OSD with standard non-hidden advertisements.
    PXE Boot
    "Welcome to the Task Sequence Wizard" is never displayed.
    Powershell form is the first screen they see.  They select it and it continues.
    No confirmation screen is presented if the system is known;  if it is an unknown system, a small dialog says there is a
    *mandatory* task sequence about to be run and it will run in 180 seconds.  Users can hit enter.
    No dependency check screen is shown; and if a package was missing, instead of presenting an error, it simply reboots.  However, if everything is there,
    the process starts successfully.
    While I have no problems with the first window never being displayed, not displaying the error dialog and simply rebooting is what is bothersome to me. 
    99% of our builds are from PXE boot.
    Again, these task sequences are all 100% optional, NOT mandatory, and I've double checked this multiple times.  Can anyone explain why we get different
    behavior between boot media and PXE boot?  Any way of getting PXE boot to "mimic" the Boot media behavior?
    I followed the guide here:
    http://www.mydreampage.net/2012/09/21/how-can-i-deploy-a-hidden-task-sequence-in-configuration-manager-2012-sp1/
    If you see the image here:
    http://www.windows-noob.com/forums/uploads/monthly_09_2012/post-1-0-29840100-1348236179.png
    You'll see the "Retrieving policy for this computer..." dialog box - I never get that with PXE - just Boot Media.
    Note that I am running 2012 R2, not 2012 SP1 - but I never got a chance to test this process with SP1.
    Upon further experimentation, the "hidden" task sequence has nothing to do with this.  If I change it to a normal, non-hidden advertisement, as
    long as the "prestart" command in the boot image is used, we don't get those missing dialog boxes at all, with PXE.

    Are both boot images the same for PXE and the boot media? Same package ID and all? 
    Boot media for us always shows the task sequence wizard first, while PXE always displays the pre-start command first. 
    Daniel Ratliff | http://www.PotentEngineer.com

  • Hash Error (80091007) when installing Adobe Acrobat 10 From a Task Sequence in SCCM 2007

    Hi, I have a problem with my deployment of Acrobat 10.
    I did create the package using the adminstrative install method to be able to apply the latest update available.
    The result is that when I am trying to deploy the software (using a Task Sequence) it will fail with an error 80091007:Hash Mismatch.
    I know that this is a common error in SCCM and that updating the distribution point usually fix the issue but not in this case. I did update the distribution point, tried a refresh and update also but I still have the error.
    If I take the same exact package and deploy it using the normal software deployment feature, the software will install without any problem. Even when telling the task sequence advertisement to download the files before installing them, the software will install.
    So I only have the error when I am trying to deploy this software using the normal behavior of a task sequence which is download files when reuired to dos o.
    Anyone have an idea of when do I have this error message.
    Thank you for any help!
    Mathieu

    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

  • Get rid of "Ready to Start Task Sequence"

    I have several Task Sequences advertised to unknown computers. Since we got MS Surface we've had to change to boot image to 64bit. Its not an issue if we pick something with a different Boot Image, it just downloads the 32 bit Boot wim. The problem is, once
    we select the Task sequence we want to walk away. instead it downloads the WIM and then goes to a "Ready to Start" screen. Does anyone know a way to get bypass this?
    Unfortunately making everything the same boot image is not an option.

    When you are using both boot images, I would say that there is no way to get rid of that message. The (unknown) computer will initially pick up the boot image that is assigned to the task sequence that is deployed the last to the (unknown) computer.
    So, if you need the other task sequence, it will stage the other boot image.
    My Blog: http://www.petervanderwoude.nl/
    Follow me on twitter: pvanderwoude

  • Force a Task Sequence to Re-Run with advertisement set to not Re-Run

    Hi there,
    Is it possible to force a task sequence to re-run when the advertisement is set to not re-run? Even when deleting the advertisement and recreating a new advertisement (which forces a new ID creation), somewhere in the workstation (be it WMI and/or registry)
    it knows that the task sequence (due to the same Package ID) has already run.
    This guide is partially handy
    http://blogs.msdn.com/b/steverac/archive/2009/11/06/sccm-forcing-a-task-sequence-to-rerun.aspx
    However, he does not mention how to do so with the advertisement set to not rerun - only 'always rerun program'
    Thanks, Amiel

    Hi
    You can re-run TS by following 3 ways
    If you have installed Configuration Manager ToolKit then there is an option called "SCCM ConfigMgr Tools" by right clicking on a collection which would give you an option "ReRun Advertisements". Through this, you can re-run TS.
    I have the toolkit installed however the Program rerun behavior is set to Never rerun advertised program, so when I choose
    'rerun advertisement' through SCCM I receive 'Unable to set RerunBehaviour. Program will not rerun'.
    So back to my original question, if the Program rerun behaviour is set to 'Never rerun advertised program' NOT 'Always rerun program' (as explained in the link I provided) - is it at all possible to Force a rerun through WMI or registry?
    *Update - this is not a PXE Task Sequence either.

  • 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>

  • Can I set a priority in SCCM 2012 for advertisements or any other ideas to fix my Task sequences?

    I have several task sequences that I deploy to lab computers that we re-image 1 or 2 times a year.  The task sequences run and install specific software
    for that lab after the base image deploys.
    The base image is deployed using WDS without SCCM in the mix.  It is a setup they we are using because of legacy business processes that just make this easier.
     Then after the machine boots up and gets its SCCM policies the task sequences start running to deploy the software.
    The issue I am noticing is that I have no control over what runs first and sometimes Windows Updates that are deployed via SCCM run before or in between the task
    sequences that I have running.  Some installs fail because of the pending Windows Update reboot, which I believe I have gotten around just by checking for it and rebooting before it installs the software.  The issue is that the Windows update could
    and usually is one of those lovely updates that requires multiple reboots.  The second reboot is killing my task sequence.
    The issue is I need to somehow force this updates to run after my task sequences or make sure they run first.  The only way I can think of this is by having
    priorities for the task sequences.  I can't just add installing the updates to the task sequence, because the second reboot will kill my whole task sequence there too.
    Anyone have any ideas on how to get around this issue?  I want the machines to install the Windows updates so I can't just remove them from the collection.

    That's definitely the best option to do everything via the task sequence deployment.
    Also, there are script available in the community to add or remove a device from a collection, see for example:
    http://sccmfaq.wordpress.com/2013/05/20/sccm-2012-sp1-remove-client-from-collection-after-osd/
    Keep in mind that if you want to use a script like that during the task sequence that the device running the task sequence (and by that the script) requires specific rights within ConfigMgr.
    My Blog: http://www.petervanderwoude.nl/
    Follow me on twitter: pvanderwoude

  • How do I add a step to run at the beginning of an existing task sequence?

    I need a way to add a step to run at the beginning of an existing task sequence like you see up above. We need to do so to all task sequences that install software in our environment. I understand PowerShell very well but, I am not sure of how I would modify
    (if possible) an existing task sequence, let alone add a step to the beginning.
    This is super important and would most appreciated for any help. Thanks! :)
    http://i61.tinypic.com/2nlv8zb.png

    I understand how to perform the above action. I need to have that in a PowerShell script. I need to insert a "Install Package" step at the top of all 900+ task sequences with a specific package. I am good with PowerShell, just not that good.
    ActionInProgress : 1
    AlternateContentProviders :
    BootImageID :
    Category :
    CustomProgressMsg :
    DependentProgram :
    Description : ML - 1/5/15
    Duration : 360
    ExtendedData :
    ExtendedDataSize : 0
    ForcedDisconnectDelay : 5
    ForcedDisconnectEnabled : False
    ForcedDisconnectNumRetries : 2
    Icon :
    IconSize : 0
    IgnoreAddressSchedule : False
    ISVData :
    ISVDataSize : 0
    IsVersionCompatible :
    Language :
    LastRefreshTime : 2/16/2015 10:18:25 AM
    LocalizedCategoryInstanceNames :
    Manufacturer :
    MIFFilename :
    MIFName :
    MIFPublisher :
    MIFVersion :
    Name : TS: Adobe_ReaderXI_11.0.10_R01-Install
    NumOfPrograms :
    PackageID : P12005DB
    PackageSize :
    PackageType : 4
    PkgFlags : 0
    PkgSourceFlag : 1
    PkgSourcePath :
    PreferredAddressType :
    Priority : 2
    ProgramFlags : 152084496
    References : {
    instance of SMS_TaskSequence_Reference
    Package = "P1200541";
    Program = "Adobe_Cleaner_9_R01";
    Type = 0;
    instance of SMS_TaskSequence_Reference
    Package = "P1200542";
    Program = "Adobe_Cleaner_10_R01";
    Type = 0;
    instance of SMS_TaskSequence_Reference
    Package = "P1200598";
    Program = "*";
    Type = 0;
    instance of SMS_TaskSequence_Reference
    Package = "ScopeId_5E2F018E-6A55-4DF6-BC64-43B2E205E619/Application_d5c1b17b-12e1-
    4ad6-9916-72fdefc834b8";
    Program = "";
    Type = 1;
    ReferencesCount : 4
    RefreshPkgSourceFlag : False
    RefreshSchedule :
    Reserved :
    SecuredScopeNames : {Default}
    SedoObjectVersion : EF958AC5-D6E3-460E-A666-6A8CAF4AEB8C
    Sequence : <sequence version="3.00"><referenceList><reference package="P1200598"/><reference
    package="P1200541" program="Adobe_Cleaner_9_R01"/><reference package="P1200542"
    program="Adobe_Cleaner_10_R01"/><reference application="ScopeId_5E2F018E-6A55-4DF6-BC6
    4-43B2E205E619/Application_d5c1b17b-12e1-4ad6-9916-72fdefc834b8"/></referenceList><ste
    p type="SMS_TaskSequence_RunPowerShellScriptAction" name="SDLSetupWait"
    description="ML - 2/16/15" runIn="WinPEandFullOS" successCodeList="0" runFromNet="fals
    e"><action>OSDRunPowerShellScript.exe</action><defaultVarList><variable
    name="OSDRunPowerShellScriptExecutionPolicy"
    property="ExecutionPolicy">Bypass</variable><variable
    name="OSDRunPowerShellScriptPackageID"
    property="PackageID">P1200598</variable><variable
    name="OSDRunPowerShellScriptParameters" property="Parameters"></variable><variable
    name="OSDRunPowerShellScriptScriptName"
    property="ScriptName">SDLSetupWait.ps1</variable></defaultVarList></step><step
    type="SMS_TaskSequence_InstallSoftwareAction" name="Purge Adobe 9.x -"
    description="ML - 1/5/15" runIn="FullOS" successCodeList="0"
    runFromNet="false"><action>smsswd.exe /pkg:P1200541 /install /basevar:
    /continueOnError:</action><defaultVarList><variable name="PackageID"
    property="PackageID" hidden="true">P1200541</variable><variable
    name="_SMSSWDProgramName"
    property="ProgramName">Adobe_Cleaner_9_R01</variable></defaultVarList></step><step
    type="SMS_TaskSequence_InstallSoftwareAction" name="Purge Adobe 10.x+"
    description="ML - 1/5/15" runIn="FullOS" successCodeList="0"
    runFromNet="false"><action>smsswd.exe /pkg:P1200542 /install /basevar:
    /continueOnError:</action><defaultVarList><variable name="PackageID"
    property="PackageID" hidden="true">P1200542</variable><variable
    name="_SMSSWDProgramName"
    property="ProgramName">Adobe_Cleaner_10_R01</variable></defaultVarList></step><step
    type="SMS_TaskSequence_InstallApplicationAction" name="TS:
    Adobe_ReaderXI_11.0.10_R01-Install" description="ML - 1/5/15" runIn="FullOS"
    successCodeList="0" runFromNet="false"><action>smsappinstall.exe /app:ScopeId_5E2F018E
    -6A55-4DF6-BC64-43B2E205E619/Application_d5c1b17b-12e1-4ad6-9916-72fdefc834b8
    /basevar: /continueOnError:False</action><defaultVarList><variable name="OSDApp"
    property="AppInfo" hidden="true">1</variable><variable name="OSDApp0Description"
    property="AppInfo0Description">Valid</variable><variable name="OSDApp0DisplayName"
    property="AppInfo0DisplayName">Adobe_ReaderXI_11.0.10_R01</variable><variable
    name="OSDApp0Name" property="AppInfo0Name">ScopeId_5E2F018E-6A55-4DF6-BC64-43B2E205E61
    9/Application_d5c1b17b-12e1-4ad6-9916-72fdefc834b8</variable><variable
    name="ApplicationName" property="ApplicationName" hidden="true">ScopeId_5E2F018E-6A55-
    4DF6-BC64-43B2E205E619/Application_d5c1b17b-12e1-4ad6-9916-72fdefc834b8</variable><var
    iable name="ContinueOnInstallError" property="ContinueOnInstallError"
    hidden="true">false</variable><variable name="OSDAppCount"
    property="NumApps">1</variable></defaultVarList></step><step
    type="SMS_TaskSequence_RunCommandLineAction" name="Change Reg Key" description="ML -
    1/5/15" runIn="WinPEandFullOS" successCodeList="0 3010"
    runFromNet="false"><action>smsswd.exe /run: reg add HKEY_LOCAL_MACHINE\SOFTWARE\Classe
    s\Installer\Products\68AB67CA7DA73301B744BA0000000010 /v ProductName /d
    Adobe_ReaderXI_11.0.10_R01 /F</action><defaultVarList><variable name="CommandLine"
    property="CommandLine" hidden="true">reg add HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Insta
    ller\Products\68AB67CA7DA73301B744BA0000000010 /v ProductName /d
    Adobe_ReaderXI_11.0.10_R01 /F</variable><variable name="SMSTSDisableWow64Redirection"
    property="DisableWow64Redirection">false</variable><variable
    name="_SMSTSRunCommandLineAsUser" property="RunAsUser">false</variable><variable
    name="SuccessCodes" property="SuccessCodes" hidden="true">0
    3010</variable></defaultVarList></step></sequence>
    ShareName :
    ShareType : 1
    SourceDate : 1/5/2015 10:14:08 AM
    SourceSite : P12
    SourceVersion : 1
    StoredPkgPath :
    StoredPkgVersion : 1
    SupportedOperatingSystems : {}
    TaskSequenceFlags : 0
    Type : 1
    Version :

  • How to determine IE type(32 bit or 64 bit) in a task sequence while updating Java

    How to determine IE type(32 bit or 64 bit) in a task sequence
    Hi,
    Currently i have to update new version of Java after removing all the previous existing version of Java by using TS in SCCM 2007.
    we have both 32 bit and 64 bit browser in the environment. I am stucked in determining whether the browser is of 32 bit or 64 bit.
    How to determine IE type(32 bit or 64 bit) in a task sequence so that respective java can be installed for that IE browser.
    will highly appreciate quick response.
    Thanks in advance.
    Daya

    But you also need to install JRE x86 on x64 systems, since most people actually use the 32bit browsers on x64 systems.
    The detection logic is actually pretty simple -- just check the right registry hive to find the installation location of the BIN\JAVA.DLL. Both pathnames are stored in HKLM\Software\JavaSoft\Java Runtime Environment\1.7 in the registry value "JavaHome",
    but the x86 path is stored in the 32-bit hive and the x64 path is stored in the 64-bit hive.
    Lawrence Garvin, M.S., MCSA, MCITP:EA, MCDBA
    SolarWinds Head Geek
    Microsoft MVP - Software Packaging, Deployment & Servicing (2005-2014)
    My MVP Profile: http://mvp.microsoft.com/en-us/mvp/Lawrence%20R%20Garvin-32101
    http://www.solarwinds.com/gotmicrosoft
    The views expressed on this post are mine and do not necessarily reflect the views of SolarWinds.

  • How to install Office 365 Pro Plus Ms office 2013 Offline through MDT Task Sequence

    Hi 
    How can i deploy the Office 365 pro Plus Ms Office 2013 (that come with Office 365 E3 License) offline to Client Machines through MDT Task Sequence?
    Shailendra Dev

    There is a wealth of information on Office 365 deployments at:
    http://technet.microsoft.com/en-us/library/gg715562(v=office.15).aspx
    Overview:
    Download the office deployment tool
    configure your config.xml file
    download the bits locally to your server.
    create a package for MDT.
    Keith Garner - Principal Consultant [owner] -
    http://DeploymentLive.com

  • How to re-distribute a Task Sequence to the Distribution Point.

    Hi, All
    I am new to Administering SCCM 2012. I have followed the instructions on this forum carefully and it has
    helped me.
    I created a TS and for some reason I delete it. But when I created the New Task Sequence it will not allowed
    me to re-distribute the content to the old DP where the previous one was.
    I went to the Technet site and it says that.
    Important
    If the task sequence that you selected references content that is already distributed to a specific distribution point, that distribution
    point is not listed by the wizard.
    http://technet.microsoft.com/en-us/library/hh273490.aspx
    This is because when I resend or deploy the job to the laptop I keep getting this error " The Task Sequence
    cannot be run because the program files associated  with "CHM00008"cannot be found on the distribution Point". But I know is on the DP. I have updated it and redistribute it. I can browse to it.
    And help to show me how to re-distribute the TS to the DP will be highly appreciated.
    Thanks
    KKA

    A task sequence itself cannot be distributed to a DP, but the associated content can.
    Have you configured a network access account? Double check if CHM00008 is deployed with 100% success.
    Torsten Meringer | http://www.mssccmfaq.de

  • How To: Deploying Windows & Office updates during task sequence

    How do you guys apply windows and office updates during the task sequence?
    Right now for Windows, I am offline servicing using my software deployment package.
    For Office, I had the software deployment package, but can't figure out how to add it to my task sequence. All the options don't allow me to choose the package.
    My end goal is to keep everything as up to date as possible, and if people image a computer and run Windows Update, they only have to download 10 or less updates, not 100+.

    Is Office part of your image or do you deploy Office as part of your task sequence?
    If office is part of your image, i'd recommend that you create a fully automated build and capture process using the MDT lite touch, and use a separate WSUS server to update the image with Windows , Office and other updates.
    It's pretty easy to setup.
    Creating a Windows 8.1 reference image:
    http://go.microsoft.com/?linkid=9845755
    If Office is not part of the image, you need to deploy the updates using Software Updates In SCCM as part of your Task Sequence.
    Ronni Pedersen | Microsoft MVP - ConfigMgr | Blogs:
    www.ronnipedersen.com/ and www.SCUG.dk/ | Twitter
    @ronnipedersen
    It's a task sequence. I'm confused how Software Updates works with SCCM because I do not want to use it to update All Systems. I only want to update it to computers that get imaged which are Unknown Computers. We have WSUS to take care of updates.
    If I deploy to Unknown Computers the updates in SCCM, once it joins the domain though to install all the other applications in the task sequence, will updates still go through now that it isn't a "Unknown ComputeR"?

  • How can we get the prompt to enter IP Address, Subnet Mask , gateway and DNS Server during Task Sequence?

    How can we get the prompt to enter IP Address, Subnet Mask , gateway and DNS Server during Task Sequence?

    This is for 2007 but may still be relevant for 2012
    http://hexdump.net/?p=391
    Cheers
    Paul | sccmentor.wordpress.com

Maybe you are looking for

  • Can I transfer songs between two libraries on the same computer?

    I have two libraries on my computer, was wondering if any one knows a simple painless way to transfer music from one to the other. The reason is my music collection has gotten unfathomably large over the years, and I no longer want it to be that way.

  • Remoting with CFC

    I'm using Flash remoting to send usage statistics from a movie up to a coldfusion component for processing and storage. System works great -- at least the individual calls are working -- but when I try to execute all these calls multiple times throug

  • Reader Shows Screen Artifacts and Slows Down

    I am using Adobe Reader 9 on under Xfce on Fedora 17.  I noticed that there are artifacts, often resembling a thumbnail of the document page, remaining on the screen and/or showing up at various places on the screen, even when the program is minimize

  • Using Contribute CS5 to edit site created w/Dreamweaver - PayPal button size issues

    I'm using Adobe Contribute CS5 to edit my web site that was built with Dreamweaver on a Mac.  I have a PC with Windows XP, 1G of ram, a 40G hard drive (used only for programs and operating system) a 1 terabyte external hard drive for all files, etc. 

  • How can I test (Abap) a session is from type RFC

    Hi , How can I test (Abap) a session is from type RFC ? Field in SY tables ?