????

Your IP : 18.188.211.44


Current Path : C:/Windows/System32/
Upload File :
Current File : C:/Windows/System32/SCregEdit.wsf

'********************************************************************
'*
'* Copyright (c) Microsoft Corporation. All rights reserved. 
'*
'* Module Name:    SCregEdit.wsf 
'*
'* Abstract:       Enables an administrator to edit particular registry
'*				   settings.
'*
'* Version # 1.0.0.1005
'*
'********************************************************************

<job>

<script language="VBScript">


' Global declaration 
OPTION EXPLICIT

'ON ERROR RESUME NEXT
Err.Clear
' Set constants for use throughout script
CONST HKEY_CURRENT_USER             = &H80000001
CONST HKEY_LOCAL_MACHINE            = &H80000002
const KEY_SET_VALUE 		    = &H0001
CONST ForReading                    = 1

CONST VIEWQUICKKEY					= "/v"
CONST HELPSWITCH					= "/?"
CONST CLISWITCH						= "/CLI"
CONST REGMULTISZ					= "REG_MULTI_SZ"
CONST REGSZ						= "REG_SZ"
CONST REGDWORD						= "REG_DWORD"
CONST CONST_CSCRIPT                 = 2

CONST strComputer                   = "."

Dim bHasAccessRight
' Get command line arguments
Dim objArgs, oReg
Dim Resource, Resource2, Resource3, Resource4, LocSwitch
Set objArgs = WScript.Arguments
' establish object references.
Dim objFSO, FILEPATH, langFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set langFSO = CreateObject("Scripting.FileSystemObject")
FILEPATH = objFSO.GetAbsolutePathName(strComputer) 'Current folder path

Dim arrKeyList()
Dim arrSwitchList()


' Check whether the script is run using CScript
dim strScriptHost

strScriptHost = Right((LCase(Wscript.FullName)), 11)
If strScriptHost <> "cscript.exe" Then 

   resource = GetLocalizedResource("L_UseCscript1_ErrorMessage")
   resource2 = GetLocalizedResource("L_UseCscript2E_ErrorMessage")
   resource3 = GetLocalizedResource("L_UseCscript3_ErrorMessage")

   WScript.Echo ( resource & vbCRLF & _
        ExpandEnvironmentString(resource2) & resource3 )

   WScript.Quit(1000)

End If


Call MainProcessingLoop
' ****************************************************************************************
'* Function : MainProcessingLoop()
'*
'* Purpose  : This function is the main processing loop for the application. 
'*
'* Input:    
'* Output:   
'*
' ****************************************************************************************
Sub MainProcessingLoop()

	' Establish key values from text file to compare input.

	BuildKeyListArray()

	If objArgs.Count = 0 Then		'No arguments passed when running the script
		ShowHelpInfo(HELPSWITCH)
	ElseIf objArgs.Count = 1 Then
		ShowHelpInfo(lcase(objArgs(0)))
	elseif objArgs.count > 1 then
		if lcase(objArgs(0)) = VIEWQUICKKEY or lcase(objArgs(1)) = VIEWQUICKKEY then
			' process view request
			if lcase(objArgs(0)) = VIEWQUICKKEY then
				ViewSwitch(lcase(objArgs(1)))
			else
				ViewSwitch(lcase(objArgs(0)))
			End If
		elseif objArgs(0) = HELPSWITCH or objArgs(1) = HELPSWITCH then
			if objArgs(0) = HELPSWITCH then
				ShowHelpInfo(lcase(objArgs(1)))
			else
				ShowHelpInfo(lcase(objArgs(0)))
			end if
		elseif objArgs(0) = CLISWITCH then
			ShowCliHelp()
		Else
			ProcessSwitch(lcase(objArgs(0)))
		End If
	End If
End Sub
' ****************************************************************************************
'* Function : ProcessSwitch
'*
'* Purpose  : This function makes the updates to the registry based on the passed in switch
'*			  and other command line arguments.
'*
'* Input:    [in]  switch      The quick key for the registry entry to update
'* Output:   
'*
' ****************************************************************************************
Sub ProcessSwitch(switch)
	Dim k, arrValues, returnValue
	k = -1
	
	k = GetArrayElement(switch)
	if k <> -1 then
	If CheckArgs(switch) = True Then			'Check if number of args expected and given are same
		If SpecialCaseCheck(switch) = True Then
			'Dim arrValues
			If arrKeyList(k)(3) = REGMULTISZ Then
				arrValues = Array(objArgs(1), objArgs(2), objArgs(3))
				Call SetMultiStringValue(strComputer,HKEY_LOCAL_MACHINE,arrKeyList(k)(2),arrKeyList(k)(1),arrValues) 'Setting the MultiString value
			ElseIf arrKeyList(k)(3) = REGSZ Then
				Call SetStringValue(strComputer, HKEY_LOCAL_MACHINE, arrKeyList(k)(2),arrKeyList(k)(1), CInt(objArgs(1))) 'Setting the MultiString value
			ElseIf arrKeyList(k)(3) = REGDWORD Then
				Call SetDWORDValue(strComputer, HKEY_LOCAL_MACHINE, arrKeyList(k)(2),arrKeyList(k)(1), Int(objArgs(1))) 'Setting the DWORD value
			End IF
		Else If SpecialCaseCheck(switch) = "AU" Then
			Call ConfigureAU(CInt(objArgs(1)))
		End If

		End If
	End If
	else
		resource = GetLocalizedResource("L10600")
		Wscript.Echo(resource)
	End If	

