Jump to content

Hosts File Editing Script not working


Recommended Posts

Hello Everyone, I'm running into an issue with the below hosts file script originally posted by Chewy.  Has the Author as Matt Majewski back in 2009.  Not sure if it was edited from the original creation date.  The problem I'm running into is that it is not editing the hosts file it is just appending the line to the hosts file over and over again.  It seems like it can't find the name when it searches the array.  Does someone have a working script that allows you to edit an ip if it exists or add it if it doesn't?  I have tried this on multiple computers all running Win7 Pro 64bit.  Any help would greatly be appreciated.  I'm sure I'm just missing something, but I can't seem to see it.

Thank You

Func HostUpdate()

;EDIT IP TO THE IP ADDRESS OF YOUR SERVER YOU WANT MACHINES TO IMPORT TO
$CitrixIP = "10.99.1.1"
;HOSTS file path
$sFile = @WindowsDir & "\system32\Drivers\etc\hosts"
;used to define the index in the array when citrix.mydomain.com was found
Dim $CitrixFind
;the array used to import the HOSTS file to
Dim $aRecords


;Open the HOSTS file for reading into the array
;If Not _FileReadToArray(@SystemDir & "\Drivers\etc\hosts",$aRecords) Then
If Not _FileReadToArray($sFile, $aRecords) Then

   MsgBox(4096,"Error", " Error reading log to Array     error:" & @error)
   ;MsgBox(4096,"Error", $sFile)

   Exit
EndIf


;searches the imported array to find the word "citrix.mydomain.com"
;then set the arrayindex it found it into $CitrixFind
;$CitrixFind = _ArraySearch ($aRecords, "citrix.mydomain.com", 0 , 0, 0, True)
$CitrixFind = _ArraySearch ($aRecords, "citrix.mydomain.com")


;IF it found citrix.mydomain.com
IF ($CitrixFind <> -1)  Then

;change the array to include the new ip Number
;it changes the specific array index based on the earlier search
    $aRecords[$CitrixFind] = $CitrixIP & "     citrix.mydomain.com"


;open the host file for editing
;the 2 parameter will erase the contents of the file
    $hFile = FileOpen($sFile, 2); 2 = erase
;write the array to the open File
    _FileWriteFromArray($hfile, $aRecords, 1)
;close the HOSTS file that was opened
    FileClose($hFile)

; did not find citrix.mydomain.com
Else

;open the host file for editing
;the 1 parameter will append to the end of the file
    $hFile = FileOpen($sFile, 1); 1 = append
;write the new zen ip to the end of the file
    FileWriteLine($hFile, $CitrixIP & "     citrix.mydomain.com")
;close the HOSTS file that was opened
    Fileclose($hFile)

;END IF found citrix.mydomain.com of not
EndIf

EndFunc

 

Link to comment
Share on other sites

Try changing your _ArraySearch line to this:

$CitrixFind = _ArraySearch($aRecords, "citrix.mydomain.com", 0, 0, 0, 1)

You're trying to do a partial string search without specifying to the function you are.

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Link to comment
Share on other sites

By the way there is a regular expression for HOSTS parsing. Search my username and HOSTS on the forum.

UDF List:

 
_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_ArrayFilter/_ArrayReduce_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Link to comment
Share on other sites

Thank you for your replys... 

Try changing your _ArraySearch line to this:

$CitrixFind = _ArraySearch($aRecords, "citrix.mydomain.com", 0, 0, 0, 1)

You're trying to do a partial string search without specifying to the function you are.

I added that line in and same results.  I did try that and commented out but had a True instead of a 1 so I'm glad I understand that piece now.  Still not sure why it isn't searching the array correctly.

By the way there is a regular expression for HOSTS parsing. Search my username and HOSTS on the forum.

I did a search and came up with 22 results.  Did read them all but they are well over my head.  I've been using Autoit for over a year and I think I've only tapped into 1% of its potential.  Any other suggestions would be great.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...