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 -
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!
MathieuHi,
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, AmielHi
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> -
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.pngI 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.
DayaBut 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 DevThere 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
KKAA 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?
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.
-
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 ?