End Sub
' ****************************************************************************************
'* Function : ViewSwitch()
'*
'* Purpose  : This sub allows the viewing of all registry elements.
'*
'* Input:    [in]  switch      the quickkey to the registry entry to view.
'* Output:   
'*
' ****************************************************************************************
Sub ViewSwitch(switch)

	dim k, returnValue, bSpecialCase
	returnValue = ""	
	bSpecialCase = false
	k = GetArrayElement(switch)

	if k <> -1 then
		' Valid switch, check for special cases for viewing state
		select case switch
			case arrSwitchList(0) 'au
				bSpecialCase = true
				Call ViewAU()
		end select
		if not bSpecialCase then
			select case arrKeyList(k)(3)
			case REGMULTISZ
				returnValue = ViewMultiStringValue(strComputer, HKEY_LOCAL_MACHINE, arrKeyList(k)(2), arrKeyList(k)(1))
			case REGDWORD
				returnValue = ViewDWORDValue(strComputer, HKEY_LOCAL_MACHINE, arrKeyList(k)(2), arrKeyList(k)(1))
			case REGSZ
				returnValue = ViewStringValue(strComputer, HKEY_LOCAL_MACHINE, arrKeyList(k)(2), arrKeyList(k)(1))
			end select
			Wscript.Echo(arrKeyList(k)(2) & " " & arrKeyList(k)(1))
			if isnull(returnValue) then
				resource = GetLocalizedResource("L10565")
				Wscript.Echo(resource)
			else
				resource = GetLocalizedResource("L10400")
				Wscript.Echo(resource)
				Wscript.Echo("" & returnValue)
			end if
		end if
	else
		resource = GetLocalizedResource("L10600")
		Wscript.Echo(resource)
	end if						

End Sub

' ****************************************************************************************
'* Function : ShowHelpInfo()
'*
'* Purpose  : This sub allows the viewing of help for a particular quick key.
'*
'* Input:    [in]  switch      the quickkey to the registry entry to view help for.
'* Output:   
'*
' ****************************************************************************************
Sub ShowHelpInfo(switch)
	dim keyCounter, counter, count, HelpCount
	keyCounter = 0
	counter = 1
	dim helpLine
	If switch = "/?" Then
		'au help
		Keycounter = 11
		count = 1
		For count = counter to keycounter
			helpline = "au" & count
			resource = GetLocalizedResource(helpline)
			Wscript.Echo(resource)
			If count = 4 or count = 5 or count = 7 Then
				Wscript.Echo()
			End If
		Next
		Wscript.Echo()
		Wscript.Echo()
		'ar help
		Keycounter = 5
		count = 1
		For count = counter to keycounter
			helpline = "ar" & count
			resource = GetLocalizedResource(helpline)
			Wscript.Echo(resource)
			If count = 2 or count = 3 Then
				Wscript.Echo()
			End If
		Next
		HelpCount = 1
		For HelpCount = HelpCount to 2
			Wscript.Echo()
			Wscript.Echo()
			'cs and im help
			Keycounter = 6
			count = 1
			For count = counter to keycounter
				If HelpCount = 1 then
					helpline = "cs" & count
				else
					helpline = "im" & count
				End If
				resource = GetLocalizedResource(helpline)
				Wscript.Echo(resource)
				If count = 3 or count = 4 Then
					Wscript.Echo()
				End If
			Next
		Next
		HelpCount = 1
		For HelpCount = HelpCount to 2
			Wscript.Echo()
			Wscript.Echo()
			'dw and dp help
			Keycounter = 7
			count = 1
			For count = counter to keycounter
				If HelpCount = 1 then
					helpline = "dp" & count
				else
					helpline = "dw" & count
				End If
				resource = GetLocalizedResource(helpline)
				Wscript.Echo(resource)
				If count = 4 or count = 5 Then
					Wscript.Echo()
				End If
			Next
		Next
		Wscript.Echo()
		Wscript.Echo()
		'cli help
		Keycounter = 4
		count = 1
		For count = counter to keycounter
			helpline = "cli" & count
			resource = GetLocalizedResource(helpline)
			Wscript.Echo(resource)
			If count = 3 Then
				Wscript.Echo()
			End If
		Next
	Else
		Select Case switch
			Case arrSwitchList(0)
				'au help
				Keycounter = 11
				count = 1
				For count = counter to keycounter
					helpline = "au" & count
					resource = GetLocalizedResource(helpline)
					Wscript.Echo(resource)
					If count = 4 or count = 5 or count = 7 Then
						Wscript.Echo()
					End If
				Next
			Case arrSwitchList(1)
				'ar help
				Keycounter = 5
				count = 1
				For count = counter to keycounter
					helpline = "ar" & count
					resource = GetLocalizedResource(helpline)
					Wscript.Echo(resource)
					If count = 2 or count = 3 Then
						Wscript.Echo()
					End If
				Next
			Case arrSwitchList(2)
				'cs help
				Keycounter = 6
				count = 1
				For count = counter to keycounter
					helpline = "cs" & count
					resource = GetLocalizedResource(helpline)
					Wscript.Echo(resource)
					If count = 3 or count = 4 Then
						Wscript.Echo()
					End If
				Next
			Case arrSwitchList(3)
				'im help
				Keycounter = 6
				count = 1
				For count = counter to keycounter
					helpline = "im" & count
					resource = GetLocalizedResource(helpline)
					Wscript.Echo(resource)
					If count = 3 or count = 4 Then
						Wscript.Echo()
					End If
				Next
			Case arrSwitchList(4)
				'dp help
				Keycounter = 7
				count = 1
				For count = counter to keycounter
					helpline = "dp" & count
					resource = GetLocalizedResource(helpline)
					Wscript.Echo(resource)
					If count = 4 or count = 5 Then
						Wscript.Echo()
					End If
				Next
			Case arrSwitchList(5)
				'dw help
				Keycounter = 7
				count = 1
				For count = counter to keycounter
					helpline = "dw" & count
					resource = GetLocalizedResource(helpline)
					Wscript.Echo(resource)
					If count = 4 or count = 5 Then
						Wscript.Echo()
					End If
				Next
			Case arrSwitchList(6)
				'cli help
				ShowCliHelp()
		Case Else
			resource = GetLocalizedResource("L10600")
			Wscript.Echo(resource)
		End Select
	End If
