'****************************************************************************** '* '* Copyright (c) Microsoft Corporation. All rights reserved. '* '* Module Name: PAGEFILECONFIG.vbs '* '* Abstract: Enables an administrator to display and configure '* a systems paging file Virtual Memory settings. '* '* '****************************************************************************** OPTION EXPLICIT ON ERROR RESUME NEXT Err.Clear '****************************************************************************** ' Start of Localization Content '****************************************************************************** ' constants used for format selection CONST L_PatternFormat_Text = "^(table|list|csv)$" CONST L_DefaultFormat_Text = "list" ' Valid volume pattern [ a,b drives are invalid ] CONST L_VolumePatternFormat_Text = "^([c-zC-Z]:|\*)$" ' constants for showresults CONST L_Na_Text = "N/A" CONST L_MachineName_Text = "System Name" CONST L_User_Text = "User" CONST L_Password_Text = "Password" CONST L_Intsize_Text = "Initial Size" CONST L_Maxsize_Text = "Maximum Size" CONST L_Volume_Text = "Volume Name" CONST L_Format_Text = "Format" ' the column headers used in the output display CONST L_ColHeaderHostname_Text = "Host Name" CONST L_ColHeaderDrive_Text = "Drive/Volume" CONST L_ColHeaderVolumeLabel_Text = "Volume Label" CONST L_ColHeaderFileName_Text = "Location\File Name" CONST L_ColHeaderInitialSize_Text = "Initial Size" CONST L_ColHeaderMaximumSize_Text = "Maximum Size" CONST L_ColHeaderCurrentSize_Text = "Current Size" CONST L_ColHeaderFreeSpace_Text = "Total Free Space" CONST L_ColHeaderTotalMinimumSize_Text = "Total (All Drives): Minimum Size" CONST L_ColHeaderTotalRecommendedSize_Text = "Total (All Drives): Recommended Size" CONST L_ColHeaderTotalSize_Text = "Total (All Drives): Currently Allocated" ' user reply for the warning messages CONST L_UserReplyYes_Text = "y" CONST L_UserReplyNo_Text = "n" ' constants for CScript usage CONST L_UseCscript1_ErrorMessage = "This script should be executed from the Command Prompt using CSCRIPT.EXE." CONST L_UseCscript2_ErrorMessage = "For example: CSCRIPT PAGEFILECONFIG.vbs " CONST L_UseCscript3_ErrorMessage = "To set CScript as the default application to run .vbs files run the following" CONST L_UseCscript4_ErrorMessage = " CSCRIPT //H:CSCRIPT //S" CONST L_UseCscript5_ErrorMessage = "You can then run ""PAGEFILECONFIG.vbs "" without preceding the script with CSCRIPT." ' common constants for showing help for all the options CONST L_UsageDescription_Text = "Description:" CONST L_UsageParamList_Text = "Parameter List:" CONST L_UsageExamples_Text = "Examples:" CONST L_UsageMachineName_Text = " /S system Specifies the remote system to connect to." CONST L_UsageUserNameLine1_Text = " /U [domain\]user Specifies the user context under which" CONST L_UsageUserNameLine2_Text = " the command should execute." CONST L_UsagePasswordLine1_Text = " /P password Specifies the password for the given" CONST L_UsagePasswordLine2_Text = " user context." ' constants for showing help CONST L_ShowUsageLine02_Text = "PAGEFILECONFIG.vbs /parameter [arguments]" CONST L_ShowUsageLine05_Text = " Enables an administrator to display and configure a system's " CONST L_ShowUsageLine06_Text = " paging file Virtual Memory settings." CONST L_ShowUsageLine08_Text = "Parameter List:" CONST L_ShowUsageLine09_Text = " /Change Changes a system's existing paging file" CONST L_ShowUsageLine10_Text = " Virtual Memory settings." CONST L_ShowUsageLine12_Text = " /Create Creates/Adds an additional ""Paging File"" to a system." CONST L_ShowUsageLine14_Text = " /Delete Deletes a ""Paging File"" from a system." CONST L_ShowUsageLine16_Text = " /Query Displays a system's paging file" CONST L_ShowUsageLine17_Text = " Virtual Memory settings." CONST L_ShowUsageLine19_Text = "Examples:" CONST L_ShowUsageLine20_Text = " PAGEFILECONFIG.vbs" CONST L_ShowUsageLine21_Text = " PAGEFILECONFIG.vbs /?" CONST L_ShowUsageLine22_Text = " PAGEFILECONFIG.vbs /Change /?" CONST L_ShowUsageLine23_Text = " PAGEFILECONFIG.vbs /Create /?" CONST L_ShowUsageLine24_Text = " PAGEFILECONFIG.vbs /Delete /?" CONST L_ShowUsageLine25_Text = " PAGEFILECONFIG.vbs /Query /?" ' constants for showing help for /Change option CONST L_ShowChangeUsageLine02_Text = "PAGEFILECONFIG.vbs /Change [/S system [/U username [/P password]]]" CONST L_ShowChangeUsageLine03_Text = " { [/I initialsize] [/M maximumsize] }" CONST L_ShowChangeUsageLine04_Text = " /VO volume1 [/VO volume2 [... [/VO volumeN]]]" CONST L_ShowChangeUsageLine07_Text = " Changes an existing paging file's Virtual Memory Settings." CONST L_ShowChangeUsageLine18_Text = " /I initialsize Specifies the new initial size (in MB)" CONST L_ShowChangeUsageLine19_Text = " to use for the page file specified." CONST L_ShowChangeUsageLine21_Text = " /M maximumsize Specifies the new maximum size (in MB)" CONST L_ShowChangeUsageLine22_Text = " to use for the page file specified." CONST L_ShowChangeUsageLine24_Text = " /VO volumeletter Specifies the local drive who's page" CONST L_ShowChangeUsageLine25_Text = " file settings need to be changed. Specify" CONST L_ShowChangeUsageLine26_Text = " '*' to select all the local drives." CONST L_ShowChangeUsageLine27_Text = " Example: ""C:"" or ""*""" CONST L_ShowChangeUsageLine30_Text = " PAGEFILECONFIG.vbs /Change /?" CONST L_ShowChangeUsageLine31_Text = " PAGEFILECONFIG.vbs /Change /M 400 /VO c:" CONST L_ShowChangeUsageLine32_Text = " PAGEFILECONFIG.vbs /Change /S system /U user /M 400 /VO c:" CONST L_ShowChangeUsageLine33_Text = " PAGEFILECONFIG.vbs /Change /S system /U user /I 20 /VO *" CONST L_ShowChangeUsageLine34_Text = " PAGEFILECONFIG.vbs /Change /S system /U user /P password /I 200" CONST L_ShowChangeUsageLine35_Text = " /M 500 /VO c: /VO d:" ' constants for showing help for /Create option CONST L_ShowCreateUsageLine02_Text = "PAGEFILECONFIG.vbs /Create [/S system [/U username [/P password]]]" CONST L_ShowCreateUsageLine03_Text = " /I initialsize /M maximumsize" CONST L_ShowCreateUsageLine04_Text = " /VO volume1 [/VO volume2 [... [/VO volumeN]]]" CONST L_ShowCreateUsageLine07_Text = " Creates/Adds an additional ""Paging File"" to a system." CONST L_ShowCreateUsageLine18_Text = " /I initialsize Specifies the initial size (in MB) to use" CONST L_ShowCreateUsageLine19_Text = " for the page file being created." CONST L_ShowCreateUsageLine21_Text = " /M maximumsize Specifies the maximum size (in MB) to use" CONST L_ShowCreateUsageLine22_Text = " for the page file being created." CONST L_ShowCreateUsageLine24_Text = " /VO volumeletter Specifies the local drive on which the" CONST L_ShowCreateUsageLine25_Text = " page file has to be created. Specify '*'" CONST L_ShowCreateUsageLine26_Text = " to select all the local drives." CONST L_ShowCreateUsageLine27_Text = " Example: ""C:"" or ""*""" CONST L_ShowCreateUsageLine30_Text = " PAGEFILECONFIG.vbs /Create /?" CONST L_ShowCreateUsageLine31_Text = " PAGEFILECONFIG.vbs /Create /I 140 /M 300 /VO d:" CONST L_ShowCreateUsageLine32_Text = " PAGEFILECONFIG.vbs /Create /S system /U user /I 150 /M 300 /VO d:" CONST L_ShowCreateUsageLine33_Text = " PAGEFILECONFIG.vbs /Create /S system /U user /I 50 /M 200 /VO *" CONST L_ShowCreateUsageLine34_Text = " PAGEFILECONFIG.vbs /Create /S system /U user /P password /I 100" CONST L_ShowCreateUsageLine35_Text = " /M 600 /VO d: /VO e: /VO f:" ' constants for showing help for /Delete option CONST L_ShowDeleteUsageLine02_Text = "PAGEFILECONFIG.vbs /Delete [/S system [/U username [/P password]]]" CONST L_ShowDeleteUsageLine03_Text = " /VO volume1 [/VO volume2 [... [/VO volumeN]]]" CONST L_ShowDeleteUsageLine06_Text = " Deletes paging file(s) from a system." CONST L_ShowDeleteUsageLine17_Text = " /VO volumeletter Specifies the local drive who's page" CONST L_ShowDeleteUsageLine18_Text = " file has to be deleted." CONST L_ShowDeleteUsageLine19_Text = " Example: ""C:""" CONST L_ShowDeleteUsageLine22_Text = " PAGEFILECONFIG.vbs /Delete /?" CONST L_ShowDeleteUsageLine23_Text = " PAGEFILECONFIG.vbs /Delete /VO d:" CONST L_ShowDeleteUsageLine24_Text = " PAGEFILECONFIG.vbs /Delete /S system /U user /VO d: /VO e:" CONST L_ShowDeleteUsageLine25_Text = " PAGEFILECONFIG.vbs /Delete /S system /U user /P password /VO d:" ' constants for showing help for /Query option CONST L_ShowQueryUsageLine02_Text = "PAGEFILECONFIG.vbs /Query [/S system [/U username [/P password]]]" CONST L_ShowQueryUsageLine03_Text = " [/FO format]" CONST L_ShowQueryUsageLine06_Text = " Displays a system's paging file Virtual Memory settings." CONST L_ShowQueryUsageLine17_Text = " /FO format Specifies the format in which the output" CONST L_ShowQueryUsageLine18_Text = " is to be displayed." CONST L_ShowQueryUsageLine19_Text = " Valid values: ""TABLE"", ""LIST"", ""CSV""." CONST L_ShowQueryUsageLine22_Text = " PAGEFILECONFIG.vbs" CONST L_ShowQueryUsageLine23_Text = " PAGEFILECONFIG.vbs /Query" CONST L_ShowQueryUsageLine24_Text = " PAGEFILECONFIG.vbs /Query /?" CONST L_ShowQueryUsageLine25_Text = " PAGEFILECONFIG.vbs /Query /FO table" CONST L_ShowQueryUsageLine26_Text = " PAGEFILECONFIG.vbs /Query /S system /U user" CONST L_ShowQueryUsageLine27_Text = " PAGEFILECONFIG.vbs /Query /S system /U user /P password /FO LIST" ' constants for error messages CONST L_UnableToInclude_ErrorMessage = "ERROR: Unable to include the common module ""CmdLib.Wsc""." CONST L_InvalidHelpUsage_ErrorMessage = "ERROR: Invalid Help Usage. Use only /? for help." CONST L_InvalidParameter_ErrorMessage = "ERROR: Invalid Argument/Option - '%1'." CONST L_InvalidInput_ErrorMessage = "ERROR: Invalid Input. Please Check the input values." CONST L_InvalidCredentials_ErrorMessage = "ERROR: Invalid credentials. Verify the machine, user and password given." CONST L_InvalidVolumeName_ErrorMessage = "ERROR: Invalid volume '%1' specified." CONST L_InvalidUserReply_ErrorMessage = "ERROR: Invalid Choice. Enter a valid choice." CONST L_FailCreateObject_ErrorMessage = "ERROR: Unable to create object." CONST L_UnableToRetrieveInfo_ErrorMessage = "ERROR: Unable to retrieve information." CONST L_CannotCreate_ErrorMessage = "ERROR: Page File for the specified volume cannot be created." CONST L_InvalidPhysicalDrive_ErrorMessage = "ERROR: Volume '%1' is not a valid physical drive." CONST L_UpdateFailed_ErrorMessage = "ERROR: Pagefile updation failed." CONST L_InvalidInitSizeValue_ErrorMessage = "ERROR: Enter a numeric value for the initial page file size." CONST L_InvalidMaxSizeValue_ErrorMessage = "ERROR: Enter a numeric value for the maximum page file size." ' constant for hint message to show remote connectivity failure CONST L_HintCheckConnection_Message = "ERROR: Please check the system name, credentials and WBEM Core." ' constants for info. messages CONST L_PageFileDoesNotExist_ErrorMessage = "INFO: No pagefile exists on volume '%1'" CONST L_NoPageFiles_Message = "INFO: No Page File(s) Available." ' constants for Syntax Error Messages CONST L_InvalidSyntax_ErrorMessage = "ERROR: Invalid Syntax." CONST L_InvalidServerName_ErrorMessage = "ERROR: Invalid Syntax. System name cannot be empty." CONST L_InvalidUserName_ErrorMessage = "ERROR: Invalid Syntax. User name cannot be empty." CONST L_TypeUsage_Message = "Type ""%1 /?"" for usage." CONST L_TypeCreateUsage_Message = "Type ""%1 /Create /?"" for usage." CONST L_TypeChangeUsage_Message = "Type ""%1 /Change /?"" for usage." CONST L_TypeDeleteUsage_Message = "Type ""%1 /Delete /?"" for usage." CONST L_TypeQueryUsage_Message = "Type ""%1 /Query /?"" for usage." ' constants for missing mandatory option messages CONST L_VolumeNameNotSpecified_ErrorMessage = "Mandatory option '/VO' is missing." CONST L_InitialSizeNotSpecified_ErrorMessage = "Mandatory option '/I' is missing." CONST L_MaximumSizeNotSpecified_ErrorMessage = "Mandatory option '/M' is missing." CONST L_NoneoftheSizeSpecified_ErrorMessage = "Mandatory options '/I', '/M' are missing." CONST L_FormatNotSpecified_ErrorMessage = "Mandatory options '/FO' is missing." ' error messages for invalid usage of s,u,p switches CONST L_InvalidServerCredentials_ErrorMessage = "ERROR: Invalid Syntax. /U can be specified only when /S is specified." CONST L_InvalidUserCredentials_ErrorMessage = "ERROR: Invalid Syntax. /P can be specified only when /U is specified." ' constants for Mutliple line Error Messages CONST L_InsufficientMaxSize1_ErrorMessage = "ERROR: The maximum page file size on volume '%1' should be greater than or " CONST L_InsufficientMaxSize2_ErrorMessage = " equal to the initial page file size, and less than %2 MB or less " CONST L_InsufficientMaxSize3_ErrorMessage = " than the disk size." CONST L_InitialSizeRange1_ErrorMessage = "ERROR: The initial paging file size must be between 2 MB and %1 MB, and " CONST L_InitialSizeRange2_ErrorMessage = " cannot exceed the amount of free space on the drive you have selected. " CONST L_NotEnoughSpace1_ErrorMessage = "ERROR: There is not enough space on this drive for the paging file specified." CONST L_NotEnoughSpace2_ErrorMessage = " Please enter a smaller number or free some disk space." CONST L_AtLeastFiveMB1_ErrorMessage = "ERROR: There is not enough space on this drive to create the page file size " CONST L_AtLeastFiveMB2_ErrorMessage = " specified. At least 5 megabytes of free disk space must be left after" CONST L_AtLeastFiveMB3_ErrorMessage = " the page file is created. Specify a smaller page file size or free some " CONST L_AtLeastFiveMB4_ErrorMessage = " disk space." CONST L_DiskTooSmall1_ErrorMessage = "ERROR: Drive '%1' is too small for the maximum paging file size specified." CONST L_DiskTooSmall2_ErrorMessage = " Please enter a smaller number." ' constants for Mutliple line Warning Messages CONST L_GrowsToFreeSpaceWarning1_Message = "WARNING: Drive '%1' does not have enough free space for the maximum paging " CONST L_GrowsToFreeSpaceWarning2_Message = " file specified. If you continue with this setting, the paging file " CONST L_GrowsToFreeSpaceWarning3_Message = " will only grow to the size of the available free space (%2 MB)." CONST L_CrashDumpSettingWarning1_Message = "WARNING: If the pagefile on volume '%1' has an initial size of less than" CONST L_CrashDumpSettingWarning2_Message = " %2, then the system may not be able to create debugging" CONST L_CrashDumpSettingWarning3_Message = " information file if a STOP error occurs." ' constants for Multiple line SUCCESS / SKIPPING messages CONST L_ChangeIntSuccess1_Message = "SUCCESS: The initial size for the paging file on '%1' was changed from " CONST L_ChangeIntSuccess2_Message = " %2 MB to %3 MB." CONST L_ChangeMaxSuccess1_Message = "SUCCESS: The maximum size for the paging file on '%1' was changed from " CONST L_ChangeMaxSuccess2_Message = " %2 MB to %3 MB." CONST L_ChangeIntSkipping1_Message = "SKIPPING: The initial size specified for the paging file on '%1' is same as " CONST L_ChangeIntSkipping2_Message = " the present value." CONST L_ChangeMaxSkipping1_Message = "SKIPPING: The maximum size specified for the paging file on '%1' is same as " CONST L_ChangeMaxSkipping2_Message = " the present value." CONST L_CreateSuccess1_Message = "SUCCESS: A paging file with initial size of %1 MB and a maximum size " CONST L_CreateSuccess2_Message = " of %2 MB was created on the volume: '%3'" CONST L_CreateSkipping_Message = "SKIPPING: A paging file already exists on the volume: '%1'" CONST L_DeleteSuccess_Message = "SUCCESS: The paging file from volume '%1' has successfully been removed." ' constant for other error messages CONST L_InvalidFormat_ErrorMessage = "Invalid format '%1' specified." CONST L_SystemManagedSize_ErrorMessage = "Access Denied: System managed size on volume '%1'" CONST L_PromptForContinueAnyWay_Message = "Continue Anyway [y/n]?" CONST L_NotAllowedMoreThanOnce_ErrorMessage = "'%1' option is not allowed more than '1' time(s)." CONST L_RestartComputer_Message = "Restart the computer for these changes to effect." '****************************************************************************** ' END of Localization Content '****************************************************************************** ' the main options CONST OPTION_HELP = "?" CONST OPTION_CHANGE = "change" CONST OPTION_CREATE = "create" CONST OPTION_DELETE = "delete" CONST OPTION_QUERY = "query" ' the suboptions CONST SUB_OPTION_SERVER = "s" CONST SUB_OPTION_USER = "u" CONST SUB_OPTION_PASSWORD = "p" CONST SUB_OPTION_INTSIZE = "i" CONST SUB_OPTION_MAXSIZE = "m" CONST SUB_OPTION_VOLUME = "vo" CONST SUB_OPTION_FORMAT = "fo" ' constant for CScript CONST CONST_CSCRIPT = 2 ' constants for error codes CONST CONST_ERROR = 0 ' constants for options CONST CONST_SHOW_USAGE = 3 CONST CONST_CHANGE_OPTION = 11 CONST CONST_CREATE_OPTION = 21 CONST CONST_DELETE_OPTION = 31 CONST CONST_QUERY_OPTION = 41 ' constant for matched pattern CONST CONST_NO_MATCHES_FOUND = 0 ' utility specific constants CONST INITIAL_SIZE_LB = 2 CONST DRIVE_TYPE = 3 CONST MEGA_BYTES = " MB" CONST SIZE_FACTOR = 1.5 CONST CONVERSION_FACTOR = 1048576 CONST PAGEFILE_DOT_SYS = "\pagefile.sys" ' constant for the UNC format server name CONST UNC_FORMAT_SERVERNAME_PREFIX = "\\" ' constants for exit values CONST EXIT_SUCCESS = 0 CONST EXIT_UNEXPECTED = 255 CONST EXIT_INVALID_INPUT = 254 CONST EXIT_METHOD_FAIL = 250 CONST EXIT_QUERY_FAIL = 253 CONST EXIT_INVALID_PARAM = 999 ' Define namespace and class names of wmi CONST CONST_WBEM_FLAG = 131072 CONST CONST_NAMESPACE_CIMV2 = "root\cimv2" CONST CLASS_PAGE_FILE_SETTING = "Win32_PageFileSetting" CONST CLASS_LOGICAL_DISK = "Win32_LogicalDisk" CONST CLASS_COMPUTER_SYSTEM = "Win32_ComputerSystem" CONST CLASS_PAGE_FILE_USAGE = "Win32_PageFileUsage" CONST CLASS_OPERATING_SYSTEM = "Win32_OperatingSystem" CONST CLASS_PERFDISK_PHYSICAL_DISK = "Win32_PerfRawData_PerfDisk_PhysicalDisk" ' constants for data lengths for ShowResults (15,13,13,19,20,20,20,22) CONST CONST_HOSTNAME_LENGTH = 15 CONST CONST_DRIVENAME_LENGTH = 13 CONST CONST_VOLLABEL_LENGTH = 13 CONST CONST_PAGEFILENAME_LENGTH = 19 CONST CONST_INTSIZE_LENGTH = 20 CONST CONST_MAXSIZE_LENGTH = 20 CONST CONST_CURRENTSIZE_LENGTH = 20 CONST CONST_FREESPACE_LENGTH = 22 ' constants for data lengths for ShowResults (15,33,37,40) CONST CONST_TOTALMINSIZE_LENGTH = 33 CONST CONST_TOTALRECSIZE_LENGTH = 37 CONST CONST_TOTALSIZE_LENGTH = 40 Dim UseCscriptErrorMessage ' string to store the CScript usage Dim blnLocalConnection ' flag for local connection Dim component ' object for the common module ' Error Messages Dim InsufficientMaxSizeErrorMessage Dim InitialSizeRangeErrorMessage Dim NotEnoughSpaceErrorMessage Dim AtLeastFiveMBErrorMessage Dim DiskTooSmallErrorMessage ' Warning Messages Dim GrowsToFreeSpaceWarningMessage Dim CrashDumpSettingWarningMessage ' Success / Skipping messages Dim ChangeIntSuccessMessage Dim ChangeMaxSuccessMessage Dim ChangeIntSkippingMessage Dim ChangeMaxSkippingMessage Dim CreateSuccessMessage UseCscriptErrorMessage = L_UseCscript1_ErrorMessage & vbCRLF & _ L_UseCscript2_ErrorMessage & vbCRLF & vbCRLF & _ L_UseCscript3_ErrorMessage & vbCRLF & _ L_UseCscript4_ErrorMessage & vbCRLF & vbCRLF & _ L_UseCscript5_ErrorMessage InsufficientMaxSizeErrorMessage = L_InsufficientMaxSize1_ErrorMessage & vbCRLF & _ L_InsufficientMaxSize2_ErrorMessage & vbCRLF & _ L_InsufficientMaxSize3_ErrorMessage InitialSizeRangeErrorMessage = L_InitialSizeRange1_ErrorMessage & vbCRLF & _ L_InitialSizeRange2_ErrorMessage NotEnoughSpaceErrorMessage = L_NotEnoughSpace1_ErrorMessage & vbCRLF & _ L_NotEnoughSpace2_ErrorMessage AtLeastFiveMBErrorMessage = L_AtLeastFiveMB1_ErrorMessage & vbCRLF & _ L_AtLeastFiveMB2_ErrorMessage & vbCRLF & _ L_AtLeastFiveMB3_ErrorMessage & vbCRLF & _ L_AtLeastFiveMB4_ErrorMessage DiskTooSmallErrorMessage = L_DiskTooSmall1_ErrorMessage & vbCRLF & _ L_DiskTooSmall2_ErrorMessage GrowsToFreeSpaceWarningMessage = L_GrowsToFreeSpaceWarning1_Message & vbCRLF & _ L_GrowsToFreeSpaceWarning2_Message & vbCRLF & _ L_GrowsToFreeSpaceWarning3_Message CrashDumpSettingWarningMessage = L_CrashDumpSettingWarning1_Message & vbCRLF & _ L_CrashDumpSettingWarning2_Message & vbCRLF & _ L_CrashDumpSettingWarning3_Message ChangeIntSuccessMessage = L_ChangeIntSuccess1_Message & vbCRLF & _ L_ChangeIntSuccess2_Message ChangeMaxSuccessMessage = L_ChangeMaxSuccess1_Message & vbCRLF & _ L_ChangeMaxSuccess2_Message ChangeIntSkippingMessage = L_ChangeIntSkipping1_Message & vbCRLF & _ L_ChangeIntSkipping2_Message ChangeMaxSkippingMessage = L_ChangeMaxSkipping1_Message & vbCRLF & _ L_ChangeMaxSkipping2_Message CreateSuccessMessage = L_CreateSuccess1_Message & vbCRLF & _ L_CreateSuccess2_Message blnLocalConnection = FALSE ' create the object for commom module Set component = CreateObject( "Microsoft.CmdLib" ) ' check if the commom module(CmdLib.wsc) is not registered If Err.Number Then Err.Clear WScript.Echo(L_UnableToInclude_ErrorMessage) WScript.Quit(EXIT_METHOD_FAIL) End If ' set the scripting host to WScript Set component.ScriptingHost = WScript.Application ' Check whether the script is run using CScript If CInt(component.checkScript) <> CONST_CSCRIPT Then WScript.Echo (UseCscriptErrorMessage) WScript.Quit(EXIT_UNEXPECTED) End If ' call the main function Call VBMain() ' quit with exit value = 0 WScript.Quit(EXIT_SUCCESS) '****************************************************************************** '* Sub: VBMain '* '* Purpose: This is main function to starts execution '* '* Input: None '* '* Output: None '* '****************************************************************************** Sub VBMain() ON ERROR RESUME NEXT Err.Clear ' Declaring main variables Dim strMachine ' machine to configure page files on Dim strUserName ' user name to connect to the machine Dim strPassword ' password for the user Dim intIntSize ' initial size for the page file Dim intMaxSize ' maximum size for the page file Dim strVolName ' volume name Dim objVols ' object containing volume names Dim strFormat ' query display format Dim intMainOption ' main option specified Dim intTempResult ' temporary variable to hold the return value Dim blnValidArguments ' stores the return value of ValidateArguments ' Initializing Variables intTempResult = CONST_ERROR ' default is CONST_ERROR (=0) strFormat = L_DefaultFormat_Text ' default format is LIST Set objVols = CreateObject("Scripting.Dictionary") objVols.CompareMode = VBBinaryCompare If Err.Number Then ' Unable to create the dictionary object. Err.Clear WScript.Echo(L_FailCreateObject_ErrorMessage) WScript.Quit(EXIT_METHOD_FAIL) End If intTempResult = intParseCmdLine( strMachine, _ strUserName, _ strPassword, _ intIntSize, _ intMaxSize, _ strVolName, _ objVols, _ strFormat, _ intMainOption ) ' Select the operation specified by the user Select Case intTempResult Case CONST_SHOW_USAGE Select Case intMainOption Case CONST_CHANGE_OPTION Call ShowChangeUsage() Case CONST_CREATE_OPTION Call ShowCreateUsage() Case CONST_DELETE_OPTION Call ShowDeleteUsage() Case CONST_QUERY_OPTION Call ShowQueryUsage() Case Else Call ShowUsage() End Select Case CONST_CHANGE_OPTION blnValidArguments = ValidateArguments (strMachine, strUserName, strPassword, _ intIntSize, intMaxSize, objVols, strFormat, _ intMainOption) ' If all arguments valid, proceed If blnValidArguments Then Call ProcessChange(strMachine, strUserName, strPassword, _ intIntSize, intMaxSize, objVols) End If Case CONST_CREATE_OPTION blnValidArguments = ValidateArguments (strMachine, strUserName, strPassword, _ intIntSize, intMaxSize, objVols, strFormat, _ intMainOption) ' If all arguments valid, proceed If blnValidArguments Then Call ProcessCreate(strMachine, strUserName, strPassword, _ intIntSize, intMaxSize, objVols) End If Case CONST_DELETE_OPTION blnValidArguments = ValidateArguments (strMachine, strUserName, strPassword, _ intIntSize, intMaxSize, objVols, strFormat, _ intMainOption) ' If all arguments valid, proceed If blnValidArguments Then Call ProcessDelete(strMachine, strUserName, strPassword, objVols) ' Here wild cards cannot be specified End If Case CONST_QUERY_OPTION blnValidArguments = ValidateArguments (strMachine, strUserName, strPassword, _ intIntSize, intMaxSize, objVols, strFormat, _ intMainOption) ' If all arguments valid, proceed If blnValidArguments Then Call ProcessQuery(strMachine, strUserName, strPassword, strFormat) End If Case CONST_ERROR WSCript.Quit(EXIT_INVALID_INPUT) End Select End Sub '****************************************************************************** '* Function: intParseCmdLine '* '* Purpose: Parses the command line arguments to the variables '* '* Input: '* [out] strMachine machine to configure page files on '* [out] strUserName user name to connect to the machine '* [out] strPassword password for the user '* [out] intIntSize initial size for the page file '* [out] intMaxSize maximum size for the page file '* [in] strVolName individual volume name(s) '* [out] objVols object containing volume names '* [out] strFormat query display format '* [out] intMainOption main option specified '* '* Output: Returns CONST_SHOW_USAGE, CONST_CHANGE_OPTION , '* CONST_CREATE_OPTION, CONST_DELETE_OPTION , '* CONST_QUERY_OPTION or CONST_ERROR. '* Displays error message and quits if invalid option is asked '* '****************************************************************************** Private Function intParseCmdLine( ByRef strMachine, _ ByRef strUserName, _ ByRef strPassword, _ ByRef intIntSize, _ ByRef intMaxSize, _ ByVal strVolName, _ ByRef objVols, _ ByRef strFormat, _ ByRef intMainOption ) ON ERROR RESUME NEXT Err.Clear Dim strUserGivenArg ' to temporarily store the user given arguments Dim intArgIter ' to count the number of arguments given Dim intQCount ' to count the number of help options given Dim intMainOptionNumber ' to count the number of main operations selected (Max allowed = 1) Dim intVolumes ' to store the number of volumes specified ' Following variables are used to check if a switch if given more than once Dim blnIntSizeSpecified Dim blnMaxSizeSpecified Dim blnFormatSpecified Dim blnMachineSpecified Dim blnUserSpecified Dim blnPasswordSpecified ' Initialization strUserGivenArg = "" intMainOptionNumber = 0 intQCount = 0 intArgIter = 0 intParseCmdLine = 0 ' initially none of the parameters are specified, so set all flags to FALSE blnIntSizeSpecified = FALSE blnMaxSizeSpecified = FALSE blnFormatSpecified = FALSE blnMachineSpecified = FALSE blnUserSpecified = FALSE blnPasswordSpecified = FALSE ' if no arguments are specified, default option is query If WScript.Arguments.Count = 0 Then intParseCmdLine = CONST_QUERY_OPTION intMainOption = CONST_QUERY_OPTION End If ' Retrieve the command line parameters and their values Do While intArgIter <= WScript.Arguments.Count - 1 strUserGivenArg = WScript.Arguments.Item(intArgIter) ' check if the first character is a '-' OR '/' symbol If Left(strUserGivenArg,1) = "/" OR Left(strUserGivenArg,1) = "-" Then ' ignore the symbol and take the rest as the switch specified strUserGivenArg = Right(strUserGivenArg,Len(strUserGivenArg) - 1) Select Case LCase(strUserGivenArg) Case LCase(OPTION_HELP) intQCount = intQCount + 1 If (CInt(intQCount) >= 2 OR CInt(WScript.Arguments.Count) > 2) Then intParseCmdLine = CONST_ERROR WScript.Echo(L_InvalidHelpUsage_ErrorMessage) Exit Function Else intParseCmdLine = CONST_SHOW_USAGE intArgIter = intArgIter + 1 End If Case LCase(OPTION_CHANGE) If intQCount = 1 Then ' intQCount = 1 means help specified intParseCmdLine = CONST_SHOW_USAGE Else intParseCmdLine = CONST_CHANGE_OPTION End If intMainOption = CONST_CHANGE_OPTION intMainOptionNumber = intMainOptionNumber + 1 intArgIter = intArgIter + 1 Case LCase(OPTION_CREATE) If intQCount = 1 Then ' intQCount = 1 means help specified intParseCmdLine = CONST_SHOW_USAGE Else intParseCmdLine = CONST_CREATE_OPTION End If intMainOption = CONST_CREATE_OPTION intMainOptionNumber = intMainOptionNumber + 1 intArgIter = intArgIter + 1 Case LCase(OPTION_DELETE) If intQCount = 1 Then ' intQCount = 1 means help specified intParseCmdLine = CONST_SHOW_USAGE Else intParseCmdLine = CONST_DELETE_OPTION End If intMainOption = CONST_DELETE_OPTION intMainOptionNumber = intMainOptionNumber + 1 intArgIter = intArgIter + 1 Case LCase(OPTION_QUERY) If intQCount = 1 Then ' intQCount = 1 means help specified intParseCmdLine = CONST_SHOW_USAGE Else intParseCmdLine = CONST_QUERY_OPTION End If intMainOption = CONST_QUERY_OPTION intMainOptionNumber = intMainOptionNumber + 1 intArgIter = intArgIter + 1 Case LCase(SUB_OPTION_SERVER) ' Check if server name is given with help usage If intParseCmdLine = CONST_SHOW_USAGE Then WScript.Echo(L_InvalidHelpUsage_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If ' Check if Machine Name is already specified If NOT blnMachineSpecified Then blnMachineSpecified = TRUE ' Set Specified Flag to TRUE If NOT component.getArguments(L_MachineName_Text,strMachine,intArgIter,FALSE) Then component.VBPrintf L_InvalidSyntax_ErrorMessage Call typeMessage(intMainOption) intParseCmdLine = CONST_ERROR Exit Function End If intArgIter = intArgIter + 1 Else component.VBPrintf L_InvalidSyntax_ErrorMessage & " " & _ L_NotAllowedMoreThanOnce_ErrorMessage , _ Array(WScript.Arguments.Item(intArgIter)) ' print the appropriate help usage message Call typeMessage(intMainOption) WScript.Quit(EXIT_INVALID_INPUT) End If Case LCase(SUB_OPTION_USER) ' Check if user name is given with help usage If intParseCmdLine = CONST_SHOW_USAGE Then WScript.Echo(L_InvalidHelpUsage_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If ' Check if User Name is already specified If NOT blnUserSpecified Then blnUserSpecified = TRUE ' Set Specified Flag to TRUE If NOT component.getArguments(L_User_Text,strUserName,intArgIter,FALSE) Then component.VBPrintf L_InvalidSyntax_ErrorMessage Call typeMessage(intMainOption) intParseCmdLine = CONST_ERROR Exit Function End If intArgIter = intArgIter + 1 Else component.VBPrintf L_InvalidSyntax_ErrorMessage & " " & _ L_NotAllowedMoreThanOnce_ErrorMessage , _ Array(WScript.Arguments.Item(intArgIter)) ' print the appropriate help usage message Call typeMessage(intMainOption) WScript.Quit(EXIT_INVALID_INPUT) End If Case LCase(SUB_OPTION_PASSWORD) ' Check if password is given with help usage If intParseCmdLine = CONST_SHOW_USAGE Then WScript.Echo(L_InvalidHelpUsage_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If ' Check if Password is already specified If NOT blnPasswordSpecified Then blnPasswordSpecified = TRUE ' Set Specified Flag to TRUE If NOT component.getArguments(L_Password_Text,strPassword,intArgIter,FALSE) Then component.VBPrintf L_InvalidSyntax_ErrorMessage Call typeMessage(intMainOption) intParseCmdLine = CONST_ERROR Exit Function End If intArgIter = intArgIter + 1 Else component.VBPrintf L_InvalidSyntax_ErrorMessage & " " & _ L_NotAllowedMoreThanOnce_ErrorMessage , _ Array(WScript.Arguments.Item(intArgIter)) ' print the appropriate help usage message Call typeMessage(intMainOption) WScript.Quit(EXIT_INVALID_INPUT) End If Case LCase(SUB_OPTION_INTSIZE) ' Check if initsize is given with help usage If intParseCmdLine = CONST_SHOW_USAGE Then WScript.Echo(L_InvalidHelpUsage_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If ' Check if initsize is already specified If NOT blnIntSizeSpecified Then blnIntSizeSpecified = TRUE ' Set Specified Flag to TRUE If NOT component.getArguments(L_Intsize_Text,intIntSize,intArgIter,FALSE) Then component.VBPrintf L_InvalidSyntax_ErrorMessage Call typeMessage(intMainOption) intParseCmdLine = CONST_ERROR Exit Function End If intArgIter = intArgIter + 1 Else component.VBPrintf L_InvalidSyntax_ErrorMessage & " " & _ L_NotAllowedMoreThanOnce_ErrorMessage , _ Array(WScript.Arguments.Item(intArgIter)) ' print the appropriate help usage message Call typeMessage(intMainOption) WScript.Quit(EXIT_INVALID_INPUT) End If Case LCase(SUB_OPTION_MAXSIZE) ' Check if maxsize is given with help usage If intParseCmdLine = CONST_SHOW_USAGE Then WScript.Echo(L_InvalidHelpUsage_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If ' Check if Maxsize is already specified If NOT blnMaxSizeSpecified Then blnMaxSizeSpecified = TRUE ' Set Specified Flag to TRUE If NOT component.getArguments(L_Maxsize_Text,intMaxSize,intArgIter,FALSE) Then component.VBPrintf L_InvalidSyntax_ErrorMessage Call typeMessage(intMainOption) intParseCmdLine = CONST_ERROR Exit Function End If intArgIter = intArgIter + 1 Else component.VBPrintf L_InvalidSyntax_ErrorMessage & " " & _ L_NotAllowedMoreThanOnce_ErrorMessage , _ Array(WScript.Arguments.Item(intArgIter)) ' print the appropriate help usage message Call typeMessage(intMainOption) WScript.Quit(EXIT_INVALID_INPUT) End If Case LCase(SUB_OPTION_FORMAT) ' Check if maxsize is given with help usage If intParseCmdLine = CONST_SHOW_USAGE Then WScript.Echo(L_InvalidHelpUsage_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If ' Check if format is already specified If NOT blnFormatSpecified Then blnFormatSpecified = TRUE ' Set Specified Flag to TRUE If NOT component.getArguments(L_Format_Text,strFormat,intArgIter,FALSE) Then component.VBPrintf L_InvalidSyntax_ErrorMessage Call typeMessage(intMainOption) intParseCmdLine = CONST_ERROR Exit Function End If intArgIter = intArgIter + 1 Else component.VBPrintf L_InvalidSyntax_ErrorMessage & " " & _ L_NotAllowedMoreThanOnce_ErrorMessage , _ Array(WScript.Arguments.Item(intArgIter)) ' print the appropriate help usage message Call typeMessage(intMainOption) WScript.Quit(EXIT_INVALID_INPUT) End If Case LCase(SUB_OPTION_VOLUME) ' Check if volume is given with help usage If intParseCmdLine = CONST_SHOW_USAGE Then WScript.Echo(L_InvalidHelpUsage_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If If NOT component.getArguments(L_Volume_Text,strVolName,intArgIter,FALSE) Then component.VBPrintf L_InvalidSyntax_ErrorMessage Call typeMessage(intMainOption) intParseCmdLine = CONST_ERROR Exit Function Else If strVolName = "*" Then objVols.Add LCase(strVolName), -1 Else If NOT objVols.Exists(LCase(strVolName)) Then objVols.Add LCase(strVolName), -1 End If intVolumes = objVols.Count End If End If intArgIter = intArgIter + 1 Case Else ' display the invalid param err msg first component.VBPrintf L_InvalidParameter_ErrorMessage, _ Array(WScript.arguments.Item(intArgIter)) ' then display the 'type ..usage' message Select Case CInt(intMainOption) Case CONST_CHANGE_OPTION component.VBPrintf L_TypeChangeUsage_Message, _ Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_PARAM) Case CONST_CREATE_OPTION component.VBPrintf L_TypeCreateUsage_Message, _ Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_PARAM) Case CONST_DELETE_OPTION component.VBPrintf L_TypeDeleteUsage_Message, _ Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_PARAM) Case CONST_QUERY_OPTION component.VBPrintf L_TypeQueryUsage_Message, _ Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_PARAM) Case Else component.VBPrintf L_TypeUsage_Message, _ Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_PARAM) End Select End Select Else ' invalid argument specified ' display the invalid param err msg first component.VBPrintf L_InvalidParameter_ErrorMessage, _ Array(WScript.arguments.Item(intArgIter)) ' then display the 'type ..usage' message Select Case CInt(intMainOption) Case CONST_CHANGE_OPTION component.VBPrintf L_TypeChangeUsage_Message, _ Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_PARAM) Case CONST_CREATE_OPTION component.VBPrintf L_TypeCreateUsage_Message, _ Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_PARAM) Case CONST_DELETE_OPTION component.VBPrintf L_TypeDeleteUsage_Message, _ Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_PARAM) Case CONST_QUERY_OPTION component.VBPrintf L_TypeQueryUsage_Message, _ Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_PARAM) Case Else component.VBPrintf L_TypeUsage_Message, _ Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_PARAM) End Select End If Loop ' check if the there is any volume(s) specified. If objVols.Count = 0 Then intVolumes = objVols.Count End If ' Check if volumes | * is specified along with help If (intVolumes > 0 AND intQCount = 1) Then WScript.Echo(L_InvalidHelpUsage_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If ' Check if two major operations are selected at a time If ( intMainOptionNumber > 1 ) Then WScript.Echo(L_InvalidSyntax_ErrorMessage) component.VBPrintf L_TypeUsage_Message,Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_INPUT) ElseIf (intQcount = 0 AND intmainoption = 0) Then intMainOption = CONST_QUERY_OPTION End If ' check if NO major option(s) is specified, but other switches are specified If ( intMainOptionNumber = 0 ) Then If blnIntSizeSpecified OR _ blnMaxSizeSpecified OR _ blnFormatSpecified OR _ blnMachineSpecified OR _ blnUserSpecified OR _ blnPasswordSpecified OR _ intVolumes > 0 Then WScript.Echo(L_InvalidSyntax_ErrorMessage) component.VBPrintf L_TypeUsage_Message, _ Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_INPUT) End If End If ' check if format is specified with create option If (intMainOption = CONST_CREATE_OPTION) Then If blnFormatSpecified Then WScript.Echo(L_InvalidSyntax_ErrorMessage) component.VBPrintf L_TypeCreateUsage_Message, _ Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_INPUT) End If End If ' check if format is specified with change option If (intMainOption = CONST_CHANGE_OPTION) Then If blnFormatSpecified Then WScript.Echo(L_InvalidSyntax_ErrorMessage) component.VBPrintf L_TypeChangeUsage_Message, _ Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_INPUT) End If End If ' check if /Initsize, /Maxsize, /FO are specified If (intMainOption = CONST_DELETE_OPTION) Then If (blnIntSizeSpecified OR blnMaxSizeSpecified OR blnFormatSpecified) Then WScript.Echo(L_InvalidSyntax_ErrorMessage) component.VBPrintf L_TypeDeleteUsage_Message, _ Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_INPUT) End If End If ' check if /Initsize, /Maxsize, are specified If (intMainOption = CONST_QUERY_OPTION) Then If (blnIntSizeSpecified OR blnMaxSizeSpecified) Then WScript.Echo(L_InvalidSyntax_ErrorMessage) component.VBPrintf L_TypeQueryUsage_Message, _ Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_INPUT) End If End If End Function '****************************************************************************** '* Function: ValidateArguments '* '* Purpose: Validates the command line arguments given by the user '* '* Input: '* [out] strMachine machine to configure page files on '* [out] strUserName user name to connect to the machine '* [out] strPassword password for the user '* [out] intIntSize the initial size for the page file '* [out] intMaxSize the maximum size for the page file '* [out] objVols the object containing volume names '* [out] strFormat the query display format '* [out] intMainOption the main option specified '* '* Output: Returns true if all valid else displays error message and quits '* Gets the password from the user if not specified along with User. '* '****************************************************************************** Private Function ValidateArguments ( ByRef strMachine, _ ByRef strUserName, _ ByRef strPassword, _ ByRef intIntSize, _ ByRef intMaxSize, _ ByRef objVols, _ ByRef strFormat, _ ByRef intMainOption) ON ERROR RESUME NEXT Err.Clear Dim strMatchPattern ' the pattern to be matched Dim intVolumes ' to count the no.of volumes specified Dim arrVolume ' array to store the volumes specified Dim i ' Loop variable ' Initialization intVolumes = CInt(objVols.Count) arrVolume = objVols.Keys ValidateArguments = TRUE i = 0 ' Check if invalid server name is given If NOT IsEmpty(strMachine) Then If Trim(strMachine) = vbNullString Then WScript.Echo(L_InvalidServerName_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If End If ' Check if invalid user name is given If NOT IsEmpty(strUserName) Then If Trim(strUserName) = vbNullString Then WScript.Echo(L_InvalidUserName_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If End If ' check if user is given without machine OR password If ((strUserName <> VBEmpty) AND (strMachine = VBEmpty)) Then WScript.Echo L_InvalidServerCredentials_ErrorMessage component.VBPrintf L_TypeUsage_Message, _ Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_INPUT) ' check if password is given without user OR machine ElseIf ((strPassword <> VBEmpty) AND (strUserName = VBEmpty))Then WScript.Echo L_InvalidUserCredentials_ErrorMessage component.VBPrintf L_TypeUsage_Message, _ Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_INPUT) End If ' Check if initial size is specified, validate if it is a poistive number If Len(CStr(intIntSize)) > 0 Then ' Initsize should be numeric only ' chr(46) indicates "." (dot) If NOT (IsNumeric(intIntSize) AND InStr(intIntSize,chr(46)) = 0 AND Instr(intIntSize,"-") = 0) Then ValidateArguments = FALSE WScript.Echo L_InvalidInitSizeValue_ErrorMessage WScript.Quit(EXIT_INVALID_INPUT) End If End If ' Check if maximum size is specified, validate if it is a poistive number If Len(CStr(intMaxSize)) > 0 Then ' Maxsize should be numeric only ' chr(46) indicates "." (dot) If NOT (IsNumeric(intMaxSize) AND InStr(intMaxSize,chr(46)) = 0 AND Instr(intMaxSize,"-") = 0) Then ValidateArguments = FALSE WScript.Echo L_InvalidMaxSizeValue_ErrorMessage WScript.Quit(EXIT_INVALID_INPUT) End If End If Select Case CInt(intMainOption) Case CONST_CHANGE_OPTION ' Valid Cases : either (initsize + volume) OR (maxsize + volume) ' OR (initsize + maxsize + volume) ' If none of the parameters (initsize or maxsize) is specified If (Len(CStr(intIntSize)) = 0 AND Len(CStr(intMaxSize)) = 0) Then ValidateArguments = FALSE WScript.Echo(L_InvalidSyntax_ErrorMessage & " " & _ L_NoneoftheSizeSpecified_ErrorMessage) component.VBPrintf L_TypeChangeUsage_Message, _ Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_INPUT) End If ' check if the volume is specified If (objVols.Count = 0) Then ValidateArguments = FALSE WScript.Echo(L_InvalidSyntax_ErrorMessage & " " & _ L_VolumeNameNotSpecified_ErrorMessage) component.VBPrintf L_TypeChangeUsage_Message, _ Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_INPUT) ' check if volume name is valid ElseIf isValidDrive(objVols,intMainOption) Then ValidateArguments = TRUE End If Case CONST_CREATE_OPTION ' initsize is required If ( Len(CStr(intIntSize)) = 0 ) Then ValidateArguments = FALSE WScript.Echo(L_InvalidSyntax_ErrorMessage & " " & _ L_InitialSizeNotSpecified_ErrorMessage) component.VBPrintf L_TypeCreateUsage_Message, _ Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_INPUT) End If ' maxsize is required If ( Len(CStr(intMaxSize)) = 0 ) Then ValidateArguments = FALSE WScript.Echo(L_InvalidSyntax_ErrorMessage & " " & _ L_MaximumSizeNotSpecified_ErrorMessage) component.VBPrintf L_TypeCreateUsage_Message, _ Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_INPUT) End If ' volume name is required If (objVols.Count = 0) Then ValidateArguments = FALSE WScript.Echo(L_InvalidSyntax_ErrorMessage & " " & _ L_VolumeNameNotSpecified_ErrorMessage) component.VBPrintf L_TypeCreateUsage_Message, _ Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_INPUT) ' check if volume name is valid ElseIf isValidDrive(objVols,intMainOption) Then ValidateArguments = TRUE End If Case CONST_DELETE_OPTION ' ONLY volume is required If (objVols.Count = 0) Then ValidateArguments = FALSE WScript.Echo(L_InvalidSyntax_ErrorMessage & " " & _ L_VolumeNameNotSpecified_ErrorMessage) component.VBPrintf L_TypeDeleteUsage_Message, _ Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_INPUT) ' check if volume name is valid ElseIf isValidDrive(objVols,intMainOption) Then ValidateArguments = TRUE End If ' Wild Card Character * is not allowed for /Delete option If (objVols.Exists("*")) Then ValidateArguments = FALSE objVols.Remove "*" WScript.Echo(L_InvalidInput_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If Case CONST_QUERY_OPTION ' check if any format is specified. If Len(strFormat) > 0 Then ' only table, list and csv display formats allowed ' L_PatternFormat_Text contains ^(table|list|csv)$ If CInt(component.matchPattern(L_PatternFormat_Text, strFormat)) = CONST_NO_MATCHES_FOUND Then component.vbPrintf L_InvalidSyntax_ErrorMessage & " " & _ L_InvalidFormat_ErrorMessage, Array(strFormat) component.VBPrintf L_TypeQueryUsage_Message, _ Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_INPUT) End If End If ' Validation to check if volume names are specified with Query Option: If (intVolumes <> 0) Then ValidateArguments = FALSE WScript.Echo(L_InvalidSyntax_ErrorMessage) component.VBPrintf L_TypeQueryUsage_Message, _ Array(UCase(WScript.ScriptName)) WScript.Quit(EXIT_INVALID_INPUT) End If Case Else ' if intMainOption has some non-zero value means one operation is selected If (intMainOption > 0) Then ' -operation & volname together are valid ValidateArguments = TRUE Else ValidateArguments = FALSE WScript.Echo(L_InvalidInput_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If End Select ' verify If required credentials given If (((NOT IsEmpty(strUserName)) AND (IsEmpty(strMachine))) OR _ ((NOT IsEmpty(strPassword)) AND (IsEmpty(strUserName))) )Then ValidateArguments = FALSE WScript.Echo (L_InvalidCredentials_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If ' check if the machine name is specified using "\\" (UNC format) If Left(strMachine,2) = UNC_FORMAT_SERVERNAME_PREFIX Then If Len(strMachine) = 2 Then WScript.Echo L_InvalidInput_ErrorMessage WScript.Quit(EXIT_UNEXPECTED) End If ' remove the "\\" from the front strMachine = Mid(strMachine,3,Len(strMachine)) End If ' If password not specified with the user name, Then get it If ((NOT IsEmpty(strUserName)) AND (IsEmpty(strPassword))) Then strPassword = component.getPassword() End If End Function '****************************************************************************** '* Function: isValidDrive '* '* Purpose: To check if the specified volume is valid or not '* '* Input: '* [in] objVols object that store the volumes specified '* [in] intMainOption the main option specified '* '* Output: Returns TRUE or FALSE '* '****************************************************************************** Function isValidDrive(ByRef objVols,ByVal intMainOption) ON ERROR RESUME NEXT Err.Clear Dim intVolumes ' to count the no.of volumes specified Dim arrVolume ' array to store the volumes specified Dim i ' Loop variable ' Initialization intVolumes = CInt(objVols.Count) arrVolume = objVols.Keys isValidDrive = FALSE i = 0 ' Check if the drive name is in correct Format [c-z]: or [C-Z]: ' This has to be checked for each Drive specified - Do While Loop Do While (i < intVolumes) ' Volumes specified are valid for all option except Query If intMainOption <> CONST_QUERY_OPTION Then ' Valid volume is either '*' OR a letter followed by a colon (total length = 2) If ((Len(arrVolume(i)) = 2) AND (InStr(arrVolume(i),chr(58)) = 2) OR arrVolume(i) = "*") Then ' check if the volume name specified is in the format ^([c-zC-Z]:|\*)$ If CInt(component.matchPattern(L_VolumePatternFormat_Text,arrVolume(i))) = CONST_NO_MATCHES_FOUND Then ' Invalid Volume Names or junk data is specified component.VBPrintf L_InvalidVolumeName_ErrorMessage, _ Array(arrVolume(i)) isValidDrive = FALSE ' remove the INVALID drive(s) objVols.Remove arrVolume(i) End If Else isValidDrive = FALSE component.VBPrintf L_InvalidVolumeName_ErrorMessage, _ Array(arrVolume(i)) objVols.Remove arrVolume(i) End If ' check the number of valid drives specified If objVols.Count = 0 Then WScript.Quit(EXIT_INVALID_INPUT) End If Else WScript.Echo(L_InvalidInput_ErrorMessage) WScript.Quit (EXIT_INVALID_INPUT) End If isValidDrive = isValidDrive OR TRUE i = i + 1 Loop End Function '****************************************************************************** '* Sub: ProcessChange '* '* Purpose: Processes the /Change option and displays the changed '* details of the page file '* '* Input: '* [in] strMachine machine to configure page files on '* [in] strUserName user name to connect to the machine '* [in] strPassword password for the user '* [in] intIntSize the initial size for the page file '* [in] intMaxSize the maximum size for the page file '* [in] objVols the object containing volume names '* '* Output: Displays error message and quits if connection fails '* '****************************************************************************** Private Sub ProcessChange( ByVal strMachine, _ ByVal strUserName, _ ByVal strPassword, _ ByVal intIntSize, _ ByVal intMaxSize, _ ByVal objVols ) ON ERROR RESUME NEXT Err.Clear Dim intOldInitialSize ' to store the old intial size Dim intOldMaximumSize ' to store the old maximum size Dim arrVolume ' to store all the volumes specified Dim intVolumes ' to store the no.of volumes specified Dim strQuery ' to store the query for pagefiles Dim strQueryDisk ' to store the query for disk Dim strQueryComp ' to store the query for computersystem Dim objService ' service object Dim objInstance ' instance object Dim objInst ' instance object Dim objEnumerator ' collection set for query results Dim objEnumforDisk ' collection set for query results Dim objEnum ' collection set for query results Dim blnBothSpecified ' flag to check if both initsize & maxsize are specified Dim blnSuccessMsg ' flag to check if a SUCCESS message is generated Dim intFreeSpace ' to store total free space Dim intFreeDiskSpace ' to store free disk space Dim intCurrentSize ' to store the current pagefile size Dim intDiskSize ' to store the disk size for the specified disk Dim intMemSize ' to store physical memory size Dim intCrashDump ' to store the current crash dump setting value Dim strReply ' to store the user reply Dim strDriveName ' to store the drive name Dim strHostName ' to store the host name Dim intMaxSizeUB ' to store the upper bound for maximum size Dim i ' loop variable ' Establish a connection with the server. If NOT component.wmiConnect(CONST_NAMESPACE_CIMV2 , _ strUserName , _ strPassword , _ strMachine , _ blnLocalConnection, _ objService ) Then WScript.Echo(L_HintCheckConnection_Message) WScript.Quit(EXIT_METHOD_FAIL) End If ' Initialize variables i = 0 intFreeSpace = 0 intFreeDiskSpace = 0 intCurrentSize = 0 blnBothSpecified = FALSE blnSuccessMsg = FALSE intMaxSizeUB = 0 strQuery = "Select * From " & CLASS_PAGE_FILE_SETTING If (objVols.Exists("*")) Then Set objEnumerator = objService.ExecQuery(strQuery, "WQL", 0, null) For each objInstance in objEnumerator strDriveName = Mid(objInstance.Name,1,2) If NOT objVols.Exists (LCase(strDriveName)) Then objVols.add LCase(strDriveName), -1 End If Next objVols.remove "*" End If intVolumes = objVols.Count arrVolume = objVols.keys ' get the host Name - used to get Crash Dump Settings strQueryComp = "Select * From " & CLASS_COMPUTER_SYSTEM Set objEnum = objService.ExecQuery(strQueryComp, "WQL", 0, null) ' check for any errors If Err.Number Then Err.Clear WScript.Echo(L_UnableToRetrieveInfo_ErrorMessage) WScript.Quit(EXIT_QUERY_FAIL) End If For each objInst in objEnum If NOT ISEmpty(objInst.Name) Then strHostName = objInst.Name Else WScript.Echo(L_UnableToRetrieveInfo_ErrorMessage) WScript.Quit(EXIT_QUERY_FAIL) End If Next ' check if initsize and maxsize both are specified If (Len(intIntSize) > 0 AND Len(intMaxSize) > 0) Then blnBothSpecified = TRUE End If ' check if no page files exist on the system. strQuery = "Select * From " & CLASS_PAGE_FILE_SETTING Set objEnumerator = objService.ExecQuery(strQuery, "WQL", 0, null) If (objEnumerator.Count = 0) Then WScript.Echo(L_NoPageFiles_Message) WScript.Quit(EXIT_UNEXPECTED) End If ' release the object for re-use. Set objEnumerator = nothing Do While( i < intVolumes ) ' check if its a valid drive/volume - check from Win32_LogicalDisk strQueryDisk = "Select * From " & CLASS_LOGICAL_DISK & _ " where DriveType = " & DRIVE_TYPE & " and DeviceID = '" & arrVolume(i) & "'" Set objEnumforDisk = objService.ExecQuery(strQueryDisk, "WQL", 0, null) If objEnumforDisk.Count > 0 Then strQuery = "Select * From " & CLASS_PAGE_FILE_SETTING strQuery = strQuery & " where NAME = '" & arrVolume(i) & _ "\" & PAGEFILE_DOT_SYS & "'" Set objEnumerator = objService.ExecQuery(strQuery, "WQL", 0, null) ' check for any errors If Err.Number Then Err.Clear WScript.Echo(L_UnableToRetrieveInfo_ErrorMessage) WScript.Quit(EXIT_QUERY_FAIL) End If ' check if a page file exists on the specified volume If (objEnumerator.Count > 0) Then For each objInstance in objEnumerator ' check for system managed pagefiles If (objInstance.InitialSize = 0 AND objInstance.MaximumSize = 0) Then component.VBPrintf L_SystemManagedSize_ErrorMessage, _ Array(UCase(arrVolume(i))) Else strDriveName = Mid(objInstance.Name,1,2) If NOT blnBothSpecified Then ' check if initsize is given If (intIntSize > 0) Then ' Check if initsize is greater than 2 MB If CLng(intIntSize) >= CLng(INITIAL_SIZE_LB) Then ' check for overflows If Err.Number Then Err.Clear ' get the upper bound allowed for maximum size intMaxSizeUB = getMaxSizeUB(objService) component.VBPrintf InsufficientMaxSizeErrorMessage, _ Array( UCase(arrVolume(i)) , intMaxSizeUB ) WScript.Quit(EXIT_INVALID_INPUT) End If ' get the drive name first strDriveName = Mid(objInstance.Name,1,2) ' get the free space available on the specified disk intFreeDiskSpace = getFreeSpaceOnDisk(strDriveName,objService) ' get the current pagefile size intCurrentSize = getCurrentPageFileSize(objService,objInstance) ' get the total free space If Len(intCurrentSize) > 0 Then intFreeSpace = intFreeDiskSpace + intCurrentSize Else WScript.Echo(L_UnableToRetrieveInfo_ErrorMessage) WScript.Quit(EXIT_QUERY_FAIL) End If ' Check if it is greater than free disk space If CLng(intIntSize) > CLng(intFreeSpace) Then ' check for overflows If Err.Number Then Err.Clear ' get the upper bound allowed for maximum size intMaxSizeUB = getMaxSizeUB(objService) component.VBPrintf InsufficientMaxSizeErrorMessage, _ Array( UCase(arrVolume(i)) , intMaxSizeUB ) WScript.Quit(EXIT_INVALID_INPUT) End If WScript.Echo(NotEnoughSpaceErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) Else If CLng(intIntSize) > CLng(intFreeSpace) - 5 Then ' check for overflows If Err.Number Then Err.Clear WScript.Echo(L_InvalidInput_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If WScript.Echo(AtLeastFiveMBErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) Else ' only one of initsize, maxsize is specified ' check if the specified initsize is less than existing maxsize If (CInt(intIntSize) <= objInstance.MaximumSize) Then ' get the crash dump setting value intCrashDump = GetCrashDumpSetting(strUserName,strPassword,strMachine) ' get the Physical Memory Size intMemSize = GetPhysicalMemorySize(strHostName,objService) ' If the user has selected "yes" for the warning message If isCrashDumpValueSet(intCrashDump,intIntSize,intMemSize,arrVolume(i)) Then ' Check if initsize is same as the present value If (CInt(intIntSize) <> objInstance.InitialSize) Then ' store the old initsize value intOldInitialSize = objInstance.InitialSize ' set the new initsize objInstance.InitialSize = intIntSize objInstance.Put_(CONST_WBEM_FLAG) If Err.Number Then Err.Clear WScript.Echo(L_UpdateFailed_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If component.VBPrintf ChangeIntSuccessMessage, _ Array(UCase(arrVolume(i)),CInt(intOldInitialSize),CInt(intIntSize)) blnSuccessMsg = TRUE Else component.VBPrintf ChangeIntSkippingMessage, Array(UCase(arrVolume(i))) End If End If Else ' get the upper bound allowed for maximum size intMaxSizeUB = getMaxSizeUB(objService) component.VBPrintf InsufficientMaxSizeErrorMessage, _ Array( UCase(arrVolume(i)) , intMaxSizeUB ) End If End If End If Else ' get the upper bound allowed for maximum size intMaxSizeUB = getMaxSizeUB(objService) component.VBPrintf InitialSizeRangeErrorMessage, _ Array(intMaxSizeUB) WScript.Quit(EXIT_INVALID_INPUT) End If Else ' Check if initsize specified as 0 If Len(intIntSize) > 0 Then ' get the upper bound allowed for maximum size intMaxSizeUB = getMaxSizeUB(objService) component.VBPrintf InitialSizeRangeErrorMessage, _ Array(intMaxSizeUB) WScript.Quit(EXIT_INVALID_INPUT) End If End If ' initsize checked ' check if maxsize is given If (intMaxSize > 0) Then ' get the free space available on the specified disk intFreeDiskSpace = getFreeSpaceOnDisk(strDriveName,objService) ' get the current pagefile size intCurrentSize = getCurrentPageFileSize(objService,objInstance) ' get the total free space If Len(intCurrentSize) > 0 Then intFreeSpace = intFreeDiskSpace + intCurrentSize Else WScript.Echo(L_UnableToRetrieveInfo_ErrorMessage) WScript.Quit(EXIT_QUERY_FAIL) End If ' Get the Disk Size for the specified drive intDiskSize = GetDiskSize(arrVolume(i),objService) ' check if maxsize is more than initsize If (CLng(intMaxSize) > CLng(intDiskSize)) Then ' check for overflows If Err.Number Then Err.Clear ' get the upper bound allowed for maximum size intMaxSizeUB = getMaxSizeUB(objService) component.VBPrintf InsufficientMaxSizeErrorMessage, _ Array( UCase(arrVolume(i)) , intMaxSizeUB ) WScript.Quit(EXIT_INVALID_INPUT) End If component.VBPrintf DiskTooSmallErrorMessage, Array(UCase(arrVolume(i))) Else If (CLng(intMaxSize) > CLng(intFreeSpace)) Then ' check for overflows If Err.Number Then Err.Clear WScript.Echo(L_InvalidInput_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If component.VBPrintf GrowsToFreeSpaceWarningMessage, _ Array(UCase(arrVolume(i)),intFreeSpace) strReply = getReply() If Trim(LCase(strReply)) = L_UserReplyYes_Text Then ' set the maxsize to be the free space on disk intMaxSize = intFreeSpace ' check if the given maxsize is greater than the existing initial size. If (CInt(intMaxSize) >= objInstance.InitialSize) Then If (CInt(intMaxSize) <> objInstance.MaximumSize) Then intOldMaximumSize = objInstance.MaximumSize objInstance.MaximumSize = intMaxSize objInstance.Put_(CONST_WBEM_FLAG) If Err.Number Then Err.Clear WScript.Echo(L_UpdateFailed_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If component.VBPrintf ChangeMaxSuccessMessage, _ Array(UCase(arrVolume(i)),CInt(intOldMaximumSize),CInt(intMaxSize)) blnSuccessMsg = TRUE Else component.VBPrintf ChangeMaxSkippingMessage, Array(UCase(arrVolume(i))) End If Else ' get the upper bound allowed for maximum size intMaxSizeUB = getMaxSizeUB(objService) component.VBPrintf InsufficientMaxSizeErrorMessage, _ Array( UCase(arrVolume(i)) , intMaxSizeUB ) End If ElseIf LCase(strReply) = L_UserReplyNo_Text Then WScript.Quit(EXIT_SUCCESS) Else WScript.Echo(L_InvalidInput_ErrorMessage) WScript.Quit (EXIT_INVALID_INPUT) End If Else If (CInt(intMaxSize) >= objInstance.InitialSize) Then If (CInt(intMaxSize) <> objInstance.MaximumSize) Then intOldMaximumSize = objInstance.MaximumSize objInstance.MaximumSize = intMaxSize objInstance.Put_(CONST_WBEM_FLAG) If Err.Number Then Err.Clear WScript.Echo(L_UpdateFailed_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If component.VBPrintf ChangeMaxSuccessMessage, _ Array(UCase(arrVolume(i)),CInt(intOldMaximumSize),CInt(intMaxSize)) blnSuccessMsg = TRUE Else component.VBPrintf ChangeMaxSkippingMessage, Array(UCase(arrVolume(i))) End If Else ' get the upper bound allowed for maximum size intMaxSizeUB = getMaxSizeUB(objService) component.VBPrintf InsufficientMaxSizeErrorMessage, _ Array( UCase(arrVolume(i)) , intMaxSizeUB ) End If End If End If Else ' Check if maxsize specified as 0 If Len(intMaxSize) > 0 Then ' get the upper bound allowed for maximum size intMaxSizeUB = getMaxSizeUB(objService) component.VBPrintf InsufficientMaxSizeErrorMessage, _ Array( UCase(arrVolume(i)) , intMaxSizeUB ) End If End If ' maxsize checked Else ' Case when both initsize and maxsize are selected ' check if maxsize is greater than initsize ' this will detect any overflow problems, if any If CLng(intIntSize) > CLng(intMaxSize) Then ' check for overflows and clear the error If Err.Number Then Err.Clear ' get the upper bound allowed for maximum size intMaxSizeUB = getMaxSizeUB(objService) component.VBPrintf InsufficientMaxSizeErrorMessage, _ Array( UCase(arrVolume(i)) , intMaxSizeUB ) WScript.Quit(EXIT_INVALID_INPUT) End If If (intIntSize > 0) Then ' Check if initsize is greater than 2 MB If CLng(intIntSize) >= CLng(INITIAL_SIZE_LB) Then ' check for overflows If Err.Number Then Err.Clear ' get the upper bound allowed for maximum size intMaxSizeUB = getMaxSizeUB(objService) component.VBPrintf InsufficientMaxSizeErrorMessage, _ Array( UCase(arrVolume(i)) , intMaxSizeUB ) WScript.Quit(EXIT_INVALID_INPUT) End If ' get the free space available on the specified disk intFreeDiskSpace = getFreeSpaceOnDisk(strDriveName,objService) ' get the current pagefile size intCurrentSize = getCurrentPageFileSize(objService,objInstance) ' get the total free space If Len(intCurrentSize) > 0 Then intFreeSpace = intFreeDiskSpace + intCurrentSize Else WScript.Echo(L_UnableToRetrieveInfo_ErrorMessage) WScript.Quit(EXIT_QUERY_FAIL) End If ' check if it is greater than free disk space If CLng(intIntSize) > CLng(intFreeSpace) Then ' check for overflows If Err.Number Then Err.Clear ' get the upper bound allowed for maximum size intMaxSizeUB = getMaxSizeUB(objService) component.VBPrintf InsufficientMaxSizeErrorMessage, _ Array( UCase(arrVolume(i)) , intMaxSizeUB ) WScript.Quit(EXIT_INVALID_INPUT) End If WScript.Echo(NotEnoughSpaceErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If If CLng(intIntSize) > CLng(intFreeSpace) - 5 Then ' check for overflows If Err.Number Then Err.Clear WScript.Echo(L_InvalidInput_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If WScript.Echo(AtLeastFiveMBErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) Else ' get the crash dump setting value intCrashDump = GetCrashDumpSetting(strUserName,strPassword,strMachine) ' get the Physical Memory Size intMemSize = GetPhysicalMemorySize(strHostName,objService) ' If the user has selected "yes" for the warning message If isCrashDumpValueSet(intCrashDump,intIntSize,intMemSize,arrVolume(i)) Then ' store the old initsize value intOldInitialSize = objInstance.InitialSize ' set the new initsize objInstance.InitialSize = intIntSize ' check if maxsize is given If (intMaxSize > 0) Then ' Get the Disk Size for the specified drive intDiskSize = GetDiskSize(arrVolume(i),objService) ' check if maxsize is more than initsize If (CLng(intMaxSize) > CLng(intDiskSize)) Then ' check for overflows If Err.Number Then Err.Clear ' get the upper bound allowed for maximum size intMaxSizeUB = getMaxSizeUB(objService) component.VBPrintf InsufficientMaxSizeErrorMessage, _ Array( UCase(arrVolume(i)) , intMaxSizeUB ) WScript.Quit(EXIT_INVALID_INPUT) End If component.VBPrintf DiskTooSmallErrorMessage, _ Array(UCase(arrVolume(i))) Else If (CLng(intMaxSize) > CLng(intFreeSpace)) Then ' check for overflows If Err.Number Then Err.Clear WScript.Echo(L_InvalidInput_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If component.VBPrintf GrowsToFreeSpaceWarningMessage, _ Array(UCase(arrVolume(i)),intFreeSpace) strReply = getReply() If Trim(LCase(strReply)) = L_UserReplyYes_Text Then ' set the maxsize to be the free space on disk intMaxSize = intFreeSpace intOldMaximumSize = objInstance.MaximumSize objInstance.MaximumSize = intMaxSize If ( CInt(intIntSize) <> intOldInitialSize ) Then objInstance.Put_(CONST_WBEM_FLAG) If Err.Number Then Err.Clear WScript.Echo(L_UpdateFailed_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If component.VBPrintf ChangeIntSuccessMessage, _ Array(UCase(arrVolume(i)),CInt(intOldInitialSize),CInt(intIntSize)) blnSuccessMsg = TRUE Else component.VBPrintf ChangeIntSkippingMessage, _ Array(UCase(arrVolume(i))) End If If (CInt(intMaxSize) <> intOldMaximumSize) Then objInstance.Put_(CONST_WBEM_FLAG) If Err.Number Then Err.Clear WScript.Echo(L_UpdateFailed_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If component.VBPrintf ChangeMaxSuccessMessage, _ Array(UCase(arrVolume(i)),CInt(intOldMaximumSize),CInt(intMaxSize)) blnSuccessMsg = TRUE Else component.VBPrintf ChangeMaxSkippingMessage, _ Array(UCase(arrVolume(i))) End If ElseIf LCase(strReply) = L_UserReplyNo_Text Then WScript.Quit(EXIT_SUCCESS) Else WScript.Echo(L_InvalidInput_ErrorMessage) WScript.Quit (EXIT_INVALID_INPUT) End If Else intOldMaximumSize = objInstance.MaximumSize objInstance.MaximumSize = intMaxSize objInstance.Put_(CONST_WBEM_FLAG) If Err.Number Then Err.Clear WScript.Echo(L_UpdateFailed_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If If (CInt(intIntSize) <> intOldInitialSize ) Then component.VBPrintf ChangeIntSuccessMessage, _ Array(UCase(arrVolume(i)),CInt(intOldInitialSize),CInt(intIntSize)) blnSuccessMsg = TRUE Else component.VBPrintf ChangeIntSkippingMessage, Array(UCase(arrVolume(i))) End If If (CInt(intMaxSize) <> intOldMaximumSize) Then component.VBPrintf ChangeMaxSuccessMessage, _ Array(UCase(arrVolume(i)),CInt(intOldMaximumSize),CInt(intMaxSize)) blnSuccessMsg = TRUE Else component.VBPrintf ChangeMaxSkippingMessage, Array(UCase(arrVolume(i))) End If End If End If Else ' Check if maxsize specified as 0 If Len(intMaxSize) > 0 Then ' get the upper bound allowed for maximum size intMaxSizeUB = getMaxSizeUB(objService) component.VBPrintf InsufficientMaxSizeErrorMessage, _ Array( UCase(arrVolume(i)) , intMaxSizeUB ) End If End If ' maxsize checked End If End If Else ' get the upper bound allowed for maximum size intMaxSizeUB = getMaxSizeUB(objService) component.VBPrintf InitialSizeRangeErrorMessage, _ Array(intMaxSizeUB) WScript.Quit(EXIT_INVALID_INPUT) End If Else ' Check if initsize specified as 0 If Len(intIntSize) > 0 Then ' get the upper bound allowed for maximum size intMaxSizeUB = getMaxSizeUB(objService) component.VBPrintf InitialSizeRangeErrorMessage, _ Array(intMaxSizeUB) WScript.Quit(EXIT_INVALID_INPUT) End If End If ' initsize checked End If End If Next Else component.VBPrintf L_PageFileDoesNotExist_ErrorMessage, _ Array(UCase(arrVolume(i))) End If Else ' the drive does not exist component.VBPrintf L_InvalidVolumeName_ErrorMessage, _ Array(UCase(arrVolume(i))) ' remove the drive name from the valid drives list objVols.Remove arrVolume(i) ' decrement the loop count i = i - 1 ' check for the no.of valid drive names from the specified list. If Cint(objVols.Count) = 0 Then WScript.Quit(EXIT_INVALID_INPUT) Else intVolumes = objVols.Count arrVolume = objVols.keys End If End If i = i + 1 Loop If blnSuccessMsg = TRUE then WScript.Echo L_RestartComputer_Message End If End Sub '****************************************************************************** '* Sub: ProcessCreate '* '* Purpose: Creates new page files with the given specifications '* '* Input: '* [in] strMachine machine to configure page files on '* [in] strUserName user name to connect to the machine '* [in] strPassword password for the user '* [in] intIntSize the initial size for the page file '* [in] intMaxSize the maximum size for the page file '* [in] objVols the object containing volume names '* '* Output: Displays error message and quits if connection fails '* '****************************************************************************** Private Sub ProcessCreate( ByVal strMachine, _ ByVal strUserName, _ ByVal strPassword, _ ByVal intIntSize, _ ByVal intMaxSize, _ ByVal objVols ) ON ERROR RESUME NEXT Err.Clear Dim arrVolume ' to store all the volumes specified Dim intVolumes ' to store the no.of volumes specified Dim strQuery ' to store the query for pagefiles Dim strQueryDisk ' to store the query for disk Dim strQueryComp ' to store the query for getting host name Dim objService ' service object Dim objInst ' instance object Dim objInstance ' instance object Dim objNewInstance ' instance object Dim objEnum ' collection object for query results Dim objEnumforDisk ' collection object for query results Dim blnSuccessMsg ' flag to check if a SUCCESS message is generated Dim intFreeSpace ' to store total free space Dim intFreeDiskSpace ' to store free disk space Dim intCurrentSize ' to store the current pagefile size Dim intDiskSize ' to store the disk size for the specified disk Dim intMemSize ' to store physical memory size Dim intCrashDump ' to store the current crash dump setting value Dim strReply ' to store the user reply Dim strHostName ' to store the host name Dim intMaxSizeUB ' to store the upper bound for maximum size Dim i ' Loop variable ' variables used only if * is specified Dim objEnumerator ' collection object for query results i = 0 intFreeSpace = 0 intFreeDiskSpace = 0 intCurrentSize = 0 intMaxSizeUB = 0 ' intIntSize = CLng(intIntSize) ' intMaxSize = CLng(intMaxSize) blnSuccessMsg = FALSE If NOT component.wmiConnect(CONST_NAMESPACE_CIMV2 , _ strUserName , _ strPassword , _ strMachine , _ blnLocalConnection , _ objService ) Then WScript.Echo(L_HintCheckConnection_Message) WScript.Quit(EXIT_METHOD_FAIL) End If If (objVols.Exists("*")) Then ' build the query intVolumes = 0 ' get all the drive names with drive type = 3 (other than floppy drive & CDROM Drive) strQuery = "Select DeviceID From " & CLASS_LOGICAL_DISK & _ " where DriveType = " & DRIVE_TYPE ' execute the query Set objEnumerator = objService.ExecQuery(strQuery, "WQL", 48, null) ' check for any errors If Err.Number Then Err.Clear WScript.Echo(L_UnableToRetrieveInfo_ErrorMessage) WScript.Quit(EXIT_QUERY_FAIL) End If For each objInstance in objEnumerator ' check if the volumename is not an alias name and neither a mapped drive. If IsValidPhysicalDrive(objService, objInstance.DeviceID) Then ' check if the volume name is specified more than once. If NOT objVols.Exists(LCase(objInstance.DeviceID)) Then objVols.Add LCase(objInstance.DeviceID),-1 End If End If Next ' Remove * from objVols after adding the drives to the object. objVols.Remove "*" End If intVolumes = objVols.Count arrVolume = objVols.Keys ' Get the host Name - used to get Crash Dump Settings strQueryComp = "Select * From " & CLASS_COMPUTER_SYSTEM Set objEnum = objService.ExecQuery(strQueryComp, "WQL", 0, null) ' check for any errors If Err.Number Then Err.Clear WScript.Echo(L_UnableToRetrieveInfo_ErrorMessage) WScript.Quit(EXIT_QUERY_FAIL) End If For each objInst in objEnum If NOT ISEmpty(objInst.Name) Then strHostName = objInst.Name Else WSCript.Echo(L_UnableToRetrieveInfo_ErrorMessage) WScript.Quit(EXIT_QUERY_FAIL) End If Next ' No wild Cards Specified Do While( i < intVolumes ) strQueryDisk = "Select * From " & CLASS_LOGICAL_DISK & _ " where DriveType = " & DRIVE_TYPE & " and DeviceID = '" & arrVolume(i) & "'" Set objEnumforDisk = objService.ExecQuery(strQueryDisk, "WQL", 0, null) strQuery = "Select * From " & CLASS_PAGE_FILE_SETTING & _ " where Name = '" & arrVolume(i) & "\" & PAGEFILE_DOT_SYS & "'" Set objEnum = objService.ExecQuery(strQuery, "WQL", 0, null) ' If valid drive and pagefile exists on that drive If (objEnumforDisk.Count = 0 AND objEnum.Count = 0 ) Then ' the drive does not exist component.VBPrintf L_InvalidVolumeName_ErrorMessage, _ Array(UCase(arrVolume(i))) ' remove the drive name from the valid drives list objVols.Remove arrVolume(i) ' decrement the loop count i = i - 1 ' check for the no.of valid drive names from the specified list. If Cint(objVols.Count) = 0 Then WScript.Quit(EXIT_INVALID_INPUT) Else intVolumes = objVols.Count arrVolume = objVols.keys End If Else ' SKIP - if at least one instance is found then dont create a new instance If (objEnumforDisk.Count = 1 AND objEnum.Count = 1) Then component.VBPrintf L_CreateSkipping_Message, _ Array(UCase(arrVolume(i))) Else ' check if the volumename is an alias name or a mapped drive If NOT IsValidPhysicalDrive(objService, arrVolume(i)) Then component.VBPrintf L_InvalidPhysicalDrive_ErrorMessage, _ Array(UCase(arrVolume(i))) Else ' set the security privilege to allow pagefile creation objService.Security_.Privileges.AddAsString("SeCreatePagefilePrivilege") If Err.Number then Err.Clear WScript.Echo("ERROR: Failed to set the security privilege.") WScript.Quit(EXIT_METHOD_FAIL) End If Set objInstance = objService.Get(CLASS_PAGE_FILE_SETTING) ' check for any errors If Err.Number Then Err.Clear WScript.Echo(L_CannotCreate_ErrorMessage) WScript.Quit(EXIT_METHOD_FAIL) End If Set objNewInstance = objInstance.SpawnInstance_ ' check for any errors If Err.Number Then Err.Clear WScript.Echo(L_CannotCreate_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If ' append the filename to the volume name objNewInstance.Name = UCase(arrVolume(i)) & PAGEFILE_DOT_SYS ' check if maxsize is greater than initsize ' this will detect any overflow problems, if any If ( CLng(intIntSize) > CLng(intMaxSize) ) Then ' check for overflows and clear the error If Err.Number Then Err.Clear ' get the upper bound allowed for maximum size intMaxSizeUB = getMaxSizeUB(objService) component.VBPrintf InsufficientMaxSizeErrorMessage, _ Array( UCase(arrVolume(i)) , intMaxSizeUB ) WScript.Quit(EXIT_INVALID_INPUT) End If ' Check the initial size with the free space on the disk If CLng(intIntSize) >= CLng(INITIAL_SIZE_LB) Then ' check for overflows If Err.Number Then Err.Clear WScript.Echo(L_InvalidInput_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If ' get the free space on the specified disk intFreeDiskSpace = getFreeSpaceOnDisk(arrVolume(i),objService) ' get the current pagefile size intCurrentSize = getCurrentPageFileSize(objService,objInstance) ' get the total free space ' Since its a new instance the current size will ' NOT be available. So the initial size is taken ' into considerarion for calculating the total ' free space. intFreeSpace = intFreeDiskSpace + intIntSize ' Check if it greater than free disk space If CLng(intIntSize) > CLng(intFreeSpace) Then ' check for overflows If Err.Number Then Err.Clear WScript.Echo(L_InvalidInput_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If WScript.Echo(NotEnoughSpaceErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If If CLng(intIntSize) > CLng(intFreeSpace) - 5 Then ' check for overflows If Err.Number Then Err.Clear WScript.Echo(L_InvalidInput_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If WScript.Echo(AtLeastFiveMBErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If ' get the crash dump setting value intCrashDump = GetCrashDumpSetting(strUserName,strPassword,strMachine) ' get the Physical Memory Size intMemSize = GetPhysicalMemorySize(strHostName,objService) ' check if the user has selected "yes" for the warning message If isCrashDumpValueSet(intCrashDump,intIntSize,intMemSize,arrVolume(i)) Then objNewInstance.InitialSize = CInt(intIntSize) ' Get the Disk Size for the specified drive intDiskSize = GetDiskSize(arrVolume(i),objService) If (CLng(intMaxSize) > CLng(intDiskSize)) Then ' check for overflows If Err.Number Then Err.Clear ' get the upper bound allowed for maximum size intMaxSizeUB = getMaxSizeUB(objService) component.VBPrintf InsufficientMaxSizeErrorMessage, _ Array( UCase(arrVolume(i)) , intMaxSizeUB ) WScript.Quit(EXIT_INVALID_INPUT) End If component.VBPrintf DiskTooSmallErrorMessage, _ Array(UCase(arrVolume(i))) Else If (CLng(intMaxSize) > CLng(intFreeSpace)) Then ' check for overflows If Err.Number Then Err.Clear WScript.Echo(L_InvalidInput_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If component.VBPrintf GrowsToFreeSpaceWarningMessage, _ Array(UCase(arrVolume(i)),intFreeSpace) strReply = getReply() If Trim(LCase(strReply)) = L_UserReplyYes_Text Then ' maxsize can grow only to the free disk space available. ' set the maxsize to the free space on disk. intMaxSize = intFreeSpace objNewInstance.MaximumSize = intMaxSize objNewInstance.Put_(CONST_WBEM_FLAG) If Err.Number Then Err.Clear WScript.Echo(L_CannotCreate_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If component.VBPrintf CreateSuccessMessage, _ Array(CInt(intIntSize),CInt(intMaxSize),UCase(arrVolume(i))) blnSuccessMsg = TRUE ElseIf LCase(strReply) = L_UserReplyNo_Text Then WScript.Quit(EXIT_SUCCESS) Else WScript.Echo(L_InvalidInput_ErrorMessage) WScript.Quit (EXIT_INVALID_INPUT) End If Else objNewInstance.MaximumSize = CInt(intMaxSize) objNewInstance.Put_(CONST_WBEM_FLAG) If Err.Number Then Err.Clear WScript.Echo(L_CannotCreate_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If component.VBPrintf CreateSuccessMessage, _ Array(CInt(intIntSize),CInt(intMaxSize),UCase(arrVolume(i))) blnSuccessMsg = TRUE End If End If End If Else ' get the upper bound allowed for maximum size intMaxSizeUB = getMaxSizeUB(objService) component.VBPrintf InitialSizeRangeErrorMessage, Array(intMaxSizeUB) End If End If End If End If i = i + 1 Loop If blnSuccessMsg = TRUE then WScript.Echo L_RestartComputer_Message End If End Sub '****************************************************************************** '* Sub: ProcessDelete '* '* Purpose: Deletes existing page files on the specified volumes '* '* Input: '* [in] strMachine machine to configure page files on '* [in] strUserName user name to connect to the machine '* [in] strPassword password for the user '* [in] objVols the object containing volume names '* '* Output: Displays error message and quits if connection fails '* '****************************************************************************** Private Sub ProcessDelete ( ByVal strMachine, _ ByVal strUserName, _ ByVal strPassword, _ ByVal objVols ) ON ERROR RESUME NEXT Err.Clear Dim arrVolume ' to store all the volumes specified Dim intVolumes ' to store the no.of volumes specified Dim objService ' service object Dim objInstance ' instance object Dim blnSuccessMsg ' flag to check if a SUCCESS message is generated Dim strQueryDisk ' to store the query for disk Dim objEnumforDisk ' collection object for query results Dim intMemSize ' to store physical memory size Dim intCrashDump ' to store the current crash dump setting value Dim strQueryComp ' to store the query for computersystem Dim objEnum ' collection object for query results Dim objInst ' instance object Dim strHostName ' to store the host name Dim i ' Loop variable If NOT component.wmiConnect(CONST_NAMESPACE_CIMV2 , _ strUserName , _ strPassword , _ strMachine , _ blnLocalConnection , _ objService ) Then WScript.Echo(L_HintCheckConnection_Message) WScript.Quit(EXIT_METHOD_FAIL) End If i = 0 blnSuccessMsg = FALSE intVolumes = objVols.Count arrVolume = objVols.Keys ' Get the host Name - used to get Crash Dump Settings strQueryComp = "Select * From " & CLASS_COMPUTER_SYSTEM Set objEnum = objService.ExecQuery(strQueryComp, "WQL", 0, null) ' check for any errors If Err.Number Then Err.Clear WScript.Echo(L_UnableToRetrieveInfo_ErrorMessage) WScript.Quit(EXIT_QUERY_FAIL) End If For each objInst in objEnum If NOT ISEmpty(objInst.Name) Then strHostName = objInst.Name Else WSCript.Echo(L_UnableToRetrieveInfo_ErrorMessage) WScript.Quit(EXIT_QUERY_FAIL) End If Next Do While( i < intVolumes ) strQueryDisk = "Select * From " & CLASS_LOGICAL_DISK & _ " where DriveType = " & DRIVE_TYPE & " and DeviceID = '" & arrVolume(i) & "'" Set objEnumforDisk = objService.ExecQuery(strQueryDisk, "WQL", 0, null) If objEnumforDisk.Count > 0 Then Set objInstance = objService.Get(CLASS_PAGE_FILE_SETTING & "='" & _ arrVolume(i) & PAGEFILE_DOT_SYS & "'") If Err.Number Then Err.Clear component.VBPrintf L_PageFileDoesNotExist_ErrorMessage, _ Array(UCase(arrVolume(i))) Else ' check for system managed pagefiles If (objInstance.InitialSize = 0 AND objInstance.MaximumSize = 0) Then component.VBPrintf L_SystemManagedSize_ErrorMessage, _ Array(UCase(arrVolume(i))) Else ' get the crash dump setting value intCrashDump = GetCrashDumpSetting(strUserName,strPassword,strMachine) ' get the Physical Memory Size intMemSize = GetPhysicalMemorySize(strHostName,objService) ' If the user has selected "yes" for the warning message ' pass initsize as 0 because initsize = maxsize = 0 (assumed) after deletion If isCrashDumpValueSet(intCrashDump,0,intMemSize,arrVolume(i)) Then ' Delete the instance objInstance.Delete_ ' check for any errors If Err.Number Then Err.Clear WScript.Echo(L_InvalidInput_ErrorMessage) WScript.Quit(EXIT_INVALID_INPUT) End If component.VBPrintf L_DeleteSuccess_Message, _ Array(UCase(arrVolume(i))) blnSuccessMsg = TRUE End If End If End If Else ' the drive does not exist component.VBPrintf L_InvalidVolumeName_ErrorMessage, _ Array(UCase(arrVolume(i))) ' remove the drive name from the valid drives list objVols.Remove arrVolume(i) ' decrement the loop count i = i - 1 ' check for the no.of valid drive names from the specified list. If Cint(objVols.Count) = 0 Then WScript.Quit(EXIT_INVALID_INPUT) Else intVolumes = objVols.Count arrVolume = objVols.keys End If End If i = i + 1 Loop ' The instances of the following classes are also deleted along with the Win32_PageFile instances ' Win32_PageFileUsage - instances are deleted only after reboot ' Win32_PageFileSetting - instances are deleted automatically along with Win32_PageFile instances If blnSuccessMsg = TRUE then WScript.Echo L_RestartComputer_Message End If End sub '****************************************************************************** '* Sub: ProcessQuery '* '* Purpose: Displays the Page File Details in the specified format '* '* Input: '* [in] strMachine machine to configure page files on '* [in] strUserName user name to connect to the machine '* [in] strPassword password for the user '* [in] strFormat the query display format '* '* Output: Displays error message and quits if connection fails '* Calls component.showResults() to display the page file '* details '* '****************************************************************************** Private Sub ProcessQuery( ByVal strMachine, _ ByVal strUserName, _ ByVal strPassword, _ ByVal strFormat ) ON ERROR RESUME NEXT Err.Clear Dim objEnumerator ' to store the results of the query is executed Dim objInstance ' to refer to the instances of the objEnumerator Dim strQuery ' to store the query obtained for given conditions Dim intTotSize ' to store the total size on all drives Dim intRecommendedSize ' to store the recommended size for all drives Dim arrResultsDrives ' to store the columns of page file info. Dim arrHeaderDrives ' to store the array header values Dim arrMaxLengthDrives ' to store the maximum length for each column Dim arrFinalResultsDrives ' used to send the arrResults to ShowResults() Dim intColumnCountDrives ' number of columns to be displayed in the output Dim blnPrintHeaderDrives ' variable which decides whether header is to be displayed or not Dim arrResultsSummary ' to store the columns of page file info. Dim arrHeaderSummary ' to store the array header values Dim arrMaxLengthSummary ' to store the maximum length for each column Dim arrFinalResultsSummary ' used to send the arrResults to ShowResults() Dim intColumnCountSummary ' number of columns to be displayed in the output Dim blnPrintHeaderSummary ' variable which decides whether header is to be displayed or not Dim objDiskDriveInstance ' Instance for drive name Dim objMemSizeInstance ' Instance for memory size Dim arrblnNoDisplayDrives ' boolean variable for -noheader option Dim arrblnNoDisplaySummary ' boolean variable for -noheader option Dim objService ' service object Dim strDriveName ' to store the drive name Dim objUsageInstance ' Instance for PageFileUsage ' Initializing the blnPrintHeaders to true. Header should be printed by default blnPrintHeaderDrives = TRUE blnPrintHeaderSummary = TRUE intTotSize = 0 If NOT component.wmiConnect(CONST_NAMESPACE_CIMV2 , _ strUserName , _ strPassword , _ strMachine , _ blnLocalConnection , _ objService ) Then WScript.Echo(L_HintCheckConnection_Message) WScript.Quit(EXIT_METHOD_FAIL) End If arrHeaderDrives = Array(L_ColHeaderHostname_Text , L_ColHeaderDrive_Text, _ L_ColHeaderVolumeLabel_Text, L_ColHeaderFileName_Text, _ L_ColHeaderInitialSize_Text, L_ColHeaderMaximumSize_Text, _ L_ColHeaderCurrentSize_Text, L_ColHeaderFreeSpace_Text) arrHeaderSummary = Array(L_ColHeaderHostname_Text, L_ColHeaderTotalMinimumSize_Text, _ L_ColHeaderTotalRecommendedSize_Text, L_ColHeaderTotalSize_Text) ' Data Lengths = (15,13,13,19,20,20,20,22) arrMaxLengthDrives = Array(CONST_HOSTNAME_LENGTH, CONST_DRIVENAME_LENGTH, CONST_VOLLABEL_LENGTH, _ CONST_PAGEFILENAME_LENGTH, CONST_INTSIZE_LENGTH, CONST_MAXSIZE_LENGTH, _ CONST_CURRENTSIZE_LENGTH, CONST_FREESPACE_LENGTH) ' Data Lengths = (15,33,37,40) arrMaxLengthSummary = Array(CONST_HOSTNAME_LENGTH,CONST_TOTALMINSIZE_LENGTH,_ CONST_TOTALRECSIZE_LENGTH,CONST_TOTALSIZE_LENGTH) arrblnNoDisplayDrives = Array(0,0,0,0,0,0,0,0) arrblnNoDisplaySummary = Array(0,0,0,0) ' first initialize the array with N/A arrResultsDrives = Array(L_Na_Text,L_Na_Text,L_Na_Text,L_Na_Text,L_Na_Text,L_Na_Text,_ L_Na_Text,L_Na_Text) arrResultsSummary = Array(L_Na_Text,L_Na_Text,L_Na_Text,L_Na_Text) ' build the query strQuery = "SELECT * FROM " & CLASS_PAGE_FILE_SETTING ' execute the query Set objEnumerator = objService.ExecQuery(strQuery, "WQL", 0, null) ' check for any errors If Err.Number Then Err.Clear WScript.Echo(L_UnableToRetrieveInfo_ErrorMessage) WScript.Quit(EXIT_QUERY_FAIL) End If ' If no.of pagefile instances are 0 (zero) If (objEnumerator.Count = 0) Then WScript.Echo(L_NoPageFiles_Message) WScript.Quit(EXIT_UNEXPECTED) End If ReDim arrFinalResultsDrives(0) ReDim arrFinalResultsSummary(0) WScript.Echo("") ' Blank Line ' Loop through all the instances for the first report For each objInstance in objEnumerator If NOT IsEmpty(objInstance.Name) Then strDriveName = Mid(objInstance.Name,1,2) End If ' check if it is a valid physical drive If IsValidPhysicalDrive(objService,strDriveName) Then If IsEmpty(objInstance.Name) Then arrResultsDrives(1) = L_Na_Text Else strDriveName = Mid(objInstance.Name,1,2) arrResultsDrives(1) = UCase(strDriveName) End If ' to get the data from Win32_PageFileUsage Set objUsageInstance = objService.Get(CLASS_PAGE_FILE_USAGE & "='" & objInstance.Name & "'") ' to get the current size If Len(objUsageInstance.AllocatedBaseSize) = 0 Then arrResultsDrives(6) = L_Na_Text Else arrResultsDrives(6) = objUsageInstance.AllocatedBaseSize & MEGA_BYTES intTotSize = intTotSize + objUsageInstance.AllocatedBaseSize End If ' to get the data from Win32_LogicalDisk Set objDiskDriveInstance = objService.Get(CLASS_LOGICAL_DISK & "='" & strDriveName & "'") If Len(objDiskDriveInstance.VolumeName) = 0 Then arrResultsDrives(2) = L_Na_Text Else arrResultsDrives(2) = objDiskDriveInstance.VolumeName End If If Len(objDiskDriveInstance.SystemName) = 0 Then arrResultsDrives(0) = L_Na_Text Else arrResultsDrives(0) = objDiskDriveInstance.SystemName arrResultsSummary(0) = objDiskDriveInstance.SystemName End If If (objDiskDriveInstance.FreeSpace) Then arrResultsDrives(7) = Int(objDiskDriveInstance.FreeSpace/CONVERSION_FACTOR) + Int(objUsageInstance.AllocatedBaseSize) &_ MEGA_BYTES Else arrResultsDrives(7) = L_Na_Text End If If IsEmpty(objInstance.Name) Then arrResultsDrives(3) = L_Na_Text Else arrResultsDrives(3) = objInstance.Name End If If objInstance.InitialSize Then arrResultsDrives(4) = objInstance.InitialSize & MEGA_BYTES Else arrResultsDrives(4) = L_Na_Text End If If objInstance.MaximumSize Then arrResultsDrives(5) = objInstance.MaximumSize & MEGA_BYTES Else arrResultsDrives(5) = L_Na_Text End If arrFinalResultsDrives(0) = arrResultsDrives Call component.showResults(arrHeaderDrives, arrFinalResultsDrives, arrMaxLengthDrives, _ strFormat, blnPrintHeaderDrives, arrblnNoDisplayDrives) blnPrintHeaderDrives = FALSE End If Next WScript.Echo("") ' Display the summary report arrResultsSummary(1) = INITIAL_SIZE_LB & MEGA_BYTES Set objMemSizeInstance = objService.Get(CLASS_COMPUTER_SYSTEM & "='" & arrResultsDrives(0) & "'") If objMemSizeInstance.TotalPhysicalMemory Then intRecommendedSize = Int(Int(objMemSizeInstance.TotalPhysicalMemory/CONVERSION_FACTOR)* SIZE_FACTOR) arrResultsSummary(2) = intRecommendedSize & MEGA_BYTES Else arrResultsSummary(2) = L_Na_Text End If arrResultsSummary(3) = intTotSize & MEGA_BYTES arrFinalResultsSummary(0) = arrResultsSummary Call component.showResults(arrHeaderSummary, arrFinalResultsSummary, arrMaxLengthSummary, strFormat, _ blnPrintHeaderSummary,arrblnNoDisplaySummary) blnPrintHeaderSummary = FALSE End Sub '****************************************************************************** '* Function: IsValidPhysicalDrive '* '* Purpose: To check if the specified drive is a valid physical drive. '* This check is done only for Win2K builds and NOT for Whistler Builds. '* '* Input: '* [in] objServiceParam service object to maintain wmi connection. '* [in] strDriveName drive name whose validity has to be checked. '* '* Output: Returns TRUE or FALSE '* TRUE - when the drive is a valid physical drive. '* FALSE - when the drive is not a valid physical drive. '* '****************************************************************************** Private Function IsValidPhysicalDrive ( ByVal objServiceParam, _ ByVal strDriveName ) ON ERROR RESUME NEXT Err.Clear CONST WIN2K_MAJOR_VERSION = 5000 CONST WINXP_MAJOR_VERSION = 5001 Dim strQuery ' to store the query to be executed Dim objEnum ' collection object Dim objInstance ' instance object Dim strValidDrives ' to store all valid physical drives Dim strVersion ' to store the OS version Dim arrVersionElements ' to store the OS version elements Dim CurrentMajorVersion ' the major version number strValidDrives = "" ' by default set it to true IsValidPhysicalDrive = TRUE strquery = "Select * From " & CLASS_OPERATING_SYSTEM set objEnum = objServiceParam.ExecQuery(strQuery,"WQL",48,null) For each objInstance in objEnum strVersion= objInstance.Version Next ' OS Version : 5.1.xxxx(Whistler), 5.0.xxxx(Win2K) arrVersionElements = split(strVersion,".") ' converting to major version CurrentMajorVersion = arrVersionElements(0) * 1000 + arrVersionElements(1) ' Determine the OS Type ' If the OS is Whistler, then NO NEED to validate. ' If the OS is Win2K, then validate the drive name. If CInt(CurrentMajorVersion) < CInt(WINXP_MAJOR_VERSION) Then strQuery = "Select * From " & CLASS_PERFDISK_PHYSICAL_DISK Set objEnum = objServiceParam.ExecQuery(strQuery, "WQL", 0, null) For each objInstance in objEnum ' get all the instance except the last one If (objInstance.Name <> "_Total") Then strValidDrives = strValidDrives & " " & objInstance.Name End If Next ' check if the specified drive is present in the list of valid physical drives If Instr(strValidDrives, UCase(strDriveName)) = 0 Then IsValidPhysicalDrive = FALSE End If End If End Function '****************************************************************************** '* Function: getFreeSpaceOnDisk '* '* Purpose: To get the Free Space for the Specified Disk '* '* Input: '* [in] strDriveName drive name whose free space is needed '* [in] objServiceParam service object to maintain wmi connection '* '* Output: Returns the free space (in MB) on the specified disk. '* '****************************************************************************** Private Function getFreeSpaceOnDisk(ByVal strDriveName, ByVal objServiceParam) ON ERROR RESUME NEXT Err.Clear Dim objValidDiskInst Set objValidDiskInst = objServiceParam.Get(CLASS_LOGICAL_DISK & "='" & strDriveName & "'") If Err.Number Then Err.Clear WScript.Echo(L_UnableToRetrieveInfo_ErrorMessage) WScript.Quit(EXIT_QUERY_FAIL) End If getFreeSpaceOnDisk = Int(objValidDiskInst.FreeSpace/CONVERSION_FACTOR) End Function '****************************************************************************** '* Function: getCurrentPageFileSize '* '* Purpose: To get the current pagefile size on the specified drive '* '* Input: '* [in] objService wbem service object '* [in] objInstance instance of win32_pagefilesetting '* '* Output: current pagefile size '* '****************************************************************************** Private Function getCurrentPageFileSize(ByVal objService, ByVal objInstance) ON ERROR RESUME NEXT Err.Clear Dim objUsageInstance ' get the data from Win32_PageFileUsage Set objUsageInstance = objService.Get(CLASS_PAGE_FILE_USAGE & "='" & objInstance.Name & "'") ' return the current size ( allocated base size ) getCurrentPageFileSize = objUsageInstance.AllocatedBaseSize End Function '****************************************************************************** '* Function: GetDiskSize '* '* Purpose: To get the disk size for the specified drive '* '* Input: '* [in] strDriveName drive name whose free space is needed '* [in] objServiceParam service object to maintain wmi connection '* '* Output: Returns the total disk size in MB. '* '****************************************************************************** Private Function GetDiskSize(ByVal strDriveName, ByVal objServiceParam) ON ERROR RESUME NEXT Err.Clear Dim objValidDiskInst ' object to store valid disk name Set objValidDiskInst = objServiceParam.Get(CLASS_LOGICAL_DISK & "='" & strDriveName & "'") If Err.Number Then Err.Clear WScript.Echo(L_UnableToRetrieveInfo_ErrorMessage) WScript.Quit(EXIT_QUERY_FAIL) End If GetDiskSize = Int(objValidDiskInst.Size / CONVERSION_FACTOR) End Function '****************************************************************************** '* Function: GetPhysicalMemorySize '* '* Purpose: To get the physical memory size. '* '* Input: '* [in] strHostName host name to connect to '* [in] objServiceParam service object to maintain wmi connection '* '* Output: Returns the physical memory size in MB. '* '****************************************************************************** Private Function GetPhysicalMemorySize( ByVal strHostName, ByVal objServiceParam ) ON ERROR RESUME NEXT Err.Clear Dim objMemSizeInstance ' to store memory size Dim intReturnValue ' to store return value Set objMemSizeInstance = objServiceParam.Get(CLASS_COMPUTER_SYSTEM & "='" & strHostName & "'") If Err.Number Then Err.Clear WScript.Echo L_UnableToRetrieveInfo_ErrorMessage WScript.Quit EXIT_QUERY_FAIL End If If objMemSizeInstance.TotalPhysicalMemory Then intReturnValue = Int(objMemSizeInstance.TotalPhysicalMemory/CONVERSION_FACTOR) GetPhysicalMemorySize = intReturnValue End If End Function '****************************************************************************** '* Function: getMaxSizeUB '* '* Purpose: To get the allowed upper bound for maximum size '* '* Input: '* [in] objServiceParam service object to maintain wmi connection '* '* Output: Returns the upper bound for maximum size '* '****************************************************************************** Private Function getMaxSizeUB(objServiceParam) ON ERROR RESUME NEXT Err.Clear CONST PROCESSOR_X86_BASED = "X86" CONST PROCESSOR_IA64_BASED = "IA64" Dim objInstance ' object instance Dim intReturnValue ' to store return value Dim strProcessorType ' to store the processor type Dim strQuery ' to store the query Dim objEnum ' collection of objects getMaxSizeUB = 0 strQuery = "Select * From " & CLASS_COMPUTER_SYSTEM Set objEnum = objServiceParam.ExecQuery(strQuery,"WQL",48,null) If Err.Number Then Err.Clear WScript.Echo L_UnableToRetrieveInfo_ErrorMessage WScript.Quit EXIT_QUERY_FAIL End If ' The following code will handle only single processor environment For each objInstance in objEnum strProcessorType = objInstance.SystemType Next ' check if its a 32-bit processor If InStr( UCase(strProcessorType),PROCESSOR_X86_BASED ) > 0 Then getMaxSizeUB = 4096 End If ' check if its a 64-bit processor If Instr( UCase(strProcessorType),PROCESSOR_IA64_BASED ) > 0 Then getMaxSizeUB = 33554432 End If End Function '****************************************************************************** '* Function: GetCrashDumpSetting '* '* Purpose: To get the Crash Dump Settings for the machine specified '* '* Input: '* [in] strUserNameParam user name to connect to the machine '* [in] strPasswordParam password for the user '* [in] strMachineParam machine to get crash dump settings for '* '* Output: Returns the current crash dump setting value [ 0,1,2,3 ] '* 0 - None '* 1 - Complete Memory Dump '* 2 - Kernel Memory Dump '* 3 - Small Memory Dump '* '****************************************************************************** Private Function GetCrashDumpSetting( ByVal strUserNameParam, _ ByVal strPasswordParam, _ ByVal strMachineParam ) ON ERROR RESUME NEXT Err.Clear CONST CONST_NAMESPACE_DEFAULT = "root\default" ' name space to connect to CONST CONST_HKEY_LOCAL_MACHINE = 2147483650 ' registry value for HKEY_LOCAL_MACHINE CONST CONST_KEY_VALUE_NAME = "CrashDumpEnabled" ' value name to be retrieved CONST CONST_STD_REGISTRY_PROVIDER = "StdRegProv" ' standard registry provider ' the Sub Key Name CONST CONST_CRASH_DUMP_REGKEY = "SYSTEM\CurrentControlSet\Control\CrashControl" Dim objInstance ' to store the object instance Dim objService ' service object Dim intCrashDumpValue ' to store the crash dump setting value Dim intReturnVal ' to store return value ' connect to the name space If NOT component.wmiConnect(CONST_NAMESPACE_DEFAULT , _ strUserNameParam , _ strPasswordParam , _ strMachineParam , _ blnLocalConnection , _ objService ) Then WScript.Echo(L_HintCheckConnection_Message) WScript.Quit(EXIT_METHOD_FAIL) End If ' get the instance of the Standard Registry Provider Set objInstance = objService.Get(CONST_STD_REGISTRY_PROVIDER) ' get the key value for from the registry intReturnVal = objInstance.GetDWORDValue( CONST_HKEY_LOCAL_MACHINE, _ CONST_CRASH_DUMP_REGKEY, _ CONST_KEY_VALUE_NAME, _ intCrashDumpValue ) ' check if any error has occured If Err.Number <> 0 Then Err.Clear WScript.Echo(L_FailCreateObject_ErrorMessage) WScript.Quit(EXIT_INVALID_PARAM) End If ' check for the return value after registry is accessed. If intReturnVal = 0 Then GetCrashDumpSetting = CInt(intCrashDumpValue) Else WScript.Echo(L_FailCreateObject_ErrorMessage) WScript.Quit(EXIT_INVALID_PARAM) End If End Function ' Function used to get the reply in y/n from the user '****************************************************************************** '* Function: getReply '* '* Purpose: To get reply from the user '* '* Input: None '* '* Output: Prompts for a warning message and accepts the user's choice [y/n] '* '****************************************************************************** Private Function getReply() ON ERROR RESUME NEXT Err.Clear Dim objStdIn ' to store value from standard input Dim strReply ' to store the user reply WScript.Echo(L_PromptForContinueAnyWay_Message) Set objStdIn = WScript.StdIn If Err.Number Then Err.Clear WScript.Echo(L_FailCreateObject_ErrorMessage) WScript.Quit(EXIT_INVALID_PARAM) End If strReply = objStdIn.ReadLine() getReply = Trim(strReply) End Function '****************************************************************************** '* Function: isCrashDumpValueSet '* '* Purpose: To check if the crash dump value is set '* '* Input: '* [in] intCrashDumpParam crash dump setting value '* [in] intIntSizeParam initial size of the pagefile '* [in] intMemSizeParam physical memory size '* [in] strVolume drive/volume name '* '* Output: Returns TRUE or FALSE '* '****************************************************************************** Private Function isCrashDumpValueSet( ByVal intCrashDumpParam,_ ByVal intIntSizeParam, _ ByVal intMemSizeParam, _ ByVal strVolume ) ON ERROR RESUME NEXT Err.Clear ' Constants for Crash Dump Settings CONST NO_MEMORY_DUMP = 0 CONST COMPLETE_MEMORY_DUMP = 1 CONST KERNEL_MEMORY_DUMP = 2 CONST SMALL_MEMORY_DUMP = 3 Dim strReply ' to store user reply Dim intSizeValue ' to store the size value used for comparison ' default value is NO [n] strReply = L_UserReplyNo_Text Select Case CInt(intCrashDumpParam) Case COMPLETE_MEMORY_DUMP If CInt(intIntSizeParam) < CInt(intMemSizeParam) Then component.VBPrintf CrashDumpSettingWarningMessage, Array(UCase(strVolume),CInt(intMemSizeParam) & MEGA_BYTES) ' Ask for choice until a yes[y] or no[n] is given Do strReply = getReply() If Trim(LCase(strReply)) = L_UserReplyYes_Text Then isCrashDumpValueSet = TRUE ElseIf Trim(LCase(strReply)) = L_UserReplyNo_Text Then isCrashDumpValueSet = FALSE Else WScript.Echo(L_InvalidUserReply_ErrorMessage) End If Loop Until (Trim(LCase(strReply)) = L_UserReplyYes_Text OR Trim(LCase(strReply)) = L_UserReplyNo_Text) Else isCrashDumpValueSet = TRUE End If Case KERNEL_MEMORY_DUMP ' check if RAM size is less than or equal to 128 MB If CInt(intMemSizeParam) <= 128 Then ' assign size value to be checked to 50 MB intSizeValue = 50 Else ' check if RAM size is less than or equal to 4 GB If CInt(intMemSizeParam) <= 4096 Then ' assign size value to be checked to 200 MB intSizeValue = 200 Else ' check if RAM size is less than or equal to 8 GB If CInt(intMemSizeParam) <= 8192 Then ' assign size value to be checked to 400 MB intSizeValue = 400 Else ' assign size value to be checked to 800 MB intSizeValue = 800 End If End If End If If CInt(intIntSizeParam) < CInt(intSizeValue) Then component.VBPrintf CrashDumpSettingWarningMessage, Array(UCase(strVolume),intSizeValue & MEGA_BYTES) ' Ask for choice until a yes[y] or no[n] is given Do strReply = getReply() If Trim(LCase(strReply)) = L_UserReplyYes_Text Then isCrashDumpValueSet = TRUE ElseIf Trim(LCase(strReply)) = L_UserReplyNo_Text Then isCrashDumpValueSet = FALSE Else WScript.Echo(L_InvalidUserReply_ErrorMessage) End If Loop Until (Trim(LCase(strReply)) = L_UserReplyYes_Text OR Trim(LCase(strReply)) = L_UserReplyNo_Text) Else isCrashDumpValueSet = TRUE End If Case SMALL_MEMORY_DUMP ' initial size should not be less than 64 KB ( less than or equal to 0 MB ) If CInt(intIntSizeParam) <= 0 Then component.VBPrintf CrashDumpSettingWarningMessage, Array(UCase(strVolume),"64 KB") ' Ask for choice until a yes[y] or no[n] is given Do strReply = getReply() If Trim(LCase(strReply)) = L_UserReplyYes_Text Then isCrashDumpValueSet = TRUE ElseIf Trim(LCase(strReply)) = L_UserReplyNo_Text Then isCrashDumpValueSet = FALSE Else WScript.Echo(L_InvalidUserReply_ErrorMessage) End If Loop Until (Trim(LCase(strReply)) = L_UserReplyYes_Text OR Trim(LCase(strReply)) = L_UserReplyNo_Text) Else isCrashDumpValueSet = TRUE End If Case NO_MEMORY_DUMP ' Crash Dump values 0 has no problem isCrashDumpValueSet = TRUE End Select End Function '****************************************************************************** '* Sub: typeMessage '* '* Purpose: To print the type usage messages relevent to the main option '* selected. '* '* Input: The main option selected. '* '* Output: Prints "type..usage" messages for the main option selected. '* '****************************************************************************** Sub typeMessage(ByVal intMainOption) ON ERROR RESUME NEXT Err.Clear Select Case CInt(intMainOption) Case CONST_CHANGE_OPTION component.VBPrintf L_TypeChangeUsage_Message,Array(UCase(WScript.ScriptName)) Case CONST_CREATE_OPTION component.VBPrintf L_TypeCreateUsage_Message,Array(UCase(WScript.ScriptName)) Case CONST_DELETE_OPTION component.VBPrintf L_TypeDeleteUsage_Message,Array(UCase(WScript.ScriptName)) Case CONST_QUERY_OPTION component.VBPrintf L_TypeQueryUsage_Message,Array(UCase(WScript.ScriptName)) Case Else component.VBPrintf L_TypeUsage_Message,Array(UCase(WScript.ScriptName)) End Select End Sub '****************************************************************************** '* Sub: ShowUsage '* '* Purpose: Shows the correct usage to the user. '* '* Input: None '* '* Output: Help messages are displayed on screen. '* '****************************************************************************** Sub ShowUsage() WScript.Echo vbCr ' Line 1 WScript.Echo( L_ShowUsageLine02_Text ) ' Line 2 WScript.Echo vbCr ' Line 3 WScript.Echo( L_UsageDescription_Text ) ' Line 4 WScript.Echo( L_ShowUsageLine05_Text ) ' Line 5 WScript.Echo( L_ShowUsageLine06_Text ) ' Line 6 WScript.Echo vbCr ' Line 7 WScript.Echo( L_ShowUsageLine08_Text ) ' Line 8 WScript.Echo( L_ShowUsageLine09_Text ) ' Line 9 WScript.Echo( L_ShowUsageLine10_Text ) ' Line 10 WScript.Echo vbCr ' Line 11 WScript.Echo( L_ShowUsageLine12_Text ) ' Line 12 WScript.Echo vbCr ' Line 13 WScript.Echo( L_ShowUsageLine14_Text ) ' Line 14 WScript.Echo vbCr ' Line 15 WScript.Echo( L_ShowUsageLine16_Text ) ' Line 16 WScript.Echo( L_ShowUsageLine17_Text ) ' Line 17 WScript.Echo vbCr ' Line 18 WScript.Echo( L_ShowUsageLine19_Text ) ' Line 19 WScript.Echo( L_ShowUsageLine20_Text ) ' Line 20 WScript.Echo( L_ShowUsageLine21_Text ) ' Line 21 WScript.Echo( L_ShowUsageLine22_Text ) ' Line 22 WScript.Echo( L_ShowUsageLine23_Text ) ' Line 23 WScript.Echo( L_ShowUsageLine24_Text ) ' Line 24 WScript.Echo( L_ShowUsageLine25_Text ) ' Line 25 End Sub '****************************************************************************** '* Sub: ShowChangeUsage '* '* Purpose: Shows the correct usage to the user. '* '* Input: None '* '* Output: Help messages for the /Change o ption are displayed on screen. '* '****************************************************************************** Sub ShowChangeUsage() WScript.Echo vbCr ' Line 1 WScript.Echo( L_ShowChangeUsageLine02_Text ) ' Line 2 WScript.Echo( L_ShowChangeUsageLine03_Text ) ' Line 3 WScript.Echo( L_ShowChangeUsageLine04_Text ) ' Line 4 WScript.Echo vbCr ' Line 5 WScript.Echo( L_UsageDescription_Text ) ' Line 6 WScript.Echo( L_ShowChangeUsageLine07_Text ) ' Line 7 WScript.Echo vbCr ' Line 8 WScript.Echo( L_UsageParamList_Text ) ' Line 9 WScript.Echo( L_UsageMachineName_Text ) ' Line 10 WScript.Echo vbCr ' Line 11 WScript.Echo( L_UsageUserNameLine1_Text ) ' Line 12 WScript.Echo( L_UsageUserNameLine2_Text ) ' Line 13 WScript.Echo vbCr ' Line 14 WScript.Echo( L_UsagePasswordLine1_Text ) ' Line 15 WScript.Echo( L_UsagePasswordLine2_Text ) ' Line 16 WScript.Echo vbCr ' Line 17 WScript.Echo( L_ShowChangeUsageLine18_Text ) ' Line 18 WScript.Echo( L_ShowChangeUsageLine19_Text ) ' Line 19 WScript.Echo vbCr ' Line 20 WScript.Echo( L_ShowChangeUsageLine21_Text ) ' Line 21 WScript.Echo( L_ShowChangeUsageLine22_Text ) ' Line 22 WScript.Echo vbCr ' Line 23 WScript.Echo( L_ShowChangeUsageLine24_Text ) ' Line 24 WScript.Echo( L_ShowChangeUsageLine25_Text ) ' Line 25 WScript.Echo( L_ShowChangeUsageLine26_Text ) ' Line 26 WScript.Echo( L_ShowChangeUsageLine27_Text ) ' Line 27 WScript.Echo vbCr ' Line 28 WScript.Echo( L_UsageExamples_Text ) ' Line 29 WScript.Echo( L_ShowChangeUsageLine30_Text ) ' Line 30 WScript.Echo( L_ShowChangeUsageLine31_Text ) ' Line 31 WScript.Echo( L_ShowChangeUsageLine32_Text ) ' Line 32 WScript.Echo( L_ShowChangeUsageLine33_Text ) ' Line 33 WScript.Echo( L_ShowChangeUsageLine34_Text ) ' Line 34 WScript.Echo( L_ShowChangeUsageLine35_Text ) ' Line 35 End Sub '****************************************************************************** '* Sub: ShowCreateUsage '* '* Purpose: Shows the correct usage to the user. '* '* Input: None '* '* Output: Help messages for the /Create option are displayed on screen. '* '****************************************************************************** Sub ShowCreateUsage() WScript.Echo vbCr ' Line 1 WScript.Echo( L_ShowCreateUsageLine02_Text ) ' Line 2 WScript.Echo( L_ShowCreateUsageLine03_Text ) ' Line 3 WScript.Echo( L_ShowCreateUsageLine04_Text ) ' Line 4 WScript.Echo vbCr ' Line 5 WScript.Echo( L_UsageDescription_Text ) ' Line 6 WScript.Echo( L_ShowCreateUsageLine07_Text ) ' Line 7 WScript.Echo vbCr ' Line 8 WScript.Echo( L_UsageParamList_Text ) ' Line 9 WScript.Echo( L_UsageMachineName_Text ) ' Line 10 WScript.Echo vbCr ' Line 11 WScript.Echo( L_UsageUserNameLine1_Text ) ' Line 12 WScript.Echo( L_UsageUserNameLine2_Text ) ' Line 13 WScript.Echo vbCr ' Line 14 WScript.Echo( L_UsagePasswordLine1_Text ) ' Line 15 WScript.Echo( L_UsagePasswordLine2_Text ) ' Line 16 WScript.Echo vbCr ' Line 17 WScript.Echo( L_ShowCreateUsageLine18_Text ) ' Line 18 WScript.Echo( L_ShowCreateUsageLine19_Text ) ' Line 19 WScript.Echo vbCr ' Line 20 WScript.Echo( L_ShowCreateUsageLine21_Text ) ' Line 21 WScript.Echo( L_ShowCreateUsageLine22_Text ) ' Line 22 WScript.Echo vbCr ' Line 23 WScript.Echo( L_ShowCreateUsageLine24_Text ) ' Line 24 WScript.Echo( L_ShowCreateUsageLine25_Text ) ' Line 25 WScript.Echo( L_ShowCreateUsageLine26_Text ) ' Line 26 WScript.Echo( L_ShowCreateUsageLine27_Text ) ' Line 27 WScript.Echo vbCr ' Line 28 WScript.Echo( L_UsageExamples_Text ) ' Line 29 WScript.Echo( L_ShowCreateUsageLine30_Text ) ' Line 30 WScript.Echo( L_ShowCreateUsageLine31_Text ) ' Line 31 WScript.Echo( L_ShowCreateUsageLine32_Text ) ' Line 32 WScript.Echo( L_ShowCreateUsageLine33_Text ) ' Line 33 WScript.Echo( L_ShowCreateUsageLine34_Text ) ' Line 34 WScript.Echo( L_ShowCreateUsageLine35_Text ) ' Line 35 End Sub '****************************************************************************** '* Sub: ShowDeleteUsage '* '* Purpose: Shows the correct usage to the user. '* '* Input: None '* '* Output: Help messages for the /Delete option are displayed on screen. '* '****************************************************************************** Sub ShowDeleteUsage() WScript.Echo vbCr ' Line 1 WScript.Echo( L_ShowDeleteUsageLine02_Text ) ' Line 2 WScript.Echo( L_ShowDeleteUsageLine03_Text ) ' Line 3 WScript.Echo vbCr ' Line 4 WScript.Echo( L_UsageDescription_Text ) ' Line 5 WScript.Echo( L_ShowDeleteUsageLine06_Text ) ' Line 6 WScript.Echo vbCr ' Line 7 WScript.Echo( L_UsageParamList_Text ) ' Line 8 WScript.Echo( L_UsageMachineName_Text ) ' Line 9 WScript.Echo vbCr ' Line 10 WScript.Echo( L_UsageUserNameLine1_Text ) ' Line 11 WScript.Echo( L_UsageUserNameLine2_Text ) ' Line 12 WScript.Echo vbCr ' Line 13 WScript.Echo( L_UsagePasswordLine1_Text ) ' Line 14 WScript.Echo( L_UsagePasswordLine2_Text ) ' Line 15 WScript.Echo vbCr ' Line 16 WScript.Echo( L_ShowDeleteUsageLine17_Text ) ' Line 17 WScript.Echo( L_ShowDeleteUsageLine18_Text ) ' Line 18 WScript.Echo( L_ShowDeleteUsageLine19_Text ) ' Line 19 WScript.Echo vbCr ' Line 20 WScript.Echo( L_UsageExamples_Text ) ' Line 21 WScript.Echo( L_ShowDeleteUsageLine22_Text ) ' Line 22 WScript.Echo( L_ShowDeleteUsageLine23_Text ) ' Line 23 WScript.Echo( L_ShowDeleteUsageLine24_Text ) ' Line 24 WScript.Echo( L_ShowDeleteUsageLine25_Text ) ' Line 25 End Sub '****************************************************************************** '* Sub: ShowQueryUsage '* '* Purpose: Shows the correct usage to the user. '* '* Input: None '* '* Output: Help messages for the /Query option are displayed on screen. '* '****************************************************************************** Sub ShowQueryUsage() WScript.Echo vbCr ' Line 1 WScript.Echo( L_ShowQueryUsageLine02_Text ) ' Line 2 WScript.Echo( L_ShowQueryUsageLine03_Text ) ' Line 3 WScript.Echo vbCr ' Line 4 WScript.Echo( L_UsageDescription_Text ) ' Line 5 WScript.Echo( L_ShowQueryUsageLine06_Text ) ' Line 6 WScript.Echo vbCr ' Line 7 WScript.Echo( L_UsageParamList_Text ) ' Line 8 WScript.Echo( L_UsageMachineName_Text ) ' Line 9 WScript.Echo vbCr ' Line 10 WScript.Echo( L_UsageUserNameLine1_Text ) ' Line 11 WScript.Echo( L_UsageUserNameLine2_Text ) ' Line 12 WScript.Echo vbCr ' Line 13 WScript.Echo( L_UsagePasswordLine1_Text ) ' Line 14 WScript.Echo( L_UsagePasswordLine2_Text ) ' Line 15 WScript.Echo vbCr ' Line 16 WScript.Echo( L_ShowQueryUsageLine17_Text ) ' Line 17 WScript.Echo( L_ShowQueryUsageLine18_Text ) ' Line 18 WScript.Echo( L_ShowQueryUsageLine19_Text ) ' Line 19 WScript.Echo vbCr ' Line 20 WScript.Echo( L_UsageExamples_Text ) ' Line 21 WScript.Echo( L_ShowQueryUsageLine22_Text ) ' Line 22 WScript.Echo( L_ShowQueryUsageLine23_Text ) ' Line 23 WScript.Echo( L_ShowQueryUsageLine24_Text ) ' Line 24 WScript.Echo( L_ShowQueryUsageLine25_Text ) ' Line 25 WScript.Echo( L_ShowQueryUsageLine26_Text ) ' Line 26 WScript.Echo( L_ShowQueryUsageLine27_Text ) ' Line 27 End Sub '+----------------------------------------------------------------------------+ '| End of the Script | '+----------------------------------------------------------------------------+