End Sub

' ****************************************************************************************
'* Function : ShowCliHelp()
'*
'* Purpose  : This sub displays the command line tool help.
'*
'* Input:    
'* Output:   
'*
' ****************************************************************************************
Sub ShowCliHelp()
	dim keyCounter, counter, count, HelpCount
	keyCounter = 88
	counter = 0
	dim helpLine
	count = 1
	For count = counter to keycounter
		helpline = "L" & (10800 + count)
		resource = GetLocalizedResource(helpline)
		Wscript.Echo(resource)
	Next
End Sub

' ****************************************************************************************
'* Function : SpecialCaseCheck()
'*
'* Purpose  : This sub allows the handling of special cases when editing registry entries.
'*
'* Input:    [in]  switch      the quickkey to the registry entry to edit.
'* Output:   returns true if entry still needs to be updated. False if passed in values do 
'*			 not meet criteria or if value is already updated.
'*
' ****************************************************************************************
Function SpecialCaseCheck(switch)
	dim arrValues, k
	Select Case switch
		Case arrSwitchList(0)
			If IsNumeric(objArgs(1)) = True Then
				If objArgs(1) = 1 or objArgs(1) = 3 or objArgs(1) = 4 Then
					SpecialCaseCheck = "AU"
				Else
					resource = GetLocalizedResource("L10570")
					Wscript.Echo(resource)
					Wscript.Echo()
					ShowHelpInfo(switch)
					SpecialCaseCheck = false
				End If
			End If
		Case arrSwitchList(1)
			If IsNumeric(objArgs(1)) = True Then
				If objArgs(1) = 0 or objArgs(1) = 1 Then
					SpecialCaseCheck = True
				Else
					resource = GetLocalizedResource("L10580")
					Wscript.Echo(resource)
					Wscript.Echo()
					ShowHelpInfo(switch)
					SpecialCaseCheck = false
				End If
			End If
		Case arrSwitchList(2)
			If IsNumeric(objArgs(1)) = True Then
				If objArgs(1) = 0 or objArgs(1) = 1 Then
					SpecialCaseCheck = True
				Else
					resource = GetLocalizedResource("L10580")
					Wscript.Echo(resource)
					Wscript.Echo()	
					ShowHelpInfo(switch)
					SpecialCaseCheck = false
				End If
			End If
		Case arrSwitchList(3)
			If IsNumeric(objArgs(1)) = True Then
				If objArgs(1) = 0 or objArgs(1) = 1 Then
					SpecialCaseCheck = True
				Else
					resource = GetLocalizedResource("L10580")
					Wscript.Echo(resource)
					Wscript.Echo()	
					ShowHelpInfo(switch)
					SpecialCaseCheck = false
				End If
			End If
		Case arrSwitchList(4)
			If IsNumeric(objArgs(1)) = True Then
				If objArgs(1) >= 0 and objArgs(1) <= 65535 Then
					SpecialCaseCheck = True
				Else
					resource = GetLocalizedResource("L10590")
					Wscript.Echo(resource)
					Wscript.Echo()	
					ShowHelpInfo(switch)
					SpecialCaseCheck = false
				End If
			End If
		Case arrSwitchList(5)
			If IsNumeric(objArgs(1)) = True Then
				If objArgs(1) >= 0 and objArgs(1) <= 65535 Then
					SpecialCaseCheck = True
				Else
					resource = GetLocalizedResource("L10590")
					Wscript.Echo(resource)
					Wscript.Echo()	
					ShowHelpInfo(switch)
					SpecialCaseCheck = false
				End If
			End If

		Case Else
			SpecialCaseCheck = True
	End Select
End Function

' ****************************************************************************************
'* Function : GetArrayElement()
'*
'* Purpose  : This function determines which array value has the passed in switch
'*
'* Input:    [in]  switch      the quickkey to the registry entry to view.
'* Output:   returns the index of the array that contains the switch.
'*
' ****************************************************************************************
Function GetArrayElement(switch)
	dim k, returnValue
	
	returnValue = -1

	For k = 0 to Ubound(arrKeyList)
		If arrKeyList(k)(0) = switch Then	'Find the array wtih first element as the switch in the arrKeyList array
			returnValue = k
		end if		
	Next

	GetArrayElement = returnValue
	
End Function
' ****************************************************************************************
'* Function : BuildKeyListArray()
'*
'* Purpose  : This sub sets a global array used throughout the script
'*
'* Input:    
'* Output:   
'*
' ****************************************************************************************
Sub BuildKeyListArray()

	dim count, counter, keyCounter, RegCounter
	dim regvalue
	dim inputLine
	Dim arrValues

	keyCounter = 0
	counter = 0

	'Recounter must equal the number of registry switches supported - 1
	Regcounter = 6
	count = 0
	For count = counter to RegCounter
		regvalue = "reg" & count
		inputLine = GetLocalizedResource(regvalue)
		arrValues = split(inputLine, ",")	' If not, then put the comma seperated line into an array
   		ReDim Preserve arrKeyList(keyCounter)		'Since we don't know how many switches are present in the file
		arrKeyList(keyCounter) = arrValues			'For each switch from arrValues put it into arrKeyList
		keyCounter = keyCounter + 1
	Next

	keyCounter = 0
	counter = 0
	count = 0
	For count = counter to RegCounter
		regvalue = "switch" & count
		inputLine = GetLocalizedResource(regvalue)
		'arrValues = split(inputLine, ",")	' If not, then put the comma seperated line into an array
   		ReDim Preserve arrSwitchList(keyCounter)		'Since we don't know how many switches are present in the file
		arrSwitchList(keyCounter) = inputLine			'For each switch from arrValues put it into arrKeyList
		keyCounter = keyCounter + 1
	Next



End Sub

' ****************************************************************************************
'* Function : SetMultiStringValue()
'*
'* Purpose  : This sub is the generic function to set a multi string registry key.
'*
'* Input:    [in]  strComputer      the name of the computer
'*		     [in]  root             The root of the registry entry to update.
'*		     [in]  strKeyPath       path to registry entry to update.
'*			 [in]  strValueName     value name of registry entry to update.
'*			 [in]  arrValues        array of values to update.
'* Output:   
'*
' ****************************************************************************************
Sub SetMultiStringValue(strComputer,root,strKeyPath, strValueName, arrValues)

	Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
		strComputer & "\root\default:StdRegProv")


	oReg.CheckAccess root, strKeyPath, _
    		KEY_SET_VALUE, bHasAccessRight

	If bHasAccessRight = True Then
		oReg.SetMultiStringValue root,strKeyPath,strValueName,arrValues
		resource = GetLocalizedResource("L10440")
		Wscript.Echo(resource)
	Else
		resource = GetLocalizedResource("L10610")
		Wscript.Echo(resource)
		Wscript.Echo()
	End If
	
End Sub
' ****************************************************************************************
'* Function : ViewMultiStringValue()
'*
'* Purpose  : This sub is the generic function to view a multi string registry key.
'*
'* Input:    [in]  strComputer      the name of the computer
'*		     [in]  root             The root of the registry entry to update.
'*		     [in]  strKeyPath       path to registry entry to update.
'*			 [in]  strValueName     value name of registry entry to update.
'* Output:   
'*
' ****************************************************************************************
Function ViewMultiStringValue(strComputer, root, strKeyPath, strValueName)
	
	dim i, arrValues, strValue, returnValue
	
	Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
		strComputer & "\root\default:StdRegProv")

	oReg.GetMultiStringValue root ,strKeyPath, _
		strValueName,arrValues
	
	For Each strValue In arrValues
		returnValue = returnValue & strValue & " " 
	Next
	
	ViewMultiStringValue = returnValue
	
End Function
' ****************************************************************************************
'* Function : SetStringValue()
'*
'* Purpose  : This sub is the generic function to set a string registry key.
'*
'* Input:    [in]  strComputer      the name of the computer
'*		     [in]  root             The root of the registry entry to update.
'*		     [in]  strKeyPath       path to registry entry to update.
'*			 [in]  strValueName     value name of registry entry to update.
'*			 [in]  strValue         value to update.
'* Output:   
'*
' ****************************************************************************************
Sub SetStringValue(strComputer, root, strKeyPath, strValueName, strValue)

	Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
		strComputer & "\root\default:StdRegProv")


	oReg.CheckAccess root, strKeyPath, _
    		KEY_SET_VALUE, bHasAccessRight

	If bHasAccessRight = True Then
		oReg.SetStringValue root ,strKeyPath, strValueName, strValue
		resource = GetLocalizedResource("L10440")
		Wscript.Echo(resource)
	Else
		resource = GetLocalizedResource("L10610")
		Wscript.Echo(resource)
		Wscript.Echo()
	End If


	
End Sub
' ****************************************************************************************
'* Function : ViewStringValue()
'*
'* Purpose  : This sub is the generic function to view a string registry key.
'*
'* Input:    [in]  strComputer      the name of the computer
'*		     [in]  root             The root of the registry entry to update.
'*		     [in]  strKeyPath       path to registry entry to update.
'*			 [in]  strValueName     value name of registry entry to update.
'* Output:   
'*
' ****************************************************************************************
Function ViewStringValue(strComputer, root, strKeyPath, strValueName)
	
	dim strValue
	
	Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
		strComputer & "\root\default:StdRegProv")

	oReg.GetStringValue root,strKeyPath,strValueName,strValue

	ViewStringValue = strValue
	
End Function
' ****************************************************************************************
'* Function : SetDWORDValue()
'*
'* Purpose  : This sub is the generic function to set a dword registry key.
'*
'* Input:    [in]  strComputer      the name of the computer
'*		     [in]  root             The root of the registry entry to update.
'*		     [in]  strKeyPath       path to registry entry to update.
'*			 [in]  strValueName     value name of registry entry to update.
'*			 [in]  dwValue          value to update.
'* Output:   
'*
' ****************************************************************************************
Sub SetDWORDValue(strComputer, root, strKeyPath, strValueName, dwValue)
	
	dim NewKeyValue, resource, resource2, service, obj, objset
	
	Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
		strComputer & "\root\default:StdRegProv")

	oReg.CheckAccess root, strKeyPath, KEY_SET_VALUE, bHasAccessRight

	resource2 = GetLocalizedResource("L10780")


	If bHasAccessRight = True Then
		If resource2 = strValueName then
'			oReg.SetDWORDValue root ,strKeyPath, strValueName, CLng(dwValue)
			Set Service = GetObject("winmgmts:{authenticationLevel=PktPrivacy}!root\cimv2\TerminalServices")
			set objSet=Service.ExecQuery("select * from  Win32_TerminalServiceSetting")
			for each obj in objSet
				If dwValue = 1 then
					If obj.AllowTSConnections = 0 Then
						'already disabled
					else
						obj.SetAllowTSConnections 0,0
					end if
				else
					If obj.AllowTSConnections = 1 Then
						'already enabled
					else
						obj.SetAllowTSConnections 1,1
					end if
				end if
			        obj.refresh_
			next
			resource = GetLocalizedResource("L10440")
			Wscript.Echo(resource)
		else
			oReg.SetDWORDValue root ,strKeyPath, strValueName, CLng(dwValue)
			resource = GetLocalizedResource("L10440")
			Wscript.Echo(resource)
		end if
	Else
		resource = GetLocalizedResource("L10610")
		Wscript.Echo(resource)
		Wscript.Echo()
	End If

	
End Sub
' ****************************************************************************************
'* Function : ViewDWORDValue()
'*
'* Purpose  : This sub is the generic function to view a dword registry key.
'*
'* Input:    [in]  strComputer      the name of the computer
'*		     [in]  root             The root of the registry entry to update.
'*		     [in]  strKeyPath       path to registry entry to update.
'*			 [in]  strValueName     value name of registry entry to update.
'* Output:   
'*
' ****************************************************************************************
Function ViewDWordValue(strComputer, root, strKeyPath, strValueName)

	dim dwValue
	
	Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
		strComputer & "\root\default:StdRegProv")

	oReg.GetDWORDValue root,strKeyPath,strValueName,dwValue
	
	ViewDWordValue = dwValue
	
End Function
' ****************************************************************************************
'* Function : DeleteRegValue()
'*
'* Purpose  : This sub is the generic function to delete a registry value.
'*
'* Input:    [in]  strComputer      the name of the computer
'*		     [in]  root             The root of the registry entry to delete.
'*		     [in]  strKeyPath       path to registry entry to delete.
'*			 [in]  strValueName     value name of registry entry to delete.
'* Output:   
'*
' ****************************************************************************************
Sub DeleteRegValue(strComputer, root, strKeyPath, strValueName)
	
	dim NewKeyValue, resource, resource2, service, obj, objset
	
	Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
		strComputer & "\root\default:StdRegProv")

	oReg.CheckAccess root, strKeyPath, KEY_SET_VALUE, bHasAccessRight

	If bHasAccessRight = True Then
		oReg.DeleteValue root ,strKeyPath, strValueName 
		resource = GetLocalizedResource("L10440")
		Wscript.Echo(resource)
	Else
		resource = GetLocalizedResource("L10610")
		Wscript.Echo(resource)
		Wscript.Echo()
	End If

	
End Sub
' ****************************************************************************************
'* Function : ConfigureAU()
'*
'* Purpose  : This sub is the function to set AutoUpdate.
'*
'* Input:    [in]  strComputer      the name of the computer
'*		     [in]  root             The root of the registry entry to update.
'*		     [in]  strKeyPath       path to registry entry to update.
'*			 [in]  strValueName     value name of registry entry to update.
'* Output:   
'*
' ****************************************************************************************
Function ConfigureAU(strValueName)

	dim settingChanged

	' We interpret the input in order to determine which of the registry entries need to be modified
	Select Case strValueName
		Case 4
			' Set to Automatic
			' Ensure that NoAutoUpdate value is not present and AUOptions is set to 4
			Call DeleteRegValue(strComputer, HKEY_LOCAL_MACHINE, "SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU", "NoAutoUpdate")
			Call SetDWORDValue(strComputer, HKEY_LOCAL_MACHINE, "SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU", "AUOptions", 4)
		Case 3
			' Set to DownloadOnly
			' Ensure that NoAutoUpdate value is not present and AUOptions is set to 3
			Call DeleteRegValue(strComputer, HKEY_LOCAL_MACHINE, "SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU", "NoAutoUpdate")
			Call SetDWORDValue(strComputer, HKEY_LOCAL_MACHINE, "SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU", "AUOptions", 3)
		Case 1
			' Set to Manual
			' Create/set NoAutoUpdate value to 1 and delete AUOptions if present
			Call SetDWORDValue(strComputer, HKEY_LOCAL_MACHINE, "SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU", "NoAutoUpdate", 1)
			Call DeleteRegValue(strComputer, HKEY_LOCAL_MACHINE, "SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU", "AUOptions")
	End Select
	settingChanged = TRUE

End Function
' ****************************************************************************************
'* Function : ViewAU()
'*
'* Purpose  : This sub is the function to view AutoUpdate status.
'*
'* Input:    none
'* Output:   displays AutoUpdate configuration
'*
' ****************************************************************************************
Sub ViewAU()
    Dim NoAutoUpdateVal
    Dim AUOptions
    Dim updateSchedule
    Dim resourcePrefix
    on error resume next

    updateSchedule=""

    Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
                       strComputer & "\root\default:StdRegProv")

    ' If NoAutoUpdate is set then we are set to Manual
    NoAutoUpdateVal = 0 ' Default in case reg value is not present
    oReg.GetDWORDValue HKEY_LOCAL_MACHINE,"SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU","NoAutoUpdate",NoAutoUpdateVal

    if NoAutoUpdateVal = 1 then
        updateSchedule = GetLocalizedResource("L10461")
    else
        'We look at the relevant AUOptions registry entry to determine behaviour
        AUOptions=0
        oReg.GetDWORDValue HKEY_LOCAL_MACHINE,"SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU","AUOptions",AUOptions
        Select Case AUOptions
            Case 3
                updateSchedule = GetLocalizedResource("L10463")
            Case 4
                updateSchedule = GetLocalizedResource("L10464")
            Case Else
                updateSchedule = GetLocalizedResource("L10469")
        End Select
    end if

    ' Display result
    resourcePrefix = GetLocalizedResource("L10460")
    Wscript.Echo(resourcePrefix & updateSchedule)
End Sub
' ****************************************************************************************
'* Function : CheckArgs()
'*
'* Purpose  : This function checks validity of command line parameters.
'*
'* Input:    [in]  key      passed in quick key
'* Output:   
'*
' ****************************************************************************************
Function CheckArgs(key)
	Dim p,v, status
	status = true
	For p = 0 to Ubound(arrKeyList)
		If arrKeyList(p)(0) = key Then
			If arrKeyList(p)(3) = "REG_MULTI_SZ" Then
				If(Ubound(arrKeyList(p)) - 3) = (objArgs.Count - 1) Then
					For v = 4 To Ubound(arrKeyList(p))
						If arrKeyList(p)(v) = "REG_SZ" Then
							If TypeName(objArgs(v - 3)) = "String" Then
								'do nothing
							Else
								resource = GetLocalizedResource("L10500")
								resource2 = GetLocalizedResource("L10540")
								Wscript.Echo(resource & v-3 & ": " & resource2)
								status = false
								CheckArgs = false
							End If
						ElseIf arrKeyList(p)(v) = "REG_DWORD" Then
							If IsNumeric(objArgs(v - 3)) = True Then
								'do nothing
							Else
								resource = GetLocalizedResource("L10500")
								resource2 = GetLocalizedResource("L10530")
								Wscript.Echo(resource & v-3 & ": " & resource2)
								status = false
								CheckArgs = false
							End If
						End If
					Next
				Else
					resource = GetLocalizedResource("L10510")
					Wscript.Echo(resource)
					status = false
					CheckArgs = false
				End If
			ElseIf arrKeyList(p)(3) = "REG_SZ" Then
				If TypeName(objArgs(1)) = "String" Then
					'do nothing
				Else
					resource = GetLocalizedResource("L10500")
					resource2 = GetLocalizedResource("L10540")
					Wscript.Echo(resource & " 1 : " & resource2)
					status = false
					CheckArgs = false
				End If
			ElseIf arrKeyList(p)(3) = "REG_DWORD" Then
				If IsNumeric(objArgs(1)) = True Then
					'do nothing
				Else
					resource = GetLocalizedResource("L10500")
					resource2 = GetLocalizedResource("L10530")
					Wscript.Echo(resource & " 1 : " & resource2)
					status = false
					CheckArgs = false
				End If
			End If
		End If
	Next
	
	If status = false Then
		CheckArgs = false
	Else
		CheckArgs = True
	End If
End Function
' ****************************************************************************************
'* Function : ExpandEnvironmentString()
'*
'* Purpose:This function Expands the Environment Variables
'*
'* Input:    [in]  strOriginalString      the string need to expand for EnvironmentsettingValue
'* Output:   Returns ExpandedEnvironmentString
'*
' ****************************************************************************************
Private Function ExpandEnvironmentString( ByVal strOriginalString)

 ON ERROR RESUME NEXT
 Err.Clear

Dim ObjWshShell  ' Object to hold Shell

Set ObjWshShell = CreateObject("WScript.Shell")
ExpandEnvironmentString= ObjWshShell.ExpandEnvironmentStrings(strOriginalString)

End Function



' ****************************************************************************************
'* Function : 
'*
'* Purpose: The following functions find the language appropriate strings
'*
'* Input: 
'* Output: 
'*
' ****************************************************************************************
' Get a localized resources for 'resourceID' if available; otherwise, get the neutral resource.
Function GetLocalizedResource(resourceID)
	Const ForReading = 1, TristateUseDefault = -2

	Dim lang, value, ini

	
	lang = GetUILanguage()

	ini = langFSO.GetParentFolderName(WScript.ScriptFullName) & "\" _
		& ToHex(lang) & "\" & langFSO.GetBaseName(WScript.ScriptName) &  ".ini"

	If langFSO.FileExists(ini) Then
		Dim stream, file

		Debug.WriteLine "Using resource file " & ini

		Set file = langFSO.GetFile(ini)
		Set stream = file.OpenAsTextStream(ForReading, TristateUseDefault)
		value = ReadResource(stream, resourceID)
	End If

	If Not IsEmpty(value) Then
		GetLocalizedResource = value
	Else
		Debug.WriteLine "Falling back to neutral resource in script file"
		GetLocalizedResource = getResource(resourceID)
	End If
End Function

' Read a resource ID from the TextStream
Function ReadResource(stream, resourceID)
	Const ERROR_FILE_NOT_FOUND = 2
	Dim ln, arr, key, value

	If Not IsObject(stream) Then Err.Raise ERROR_FILE_NOT_FOUND

	Do Until stream.AtEndOfStream
		ln = stream.ReadLine

		arr = Split(ln, "=", 2, 0)
		If UBound(arr, 1) = 1 Then
			' Trim the key and the value first before trimming quotes
			key = Trim(arr(0))

			If resourceID = key Then
				Debug.WriteLine "Found key " & key
				value = TrimChar(Trim(arr(1)), """")
				ReadResource = value
				Exit Do
			End If
		End If
	Loop

	stream.Close
End Function

' Trim a character from the text string
Function TrimChar(s, c)
	Const vbTextCompare = 1

	' Trim character from the start
	If Left( s, 1 ) = c Then
		s = Mid(s, 2)
	End If
	
	' Trim character from the end
	If Right(s, 1) = c Then
		s = Mid(s, 1, Len(s) - 1)
	End If

	TrimChar = s
End Function

' Get a 4-digit hexadecimal number
Function ToHex(n)
	Dim s : s = Hex(n)
	ToHex = String(4 - Len(s), "0") & s
End Function


' If the localized ini file isn't found, read the resources from the script.
Function getResource(resourceID)
	Const ForReading = 1, TristateUseDefault = -2

	Dim lang, value, script
	
	script = langFSO.GetParentFolderName(WScript.ScriptFullName) & "\" & langFSO.GetBaseName(WScript.ScriptName) &  ".wsf"

	If langFSO.FileExists(script) Then
		Dim stream, file

		Debug.WriteLine "Using resource file " & script

		Set file = langFSO.GetFile(script)
		Set stream = file.OpenAsTextStream(ForReading, TristateUseDefault)
		value = ReadResource(stream, resourceID)
	End If

	getResource = value
End Function


</script>

<!-- Neutral language resources -->

L_UseCscript1_ErrorMessage="This script should be executed from the command prompt using CSCRIPT.EXE. For example:"
L_UseCscript2E_ErrorMessage="        CSCRIPT %systemroot%\system32\SCREGEDIT.WSF "
L_UseCscript3_ErrorMessage="arguments"

L10400="View registry setting."
L10440="Registry has been updated."
L10450="You must restart the "IPSec Policy Agent" before the change will take effect."
L10460="Windows Update Settings: "
L10461="Manual"
L10463="DownloadOnly"
L10464="Automatic"
L10469="Custom"
L10500="Parameter"
L10510="Expected 3 parameters."
L10520="Parameter type mismatch"
L10530="Parameter type mismatch expected DWord."
L10540="Parameter type mismatch expected string."
L10565="Value not set."
L10570="Value should be either 1, 3 or 4"
L10575="Value should be either 1, 2, or 3"
L10580="Value should be either 0 or 1"
L10590="Value should be from 0 through 65535"
L10600="Invalid switch - run scregedit.wsf /? For the list of supported switches."
L10610="You do not have permission to modify the registry."
L10780="fDenyTSConnections"
L10800="To activate:"
L10801="     Cscript slmgr.vbs -ato"
L10802=" "
L10803="To use KMS volume licensing for activation:"
L10804="     Configure KMS volume licensing:"
L10805="          cscript slmgr.vbs -ipk [volume license key]"
L10806="     Activate KMS licensing"
L10807="          cscript slmgr.vbs -ato"
L10808="     Set KMS DNS SRV record"
L10809="          cscript slmgr.vbs -skma [KMS FQDN]"
L10810=" "
L10811="Determine the computer name, any of the following:"
L10812="     Set c"
L10813="     Ipconfig /all"
L10814="     Systeminfo.exe or Hostname.exe"
L10815=" "
L10816="Rename the Server Core computer:"
L10817="     Domain joined:"
L10818="          Netdom renamecomputer %computername% /NewName:new-name /UserD:domain-username /PasswordD:*"
L10819="     Not domain joined:"
L10820="          Netdom renamecomputer %computername% /NewName:new-name"
L10821=" "
L10822="Changing workgroups:"
L10823="     Wmic computersystem where name="%computername%" call  joindomainorworkgroup name="[new workgroup name]" "
L10824=" "
L10825="Install a role or optional feature:"
L10826="     Start /w Ocsetup [packagename]"
L10827="     Note: For Active Directory, run Dcpromo with an answer file."
L10828=" "
L10829="View role and optional feature package names and current installation state:"
L10830="     oclist"
L10831=" "
L10832="Start task manager hot-key: "
L10833="     ctrl-shift-esc"
L10834=" "
L10835="Logoff of a Terminal Services session:"
L10836="     Logoff"
L10837=" "
L10838="To set the pagefile size:"
L10839="     Disable system pagefile management: "
L10840="          wmic computersystem where name="%computername%" set AutomaticManagedPagefile=False"
L10841="     Configure the pagefile:"
L10842="          wmic pagefileset where name="C:\\pagefile.sys" set InitialSize=500,MaximumSize=1000"
L10843=" "
L10844="Configure the timezone, date, or time:"
L10845="     control timedate.cpl"
L10846=" "
L10847="Configure regional and language options:"
L10848="     control intl.cpl"
L10849=" "
L10850="Manually install a management tool or agent:"
L10851="     Msiexec.exe /i [msipackage]"
L10852=" "
L10853="List installed msi applications:"
L10854="     Wmic product"
L10855=" "
L10856="Uninstall msi applications:"
L10857="     Wmic product get name /value "
L10858="     Wmic product where name="[name]" call uninstall"
L10859=" "
L10860="To list installed drivers:"
L10861="     Sc query type= driver"
L10862=" "
L10863="Install a driver that is not included:"
L10864="     Copy the driver files to Server Core"
L10865="     Pnputil �i �a [path]\[driver].inf"
L10866=" "
L10867="Rename a Network Adapter:"
L10868="     netsh interface set interface name="Local Area Connection" newname="PrivateNetwork""
L10869=" "
L10870="Disable a Network Adapter:"
L10871="     netsh interface set interface name="Local Area Connection 2" admin=DISABLED"
L10872=" "
L10873="Determine a file�s version:"
L10874="     wmic datafile where name="c:\\windows\\system32\\ntdll.dll" get version"
L10875=" "
L10876="List of installed patches:"
L10877="     wmic qfe list"
L10878=" "
L10879="Install a patch:"
L10880="     Wusa.exe [patchame].msu /quiet"
L10881=" "
L10882="Configure a proxy:"
L10883="     Netsh winhttp set proxy [proxy_name]:[port]"
L10884=" "
L10885="Add, delete, query a Registry value:"
L10886="     reg.exe add /?"
L10887="     reg.exe delete /?"
L10888="     reg.exe query /?"

au1="Automatic Updates - Manage Automatic Windows Updates "
au2="These settings can be used to configure how Automatic Updates are applied to "
au3="the Windows system. It includes the ability to disable automatic updates and "
au4="to set the installation schedule."
au5="/AU [/v][value]"
au6="	/v	View the current Automatic Update settings"
au7="	value	value you want to set to."
au8="	Options:"
au9="	4 - Enable Automatic Updates "
au10="	3 - Enable DownloadOnly Updates "
au11="	1 - Set Manual Updates "

ar1="Terminal Service - Allow Remote Administration Connections"
ar2="This allows administrators to connect remotely for administration purposes."
ar3="/AR [/v][value]"
ar4="	/v	View the Remote Terminal Service Connection setting"
ar5="	value	(0 = enabled, 1 = disabled)"

cs1="Terminal Service - Allow connections from previous versions of Windows"
cs2="This setting configures CredSSP based user authentication for"
cs3="Terminal Service connections"
cs4="/CS  [/v][value]"
cs5="	/v	View the Terminal Service CredSSP setting"
cs6="	value	(0 = allow previous versions, 1 = require CredSSP)"

im1="IP Security (IPSEC) Monitor - allow remote management"
im2="This setting configures the server to allow the IP Security (IPSEC) Monitor to "
im3="be able to remotely manage IPSEC."
im4="/IM [/v][value]"
im5="   /v	View the IPSEC Monitor setting"
im6="	value	(0 = do not allow, 1 = allow remote management)"

dp1="DNS SRV priority - changes the priority for DNS SRV records"
dp2="This setting configures the priority for DNS SRV records and is only useful "
dp3="on Domain Controllers."
dp4="For more information on this setting, search TechNet for LdapSrvPriority"
dp5="/DP [/v][value]"
dp6="   /v	View the DNS SRV priority setting"
dp7="	value	(value from 0 through 65535. The recommended value is 200.)"

dw1="DNS SRV weight - changes the weight for DNS SRV records"
dw2="This setting configures the weight for DNS SRV records and is only useful "
dw3="on Domain Controllers."
dw4="For more information on this setting, search TechNet for LdapSrvWeight"
dw5="/DW [/v][value]"
dw6="   /v	View the DNS SRV weight setting"
dw7="	value	(value from 0 through 65535. The recommended value is 50.)"

cli1="Command Line Reference"
cli2="This setting displays a list of common tasks and how to perform them from"
cli3="the command line."
cli4="/CLI"

reg0="/au,RegSpecialCase,RegSpecialCase,REG_DWORD,REG_DWORD"
reg1="/ar,fDenyTSConnections,System\CurrentControlSet\Control\Terminal Server,REG_DWORD,REG_DWORD"
reg2="/cs,UserAuthentication,System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp,REG_DWORD,REG_DWORD"
reg3="/im,EnableRemoteMgmt,SYSTEM\CurrentControlSet\Services\PolicyAgent,REG_DWORD,REG_DWORD"
reg4="/dp,LdapSrvPriority,SYSTEM\CurrentControlSet\Services\Netlogon\Parameters,REG_DWORD,REG_DWORD"
reg5="/dw,LdapSrvWeight,SYSTEM\CurrentControlSet\Services\Netlogon\Parameters,REG_DWORD,REG_DWORD"
reg6="/cli,none,none,none,none"

switch0="/au"
switch1="/ar"
switch2="/cs"
switch3="/im"
switch4="/dp"
switch5="/dw"
switch6="/cli"

</job>